Commit Graph

16 Commits

Author SHA1 Message Date
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
Saúl Ibarra Corretgé
3118e5a4e4 unix,win: share loop watchers implementation
PR-URL: https://github.com/libuv/libuv/pull/974
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2016-08-05 12:49:29 +01:00
Saúl Ibarra Corretgé
9d2c77e9f6 win,build: drop support for Visual Studio < 2015
PR-URL: https://github.com/libuv/libuv/pull/966
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Fedor Indutny <fedor@indutny.com>
2016-08-04 12:02:38 +01:00
cjihrig
be8e237a8e Revert "win,build: remove unused build defines"
This reverts commit 60db5b5a1b.
Removing the WIN32_LEAN_AND_MEAN definition caused build errors
on mingw64.

Fixes: https://github.com/libuv/libuv/issues/820
PR-URL: https://github.com/libuv/libuv/pull/821
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2016-04-12 08:37:16 -04:00
Saúl Ibarra Corretgé
60db5b5a1b win,build: remove unused build defines
PR-URL: https://github.com/libuv/libuv/pull/777
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
2016-03-23 14:20:57 +01:00
Saúl Ibarra Corretgé
8d11aacb79 unix, windows: use the same threadpool implementation 2014-06-27 14:27:04 +02:00
Saúl Ibarra Corretgé
6de622c3e4 build: add missing file to Makefile.mingw 2014-06-23 08:19:29 +02:00
Saúl Ibarra Corretgé
e525b89b03 build: allow CC to be overridden on Makefile.mingw 2014-03-07 09:49:39 +01:00
Saúl Ibarra Corretgé
1fbecefa70 build: remove unneeded EXTRA_CFLAGS from Makefile.mingw 2014-03-07 09:39:42 +01:00
StarWing
29ed404138 build: add clean target, improve single file compile on MinGW 2014-02-27 09:52:46 +01:00
Ben Noordhuis
f17c535b73 unix: use a heap for timers
Replace the red-black tree with a heap.  The most common operation that
libuv performs on timers is looking up the first timer to expire.  With
a red-black tree, that operation is O(log n).  With a heap, it's O(1).
2014-02-19 13:36:14 +01:00
Saúl Ibarra Corretgé
d4c12adff6 include: expose libuv version in header files 2014-02-17 20:53:20 +01:00
Alex Crichton
a9b3fe2e19 windows: tweak Makefile.mingw for easier usage
Default CC to `gcc` instead of `cc` because at least on the mingw
installation I had there was no `cc` executable. This avoids having
to type `CC=gcc` in all the `make` commands.

Also append to `CFLAGS` instead of defining if not previously defined.
These flags are required to build libuv, so they should not be
overridden if other extra CFLAGS are supplied via the command
line as well.
2013-08-25 16:01:33 +02:00
Ben Noordhuis
d5ab1c1a3b Revert "build: remove mingw makefile"
As requested by the Rust people.

This reverts commit 8f3621e4dd.
2013-08-26 22:05:01 +02:00
Ben Noordhuis
8f3621e4dd build: remove mingw makefile
Commit e52aa6c adds MinGW support to the autotools build.  Remove the
Makefile, it's no longer needed.
2013-08-24 21:50:08 +02:00
Ben Noordhuis
977e8337ba build: add mingw makefile
* add a very simple Makefile.mingw that builds libuv.a
* apply a couple of fixes to src/win so it actually builds with mingw
  (mostly missing includes)

Fixes #847.
2013-07-25 02:13:28 +02:00