mirror of /home/gitosis/repositories/libev.git
fix a race between ev_async and ev_signal
This commit is contained in:
parent
0f428d452b
commit
8484be105d
16
ev.c
16
ev.c
|
@ -817,17 +817,15 @@ evpipe_init (EV_P)
|
|||
}
|
||||
|
||||
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 @@ sighandler (int signum)
|
|||
#endif
|
||||
|
||||
signals [signum - 1].gotsig = 1;
|
||||
evpipe_write (EV_A_ 1, 0);
|
||||
evpipe_write (EV_A_ &gotsig);
|
||||
}
|
||||
|
||||
void noinline
|
||||
|
@ -2470,7 +2468,7 @@ void
|
|||
ev_async_send (EV_P_ ev_async *w)
|
||||
{
|
||||
w->sent = 1;
|
||||
evpipe_write (EV_A_ 0, 1);
|
||||
evpipe_write (EV_A_ &gotasync);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in New Issue