Simplified fdpair reset after fork

This commit is contained in:
Pieter Hintjens 2013-11-07 15:30:25 +01:00
parent 2be70dca1a
commit 51f8571933

View File

@ -181,8 +181,7 @@ int zmq::signaler_t::wait (int timeout_)
return -1; return -1;
} }
#ifdef HAVE_FORK #ifdef HAVE_FORK
if (unlikely(pid != getpid())) if (unlikely(pid != getpid())) {
{
// we have forked and the file descriptor is closed. Emulate an interupt // we have forked and the file descriptor is closed. Emulate an interupt
// response. // response.
//printf("Child process %d signaler_t::wait returning simulating interrupt #2\n", getpid()); //printf("Child process %d signaler_t::wait returning simulating interrupt #2\n", getpid());
@ -263,23 +262,10 @@ void zmq::signaler_t::recv ()
#ifdef HAVE_FORK #ifdef HAVE_FORK
void zmq::signaler_t::forked() void zmq::signaler_t::forked()
{ {
int oldr = r; // Close file descriptors created in the parent and create new pair
#if !defined ZMQ_HAVE_EVENTFD close (r);
int oldw = w; close (w);
#endif
// replace the file descriptors created in the parent with new
// ones, and close the inherited ones
make_fdpair (&r, &w); make_fdpair (&r, &w);
#if defined ZMQ_HAVE_EVENTFD
int rc = close (oldr);
errno_assert (rc == 0);
#else
int rc = close (oldw);
errno_assert (rc == 0);
rc = close (oldr);
errno_assert (rc == 0);
#endif
} }
#endif #endif