diff options
author | root <root> | 2012-05-01 22:01:40 +0000 |
---|---|---|
committer | root <root> | 2012-05-01 22:01:40 +0000 |
commit | 6057940c0ca57e2a9feba9eac38daafae9b89635 (patch) | |
tree | 3510e762c10269baa7ca22bed50bf96ffb1afaf5 | |
parent | 6b2ac50b05c2fbd0025f2cb5ff1c654bdab8949a (diff) |
*** empty log message ***
-rw-r--r-- | Changes | 2 | ||||
-rw-r--r-- | ev.c | 8 |
2 files changed, 10 insertions, 0 deletions
@@ -13,6 +13,8 @@ TODO: assert on fd watcher linked list pointing to itself - fix event_base_loop return code, add event_get_callback, event_base_new, event_base_get_method calls to improve libevent 1.x emulation and add some libevent 2.x funcitonality (based on a patch by Jeff Davey). + - add more memory fences to fix a bug reported by Jeff Davey. Better + be overfenced than underprotected. - ev_run now returns a boolean status (true meaning watchers are still active). - ev_once: undef EV_ERROR in ev_kqueue.c, to avoid clashing with @@ -1846,6 +1846,8 @@ evpipe_init (EV_P) inline_speed void evpipe_write (EV_P_ EV_ATOMIC_T *flag) { + ECB_MEMORY_FENCE; /* push out the write before this function was called, acquire flag */ + if (expect_true (*flag)) return; @@ -1914,11 +1916,15 @@ pipecb (EV_P_ ev_io *iow, int revents) pipe_write_skipped = 0; + ECB_MEMORY_FENCE; /* push out skipped, acquire flags */ + #if EV_SIGNAL_ENABLE if (sig_pending) { sig_pending = 0; + ECB_MEMORY_FENCE_RELEASE; + for (i = EV_NSIG - 1; i--; ) if (expect_false (signals [i].pending)) ev_feed_signal_event (EV_A_ i + 1); @@ -1930,6 +1936,8 @@ pipecb (EV_P_ ev_io *iow, int revents) { async_pending = 0; + ECB_MEMORY_FENCE_RELEASE; + for (i = asynccnt; i--; ) if (asyncs [i]->sent) { |