From ee66c579dedf7130aa4d59afbf373f28c98eead5 Mon Sep 17 00:00:00 2001 From: Martin Sustrik Date: Sat, 14 Apr 2012 10:08:19 +0200 Subject: Report EMFILE/ENFILE from xs_socket() This patch propoagates the error from signaler and mailbox initialisation up the stack. To achieve this signaler and mailbox classes were re-written is C-like syntax. Finally, shutdown_stress test now ignores EMFILE/ENFILE errors. Thus, the tests should pass even on OSX which sets the max number of file descriptors pretty low by default. Signed-off-by: Martin Sustrik --- src/reaper.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'src/reaper.cpp') diff --git a/src/reaper.cpp b/src/reaper.cpp index b610151..52b3e2d 100644 --- a/src/reaper.cpp +++ b/src/reaper.cpp @@ -27,16 +27,20 @@ xs::reaper_t::reaper_t (class ctx_t *ctx_, uint32_t tid_) : sockets (0), terminating (false) { + int rc = mailbox_init (&mailbox); + errno_assert (rc == 0); + io_thread = io_thread_t::create (ctx_, tid_); xs_assert (io_thread); - mailbox_handle = io_thread->add_fd (mailbox.get_fd (), this); + mailbox_handle = io_thread->add_fd (mailbox_fd (&mailbox), this); io_thread->set_pollin (mailbox_handle); } xs::reaper_t::~reaper_t () { delete io_thread; + mailbox_close (&mailbox); } xs::mailbox_t *xs::reaper_t::get_mailbox () @@ -61,7 +65,7 @@ void xs::reaper_t::in_event (fd_t fd_) // Get the next command. If there is none, exit. command_t cmd; - int rc = mailbox.recv (&cmd, 0); + int rc = mailbox_recv (&mailbox, &cmd, 0); if (rc != 0 && errno == EINTR) continue; if (rc != 0 && errno == EAGAIN) -- cgit v1.2.3