--- libev/ev.c 2008/02/19 19:13:50 1.213 +++ libev/ev.c 2008/02/19 19:21:20 1.214 @@ -817,17 +817,15 @@ } void inline_size -evpipe_write (EV_P_ int sig, int async) +evpipe_write (EV_P_ EV_ATOMIC_T *flag) { - int sent = gotasync || gotsig; - - if (sig) gotsig = 1; - if (async) gotasync = 1; - - if (!sent) + if (!*flag) { int old_errno = errno; /* save errno becaue write might clobber it */ + + *flag = 1; write (evpipe [1], &old_errno, 1); + errno = old_errno; } } @@ -880,7 +878,7 @@ #endif signals [signum - 1].gotsig = 1; - evpipe_write (EV_A_ 1, 0); + evpipe_write (EV_A_ &gotsig); } void noinline @@ -2470,7 +2468,7 @@ ev_async_send (EV_P_ ev_async *w) { w->sent = 1; - evpipe_write (EV_A_ 0, 1); + evpipe_write (EV_A_ &gotasync); } #endif