Commit Graph

15 Commits

Author SHA1 Message Date
Ben Noordhuis
27cd5f03ef linux: fix accept4() ENOSYS detection on i386
accept4() piggybacks on the socketcall() on i386. socketcall() has the flaw
that it returns EINVAL instead of ENOSYS when the operation is not supported.

The problem is that accept4() also returns EINVAL when its flag argument is
invalid.

Try to discern between the two failure cases to the best of our abilities.
2012-06-29 02:11:45 +02:00
Ben Noordhuis
c1d8e011f4 linux: fix typo in syscall name 2012-06-18 17:06:50 +02:00
Ben Noordhuis
3b417d10bc linux: add eventfd and eventfd2 syscalls 2012-06-11 04:20:03 +02:00
Ben Noordhuis
59cda86709 unix, test: make NANOSEC a 64 bits unsigned int
Avoids accidental overflow / truncation when it's used in 32 bits arithmetic.
2012-06-07 17:00:01 +02:00
Ben Noordhuis
3bc9707054 unix: replace ev_io with uv__io_t
Replace ev_io usage with wrapper constructs.

This is preliminary work for the transition to a libev-less linux backend.
2012-05-23 03:42:32 +02:00
Ben Noordhuis
9efa8b3571 unix, windows: rework reference counting scheme
This commit changes how the event loop determines if it needs to stay alive.

Previously, an internal counter was increased whenever a handle got created
and decreased again when the handle was closed.

While conceptually simple, it turned out hard to work with: you often want
to keep the event loop alive only if the handle is actually doing something.
Stopped or inactive handles were a frequent source of hanging event loops.

That's why this commit changes the reference counting scheme to a model where
a handle only references the event loop when it's active. 'Active' means
different things for different handle types, e.g.:

 * timers: ticking
 * sockets: reading, writing or listening
 * processes: always active (for now, subject to change)
 * idle, check, prepare: only active when started

This commit also changes how the uv_ref() and uv_unref() functions work: they
now operate on the level of individual handles, not the whole event loop.

The Windows implementation was done by Bert Belder.
2012-05-17 07:07:53 +02:00
Ben Noordhuis
fac3b68fff linux: add IN_MOVE_SELF to inotify event mask
Partially fixes joyent/node#3172, behavior is now consistent with inotifywait.
2012-04-28 02:47:58 +02:00
Ben Noordhuis
f4e7537184 unix: move inotify init logic to loop.c 2012-04-05 15:13:14 +02:00
Ben Noordhuis
5a8446c309 unix: move handle specific close logic out of core.c 2012-04-04 05:30:15 -07:00
Ben Noordhuis
685b36ba66 linux: tidy up syscall code 2012-03-31 00:19:01 +00:00
Ben Noordhuis
4ff0898c5f unix: replace uv__close() with close()
uv__close() was deprecated a while ago. It's been an alias for close() ever
since. Remove it.
2012-03-21 02:11:18 +01:00
Ben Noordhuis
49d4e1884b linux: use CLOCK_BOOTTIME if available
Use CLOCK_BOOTTIME to calculate the system uptime. Fall back to CLOCK_MONOTONIC
if CLOCK_BOOTTIME is not available (all pre-2.6.39 kernels).

The problem with CLOCK_MONOTONIC is that it doesn't increase when the system is
suspended, making the uptime differ from what the uptime(1) tool reports.
2012-03-19 07:55:16 -07:00
Ben Noordhuis
87151c8a7b Use RB_GENERATE_STATIC, not RB_GENERATE_INTERNAL. 2012-03-16 02:35:05 +01:00
Ben Noordhuis
1b6df97690 linux: try inotify_init if inotify_init1 returns ENOSYS
The kernel may be older than the kernel headers that libuv is compiled against.
2012-03-15 01:01:21 +01:00
Ben Noordhuis
d3efefb043 linux: share inotify fd across event loop
Previously, a new inotify fd was created for each watcher, making it quite easy
to run into the system-wide fs.inotify.max_user_instances limit (usually 128).

Fixes #300.
2012-02-23 09:21:30 -08:00