libuv/include
Saúl Ibarra Corretgé 78a1cd167f win,async: refactor internal implementation
- Use atomic ops both to set and reset async_sent flag
- Remove the MinGW atomic ops, since Windows intrinsics are supported
- Remone thread-unsafe checks from uv_async_send

According to MSDN there are no alignment requirements. We could use
InterlockedExchange8, but that's only available on Windows >= 8.

This change is intended to make uv_async_send more resilient. It has to
be thread-safe, and that means that the handle could just have been
closed when uv_async_send was called. This case was previously not
handles (there is an inherent race condition). The new model is inspired
by the one used on the Unix side, which uses a single fd (or overlapped
in this case) to wakeup the loop and then process all pending async
handles. This makes handling those edge cases a lot simpler: when the
handle is closed it's removed from the handle queue, and then it's not
processed at all.

As a result of this change, async benchmarks work on Windows where they
previously failed with assertions.

PR-URL: https://github.com/libuv/libuv/pull/980
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2016-08-09 13:12:41 +01:00
..
android-ifaddrs.h
pthread-barrier.h
tree.h
uv-aix.h
uv-bsd.h
uv-darwin.h
uv-errno.h
uv-linux.h
uv-sunos.h
uv-threadpool.h
uv-unix.h
uv-version.h
uv-win.h win,async: refactor internal implementation 2016-08-09 13:12:41 +01:00
uv.h