… | |
… | |
1849 | |
1849 | |
1850 | if (expect_true (*flag)) |
1850 | if (expect_true (*flag)) |
1851 | return; |
1851 | return; |
1852 | |
1852 | |
1853 | *flag = 1; |
1853 | *flag = 1; |
1854 | |
|
|
1855 | ECB_MEMORY_FENCE_RELEASE; /* make sure flag is visible before the wakeup */ |
1854 | ECB_MEMORY_FENCE_RELEASE; /* make sure flag is visible before the wakeup */ |
1856 | |
1855 | |
1857 | pipe_write_skipped = 1; |
1856 | pipe_write_skipped = 1; |
1858 | |
1857 | |
1859 | ECB_MEMORY_FENCE; /* make sure pipe_write_skipped is visible before we check pipe_write_wanted */ |
1858 | ECB_MEMORY_FENCE; /* make sure pipe_write_skipped is visible before we check pipe_write_wanted */ |
1860 | |
1859 | |
1861 | if (pipe_write_wanted) |
1860 | if (pipe_write_wanted) |
1862 | { |
1861 | { |
1863 | int old_errno; |
1862 | int old_errno; |
1864 | |
1863 | |
1865 | pipe_write_skipped = 0; /* just an optimisation, no fence needed */ |
1864 | pipe_write_skipped = 0; |
|
|
1865 | ECB_MEMORY_FENCE_RELEASE; |
1866 | |
1866 | |
1867 | old_errno = errno; /* save errno because write will clobber it */ |
1867 | old_errno = errno; /* save errno because write will clobber it */ |
1868 | |
1868 | |
1869 | #if EV_USE_EVENTFD |
1869 | #if EV_USE_EVENTFD |
1870 | if (evfd >= 0) |
1870 | if (evfd >= 0) |
… | |
… | |
1929 | #if EV_SIGNAL_ENABLE |
1929 | #if EV_SIGNAL_ENABLE |
1930 | if (sig_pending) |
1930 | if (sig_pending) |
1931 | { |
1931 | { |
1932 | sig_pending = 0; |
1932 | sig_pending = 0; |
1933 | |
1933 | |
1934 | ECB_MEMORY_FENCE_RELEASE; |
1934 | ECB_MEMORY_FENCE; |
1935 | |
1935 | |
1936 | for (i = EV_NSIG - 1; i--; ) |
1936 | for (i = EV_NSIG - 1; i--; ) |
1937 | if (expect_false (signals [i].pending)) |
1937 | if (expect_false (signals [i].pending)) |
1938 | ev_feed_signal_event (EV_A_ i + 1); |
1938 | ev_feed_signal_event (EV_A_ i + 1); |
1939 | } |
1939 | } |
… | |
… | |
1942 | #if EV_ASYNC_ENABLE |
1942 | #if EV_ASYNC_ENABLE |
1943 | if (async_pending) |
1943 | if (async_pending) |
1944 | { |
1944 | { |
1945 | async_pending = 0; |
1945 | async_pending = 0; |
1946 | |
1946 | |
1947 | ECB_MEMORY_FENCE_RELEASE; |
1947 | ECB_MEMORY_FENCE; |
1948 | |
1948 | |
1949 | for (i = asynccnt; i--; ) |
1949 | for (i = asynccnt; i--; ) |
1950 | if (asyncs [i]->sent) |
1950 | if (asyncs [i]->sent) |
1951 | { |
1951 | { |
1952 | asyncs [i]->sent = 0; |
1952 | asyncs [i]->sent = 0; |
|
|
1953 | ECB_MEMORY_FENCE_RELEASE; |
1953 | ev_feed_event (EV_A_ asyncs [i], EV_ASYNC); |
1954 | ev_feed_event (EV_A_ asyncs [i], EV_ASYNC); |
1954 | } |
1955 | } |
1955 | } |
1956 | } |
1956 | #endif |
1957 | #endif |
1957 | } |
1958 | } |
… | |
… | |
2002 | if (expect_false (signals [signum].loop != EV_A)) |
2003 | if (expect_false (signals [signum].loop != EV_A)) |
2003 | return; |
2004 | return; |
2004 | #endif |
2005 | #endif |
2005 | |
2006 | |
2006 | signals [signum].pending = 0; |
2007 | signals [signum].pending = 0; |
|
|
2008 | MEMORY_FENCE_RELEASE; |
2007 | |
2009 | |
2008 | for (w = signals [signum].head; w; w = w->next) |
2010 | for (w = signals [signum].head; w; w = w->next) |
2009 | ev_feed_event (EV_A_ (W)w, EV_SIGNAL); |
2011 | ev_feed_event (EV_A_ (W)w, EV_SIGNAL); |
2010 | } |
2012 | } |
2011 | |
2013 | |