summaryrefslogtreecommitdiff
path: root/src/io_thread.cpp
diff options
context:
space:
mode:
authorMartin Sustrik <sustrik@250bpm.com>2012-04-14 10:08:19 +0200
committerMartin Sustrik <sustrik@250bpm.com>2012-04-15 06:55:29 +0200
commitee66c579dedf7130aa4d59afbf373f28c98eead5 (patch)
tree2b29d8e236b02789877da88ecf05d5b463c046da /src/io_thread.cpp
parent19894e0a1b6fbbcb62028fc6513ef3904a6f5c76 (diff)
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 <sustrik@250bpm.com>
Diffstat (limited to 'src/io_thread.cpp')
-rw-r--r--src/io_thread.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/io_thread.cpp b/src/io_thread.cpp
index dba0f00..df5a623 100644
--- a/src/io_thread.cpp
+++ b/src/io_thread.cpp
@@ -48,15 +48,18 @@ xs::io_thread_t *xs::io_thread_t::create (xs::ctx_t *ctx_, uint32_t tid_)
xs::io_thread_t::io_thread_t (xs::ctx_t *ctx_, uint32_t tid_) :
object_t (ctx_, tid_)
{
+ int rc = mailbox_init (&mailbox);
+ errno_assert (rc == 0);
}
xs::io_thread_t::~io_thread_t ()
{
+ mailbox_close (&mailbox);
}
void xs::io_thread_t::start ()
{
- mailbox_handle = add_fd (mailbox.get_fd (), this);
+ mailbox_handle = add_fd (mailbox_fd (&mailbox), this);
set_pollin (mailbox_handle);
xstart ();
}
@@ -149,7 +152,7 @@ void xs::io_thread_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)