Commit Graph

1390 Commits

Author SHA1 Message Date
Bert Belder
7d8504cf69 queue: fix pointer truncation on LLP64 platforms
QUEUE_DATA used to cast a pointer to long and back to pointer. This can
corrupt pointers on systems where the long type isn't large enough to
store pointer, like Windows x64. This commit fixes that.

Fixes #835
2013-06-15 14:08:36 +02:00
Ben Noordhuis
7e8d0e6d9c Merge remote-tracking branch 'origin/v0.10' 2013-06-13 09:05:12 +02:00
Andrei Sedoi
5096f1e096 linux: add support for MIPS 2013-06-13 09:04:15 +02:00
Ben Noordhuis
0c3b061aac Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	src/unix/stream.c
	src/version.c
2013-06-13 02:28:44 +02:00
Ben Noordhuis
72e440d7e1 Now working on v0.10.12 2013-06-12 21:52:05 +02:00
Ben Noordhuis
c3b75406a6 2013.06.13, Version 0.10.11 (Stable)
Changes since version 0.10.10:

* unix: unconditionally stop handle on close (Ben Noordhuis)

* freebsd: don't enable dtrace if it's not available (Brian White)

* build: make HAVE_DTRACE=0 should disable dtrace (Timothy J. Fontaine)

* unix: remove overzealous assert (Ben Noordhuis)

* unix: clear UV_STREAM_SHUTTING after shutdown() (Ben Noordhuis)

* unix: fix busy loop, write if POLLERR or POLLHUP (Ben Noordhuis)
2013-06-12 21:52:01 +02:00
Ben Noordhuis
12210fe578 unix: fix busy loop, write if POLLERR or POLLHUP
This fixes a busy loop by working around a quirk with Linux kernels
<= 2.6.32 where an EPIPE or ECONNRESET error on a file descriptor that
is polled for EPOLLOUT but not EPOLLIN gets reported by epoll_wait() as
just EPOLLERR|EPOLLHUP, like this:

  epoll_wait(5, {{EPOLLERR|EPOLLHUP, {u32=12, u64=12}}}, 1024, 433) = 1

Before this commit, libuv called uv__read() which attempts to read from
the file descriptor.  With newer kernels and on other operating systems
that fails like this:

  read(12, "", 65536)         = -1 EPIPE (Broken pipe)

Which tells libuv there is a connection error and it should notify the
user of that.  On the affected Linux kernels however, the read succeeds
with an EOF:

  read(12, "", 65536)         = 0

Which is subsequently passed on to the user. In most cases, the user
will close the handle and everything is fine.

Node.js however sometimes keeps the handle open in an attempt to flush
pending write requests.  While libuv doesn't officially support this,
unofficially it works...

...except on those older kernels.  Because the kernel keeps waking up
the event loop without setting POLLOUT and because the read calls EOF
but don't error, libuv's I/O state machine doesn't progress.

That's why this commit changes uv__stream_io() to also write pending
data.  While the read() system call doesn't error, the write() system
call will.

Fixes joyent/node#5504.
2013-06-08 04:09:42 +02:00
Ben Noordhuis
536c5f8661 unix: clear UV_STREAM_SHUTTING after shutdown()
Fix a state machine buglet where the UV_STREAM_SHUTTING flag didn't get
cleared.
2013-06-08 03:14:33 +02:00
Ben Noordhuis
3ab354367b unix: remove overzealous assert
Several node.js users are hitting this assert under what appear to be
mostly benign conditions. In other words, it's unclear whether it's
catching real bugs or just has wrong expectations.

An aborting process is rather disruptive so I'm removing the assert
from the stable branch and relanding it in the master branch.
2013-06-07 11:28:32 +02:00
Ben Noordhuis
897463326b unix, windows: clean up uv_thread_create()
Make uv_thread_create() and its helper function a little more DRY and
a little less impenetrable.
2013-06-06 11:27:07 +02:00
Ben Noordhuis
43205ed553 unix: remove unused function uv_fatal_error() 2013-06-06 08:54:36 +02:00
Ben Noordhuis
c16ed503b0 Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	AUTHORS
	ChangeLog
	src/unix/stream.c
	src/version.c
2013-06-07 11:41:41 +02:00
Ben Noordhuis
8e4b248ca6 unix: unconditionally stop handle on close
Make sure the handle is fully stopped by the time uv__stream_close()
calls uv_read_stop(). Fixes the following assertion:

    Assertion failed: (!uv__io_active(&stream->io_watcher, UV__POLLOUT)
    || !ngx_queue_empty(&stream->write_completed_queue)
    || !ngx_queue_empty(&stream->write_queue)
    || stream->shutdown_req != NULL
    || stream->connect_req != NULL), function uv_read_stop,
    file ../deps/uv/src/unix/stream.c, line 1329.

Fixes joyent/node#5622.
2013-06-05 15:17:01 +02:00
isaacs
e9ae62d13a Now working on v0.10.11 2013-06-04 12:00:31 -07:00
isaacs
0d95a88bd3 2013.06.05, Version 0.10.10 (Stable)
Changes since version 0.10.9:

* include: document uv_update_time() and uv_now() (Ben Noordhuis)

* linux: fix cpu model parsing on newer arm kernels (Ben Noordhuis)

* linux: fix memory leak in uv_cpu_info() error path (Ben Noordhuis)

* linux: don't ignore OOM errors in uv_cpu_info() (Ben Noordhuis)

* unix, windows: move uv_now() to uv-common.c (Ben Noordhuis)

* darwin: make uv_fs_sendfile() respect length param (Wynn Wilkes)
2013-06-04 12:00:29 -07:00
Ben Noordhuis
c766dfe815 src: make queue.h c++ compatible
Squelch a warning about a cast from void* to another pointer type.
It's legal C but not legal C++. Makes queue.h usable in node.js.
2013-06-04 12:20:40 +02:00
Linus Mårtensson
3fdd2a1128 uv: support android libuv standalone build
Tested most of my compilation in the previous patch on NodeJS
and extracted the patches from there. This patch ensures libuv
will be capable of building standalone as well, both with gyp
and Makefiles.

Build documentation was added to the README.md file.

Some tests are failing, and I have not heavily investigated
the reasons. The failures are generally on errors, and are
likely related to differences between fully POSIX-compatible
systems and android.
2013-05-31 13:25:17 +02:00
Ben Noordhuis
442d11d618 unix: avoid extra read, short-circuit on POLLHUP
Avoid going through an extra alloc_cb -> read() -> read_cb cycle when
the POLLHUP flag is set because we know the next read() will hit EOF.

Fixes #803.
2013-05-30 22:34:03 +02:00
Wynn Wilkes
b4c658c3c0 darwin: make uv_fs_sendfile() respect length param
The darwin sendfile implementation uses the &len parameter as input
and output. The code was sending 0 (not using the value of req->len)
so the behavior wasn't what the caller was expecting.

This makes sure to initialize len with req->len to ensure that the
caller can send portions of a file (not always everything to the
end of the file).
2013-05-29 22:25:43 +02:00
Ben Noordhuis
e0bdb3dbc9 unix, windows: move uv_now() to uv-common.c 2013-05-29 16:13:34 +02:00
Ben Noordhuis
b93cf8b594 linux: don't ignore OOM errors in uv_cpu_info() 2013-05-29 01:43:05 +02:00
Ben Noordhuis
31282a97e7 linux: fix memory leak in uv_cpu_info() error path
Any memory allocated to hold CPU model strings wasn't freed on error.
2013-05-29 01:43:05 +02:00
Ben Noordhuis
92c72f58bf linux: fix cpu model parsing on newer arm kernels
The format of /proc/cpuinfo on ARM kernels >= 3.8 has changed. Scan for
the string "model name" (like x86) first, "Processor" second.

Fixes #812.
2013-05-29 01:40:09 +02:00
isaacs
21c12b824a Now working on v0.10.10 2013-05-28 12:08:49 -07:00
isaacs
a195f9ace2 2013.05.29, Version 0.10.9 (Stable)
Changes since version 0.10.8:

* unix: fix stream refcounting buglet (Ben Noordhuis)

* unix: remove erroneous asserts (Ben Noordhuis)

* unix: add uv__is_closing() macro (Ben Noordhuis)

* unix: stop stream POLLOUT watcher on write error (Ben Noordhuis)
2013-05-28 12:08:46 -07:00
Ben Noordhuis
b329d51ef4 unix: stop stream POLLOUT watcher on write error
The node.js test suite sometimes hits the assert that was added in
commit 4146805 that checks if there are connect, write or shutdown
requests pending when the user calls uv_read_stop() while the stream
is primed for writing.

The libuv user (i.e. node.js) is supposed to close the stream on error.
Because uv__stream_close() calls uv_read_stop(), it's possible that the
POLLOUT watcher is still active.
2013-05-27 00:28:37 +02:00
Ben Noordhuis
8e16f8e056 unix: add uv__is_closing() macro 2013-05-26 23:02:17 +02:00
Linus Mårtensson
fc6a2ad24f unix: support for android builds
Adds targets and fixes to ensure building for android works.

To build on android, refer to the android standalone toolchain.
2013-05-25 21:16:52 +02:00
Bert Belder
bec8f3cb24 Now working on v0.11.5 2013-05-30 01:01:23 +02:00
Bert Belder
e43e5b3d95 2013.05.30, Version 0.11.4 (Unstable)
Changes since version 0.11.3:

* windows: make uv_spawn not fail when the libuv embedding application
  is run under external job control (Bert Belder)

* darwin: assume CFRunLoopStop() isn't thread-safe, fixing a race
  condition when stopping the 'stdin select hack' thread (Fedor Indutny)

* win: fix UV_EALREADY not being reported correctly to the libuv user in
  some cases (Bert Belder)

* darwin: make the uv__cf_loop_runner and uv__cf_loop_cb functions
  static (Ben Noordhuis)

* darwin: task_info() cannot fail (Ben Noordhuis)

* unix: add error mapping for ENETDOWN (Ben Noordhuis)

* unix: implicitly signal write errors to the libuv user (Ben Noordhuis)

* unix: fix assertion error on signal pipe overflow (Bert Belder)

* unix: turn off POLLOUT after stream connect (Ben Noordhuis)

* unix: fix stream refcounting buglet (Ben Noordhuis)

* unix: remove assert statements that are no longer correct (Ben
  Noordhuis)

* unix: appease warning about non-standard `inline` (Sean Silva)

* unix: add uv__is_closing() macro (Ben Noordhuis)

* unix: stop stream POLLOUT watcher on write error (Ben Noordhuis)

* include: document uv_update_time() and uv_now() (Ben Noordhuis)

* linux: fix cpu model parsing on newer arm kernels (Ben Noordhuis)

* linux: fix a memory leak in uv_cpu_info() error path (Ben Noordhuis)

* linux: don't ignore out-of-memory errors in uv_cpu_info() (Ben
  Noordhuis)

* unix, windows: move uv_now() to uv-common.c (Ben Noordhuis)

* test: fix a compilation problem in test-osx-select.c that was caused
  by the use of c-style comments (Bert Belder)

* darwin: use uv_fs_sendfile() use the sendfile api correctly (Wynn
  Wilkes)

* windows: call idle handles on every loop iteration, something the unix
  implementation already did (Bert Belder)

* test: update the idle-starvation test to verify that idle handles are
  called in every loop iteration (Bert Belder)

* unix, windows: ensure that uv_run() in RUN_ONCE mode calls timers that
  expire after blocking (Ben Noordhuis)
2013-05-30 01:00:55 +02:00
Ben Noordhuis
f6d8ba3c9a unix, windows: run expired timers in run-once mode
Before this commit, creating an event loop, starting a timer and
calling uv_run(UV_RUN_ONCE) blocked in uv_run() until the timer
expired - but didn't actually run the timer.
2013-05-30 00:33:23 +02:00
Ben Noordhuis
8ef9592a95 Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	ChangeLog
	src/unix/stream.c
	src/version.c
2013-05-29 23:32:07 +02:00
Bert Belder
bc56a4e05c windows: call idle handles on every loop iteration
This mimicks what the unix implementation does: call idle handles on
every loop iteration. The guarantee that it runs on every loop iteration
makes it easier to predict and opens up more use cases.

Note that the name uv_idle is now a bit of a misnomer. There is
actually no guarantee that libuv completely processed all i/o
when an iteration ends. The windows implementation at least limits
the amount of callbacks processed in a single iteration to avoid some
handles getting a disproportionate amount of cpu attention.
2013-05-29 22:50:59 +02:00
Sean Silva
c39648674c unix: appease warning about non-standard inline
Clang warns about using `inline`, which is not technically allowed in
C89 mode (libuv compiles with `-std=c89`). It's probably best to leave
it to the compiler to do the inlining anyway.
2013-05-25 13:08:05 +02:00
Ben Noordhuis
b38c9c1004 unix: remove erroneous asserts
As of commit c53fe81, it's legal for write_queue_size > 0 when the
write_queue itself is empty. Sounds illogical but it means there are
error-state write requests in the write_completed_queue that will touch
up the write_queue_size on the next tick of the event loop.

Remove a few stray asserts that still checked for the old situation.
2013-05-25 02:36:58 +02:00
Ben Noordhuis
636a13b8c4 unix: fix stream refcounting buglet
Fix a buglet where uv_read_stop() would mark the handle as stopped even
when there are in-progress write requests.

This bug is unlikely to have affected anyone, the only case where it
has a user-visible effect is when:

  a) the handle has been stopped for reading but not writing, and
  b) it's the last active handle in the event loop's pollset

If both conditions are met, it's possible for the event loop to
terminate prematurely.

This reapplies commit 80f2f82 which was temporarily reverted in fe7b154
because it was making a lot of node.js tests fail on OS X with the
following assertion:

    Assertion failed: (!uv__is_active(handle)), function
    uv__finish_close, file ../../deps/uv/src/unix/core.c, line 165.

Expecting that the handle is inactive when the state is UV_CLOSING
turns out to be a bad assumption: it's possible that the handle is
executing (for example) a shutdown request when uv__finish_close()
is called. That's okay, uv__stream_destroy() takes care of that.

The issue wasn't specific to OS X, it was just more visible on that
platform. (Slow) debug builds on Linux exhibited the same behavior.
2013-05-25 01:30:05 +02:00
isaacs
7d5024e7e6 Now working on v0.10.9 2013-05-24 14:37:56 -07:00
isaacs
0f39be1292 2013.05.25, Version 0.10.8 (Stable)
Changes since version 0.10.7:

* windows: make uv_spawn not fail under job control (Bert Belder)

* darwin: assume CFRunLoopStop() isn't thread-safe (Fedor Indutny)

* win: fix UV_EALREADY incorrectly set (Bert Belder)

* darwin: make two uv__cf_*() functions static (Ben Noordhuis)

* darwin: task_info() cannot fail (Ben Noordhuis)

* unix: add mapping for ENETDOWN (Ben Noordhuis)

* unix: implicitly signal write errors to libuv user (Ben Noordhuis)

* unix: fix assert on signal pipe overflow (Bert Belder)

* unix: turn off POLLOUT after stream connect (Ben Noordhuis)
2013-05-24 14:37:53 -07:00
Ben Noordhuis
fe7b154476 Revert "unix: fix stream refcounting buglet"
This change is making 45 out of 527 node.js tests fail on OS X with the
following assertion:

    Assertion failed: (!uv__is_active(handle)), function
    uv__finish_close, file ../../deps/uv/src/unix/core.c, line 165.

It's likely a manifestation of a bug elsewhere but, because there's a
new node.js release going out tonight, I'm reverting it for now.

This reverts commit 80f2f826bf.

Conflicts:
	src/unix/stream.c
2013-05-24 21:23:41 +02:00
Ben Noordhuis
4146805074 unix: turn off POLLOUT after stream connect
Clear the POLLOUT flag after we're done connecting. Not doing so isn't
really harmful but it may cause the event loop to wake up more often
than it has to.
2013-05-24 20:35:42 +02:00
Ben Noordhuis
80f2f826bf unix: fix stream refcounting buglet
Fix a buglet where uv_read_stop() would mark the handle as stopped even
when there are in-progress write requests.

This bug is unlikely to have affected anyone, the only case where it
has a user-visible effect is when:

  a) the handle has been stopped for reading but not writing, and
  b) it's the last active handle in the event loop's pollset

If both conditions are met, it's possible for the event loop to
terminate prematurely.
2013-05-23 07:33:12 +02:00
Bert Belder
c5d570ddba unix: fix assert on signal pipe overflow
An incorrect assert() statement was causing libuv to crash when writing
to an internal signal pipe would result in EAGAIN/EWOULDBLOCK.

This commit doesn't solve the underlying issue that the signal pipe can
overflow.

This should fix joyent/node#5538
2013-05-23 14:44:45 +02:00
Ben Noordhuis
c53fe81544 unix: implicitly signal write errors to libuv user
Fix an infinite loop in the example below when the stream encounters
an EPIPE/ECONNRESET/etc. error:

    // keep writing until we start buffering
    while (stream->write_queue_size == 0) {
      uv_write_t* req = make_write_req();
      uv_buf_t buf = uv_buf_init("PING", 4);
      uv_write(req, stream, &buf, 1, write_cb);
    }

uv_write() does not return an error code on write errors, the error is
only reported to the callback.

Before this commit, uv_write() left stream->write_queue_size untouched
on error, meaning the caller had no way to find out about that error
until the next tick of the event loop - which in the example above
leads to an infinite loop because that next tick is indefinitely
postponed.

This commit works around that at the cost of some added internal
complexity.

Fixes joyent/node#5516.
2013-05-22 17:00:17 +02:00
Ben Noordhuis
739a5b25b5 unix: add mapping for ENETDOWN 2013-05-20 20:05:33 +02:00
Ben Noordhuis
a1cb52a3eb darwin: task_info() cannot fail
And if it does: assert, don't return errno. It's a mach function, it
doesn't set errno.
2013-05-20 14:36:50 +02:00
Ben Noordhuis
e515d71592 darwin: make two uv__cf_*() functions static 2013-05-19 19:53:24 +02:00
Bert Belder
7dbb974fd5 Merge branch 'v0.10'
Conflicts:
	src/unix/darwin.c
2013-05-18 20:51:16 +02:00
Bert Belder
db7dc6899d win: fix UV_EALREADY incorrectly set
UV_EALREADY itself is already a libuv error, it should be set with
uv__set_artifical_error and not with uv__set_sys_error.

Closes #802
2013-05-18 20:45:36 +02:00
Fedor Indutny
d5fa633ef2 darwin: assume CFRunLoopStop() isn't thread-safe
Use signaling mechanism for loop termination, because CFRunLoopStop() is
most likely not a thread-safe function and invoking it from other thread
may sometimes result in a "dead-lock".

fix #799
2013-05-17 20:31:39 +04:00
Bert Belder
4f61ab2058 windows: make uv_spawn not fail under job control
* Fix a potential issue introduced with 415f4d3, namely that uv_spawn
  can fail when the current process is under job control. This would
  happen on Windows versions that don't support nested jobs (versions
  prior to Windows 8 / Server 2012).

* Change the `uv__init_global_job_handle` function signature to match
  what `uv_once` expects.

* Add a bunch of comments that clarify how we're using job control,
  and how we're dealing with job control that might be established by
  our parent process.
2013-05-16 21:29:40 +02:00
Bert Belder
adc79ba282 Now working on v0.11.4 2013-05-14 17:11:05 -07:00
Bert Belder
0a48c05b59 2013.05.16, Version 0.11.3 (Unstable)
Changes since version 0.11.2:

* unix: clean up uv_accept() (Ben Noordhuis)

* unix: remove errno preserving code (Ben Noordhuis)

* darwin: fix ios build, don't require ApplicationServices (Ben
  Noordhuis)

* windows: kill child processes when the parent dies (Bert Belder)

* build: set soname in shared library (Ben Noordhuis)

* build: make `make test` link against .a again (Ben Noordhuis)

* build: only set soname on shared object builds (Timothy J. Fontaine)

* build: convert predefined $PLATFORM to lower case (Elliot Saba)

* test: fix process_title failing on linux (Miroslav Bajtoš)

* test, sunos: disable process_title test (Miroslav Bajtoš)

* test: add error logging to tty unit test (Miroslav Bajtoš)
2013-05-14 17:11:03 -07:00
Bert Belder
961202d1c2 Merge branch 'v0.10'
Conflicts:
	ChangeLog
	config-unix.mk
	src/version.c
2013-05-14 17:03:24 -07:00
Bert Belder
13496e9c1a Now working on v0.10.8 2013-05-14 16:50:22 -07:00
Bert Belder
028baaf084 2013.05.15, Version 0.10.7 (Stable)
Changes since version 0.10.6:

* windows: kill child processes when the parent dies (Bert Belder)
2013-05-14 16:50:19 -07:00
Bert Belder
415f4d3e4c windows: kill child processes when the parent dies
This makes Windows behave just like Unix. This does not affect
processes that are spawned with the UV_PROCESS_DETACHED flag set.
2013-05-14 16:48:03 -07:00
isaacs
1fd10deec4 Now working on v0.10.7 2013-05-14 14:40:01 -07:00
isaacs
11e6613e62 2013.05.15, Version 0.10.6 (Stable)
Changes since version 0.10.5:

* stream: fix osx select hack (Fedor Indutny)

* stream: fix small nit in select hack, add test (Fedor Indutny)

* build: link with libkvm on openbsd (Ben Noordhuis)

* stream: use harder sync restrictions for osx-hack (Fedor Indutny)

* unix: fix EMFILE error handling (Ben Noordhuis)

* darwin: fix unnecessary include headers (Daisuke Murase)

* darwin: rename darwin-getproctitle.m (Ben Noordhuis)

* build: convert predefined $PLATFORM to lower case (Elliot Saba)

* build: set soname in shared library (Ben Noordhuis)

* build: make `make test` link against .a again (Ben Noordhuis)

* darwin: fix ios build, don't require ApplicationServices (Ben
  Noordhuis)

* build: only set soname on shared object builds (Timothy J. Fontaine)
2013-05-14 14:39:58 -07:00
Ben Noordhuis
f22163c233 darwin: fix ios build, don't require ApplicationServices 2013-05-13 20:16:20 +02:00
Ben Noordhuis
7d9c5572b8 Merge remote-tracking branch 'origin/v0.10' 2013-05-12 14:53:19 +02:00
Ben Noordhuis
3eb6eb35cc build: set soname in shared library 2013-05-12 14:50:58 +02:00
Ben Noordhuis
5879c61394 unix: remove errno preserving code
Remove the errno preserving code. Libuv only implemented it in a
haphazard way and there seems to be a general consensus that no one
really cares anyway. Therefore, remove it.
2013-05-12 11:03:19 +02:00
Ben Noordhuis
7d7fe6a9bc unix: clean up uv_accept() 2013-05-12 11:03:02 +02:00
isaacs
ab157df5ee Now working on v0.11.3 2013-05-10 15:19:35 -07:00
isaacs
3fba0bf65f 2013.05.11, Version 0.11.2 (Unstable)
Changes since version 0.11.1:

* darwin: look up file path with F_GETPATH (Ben Noordhuis)

* unix, windows: add uv_has_ref() function (Saúl Ibarra Corretgé)

* build: avoid double / in paths for dtrace (Timothy J. Fontaine)

* unix: remove src/unix/cygwin.c (Ben Noordhuis)

* windows: deal with the fact that GetTickCount might lag (Bert Belder)

* unix: silence STATIC_ASSERT compiler warnings (Ben Noordhuis)

* linux: don't use fopen() in uv_resident_set_memory() (Ben Noordhuis)
2013-05-10 15:19:32 -07:00
Ben Noordhuis
ce580cc057 Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	ChangeLog
2013-05-08 15:46:54 -07:00
Ben Noordhuis
4a8ec0c622 sunos: handle disabled watcher after callback
Fix a potential use-after-free bug where the uv__io watcher struct is
referenced after being disabled by its callback function. The stress
is on 'potential' because in practice the watcher's memory is not
released until the next tick of the event loop.
2013-05-07 14:49:58 -07:00
Ben Noordhuis
9b801d551b darwin: rename darwin-getproctitle.m
Rename it to darwin-getproctitle.c, it doesn't need an Objective-C
compiler. Fix up -Wpedantic warnings about void to function pointer
casts and include <ApplicationServices/ApplicationServices.h> to get
the GetCurrentProcess() function prototype.
2013-05-02 14:10:12 +02:00
Daisuke Murase
4b0fac8990 darwin: fix unnecessary include headers
This file doesn't use any Cocoa functions, CoreFoundation.h is enough here.
This line causes compilation error on iOS environment.
2013-05-02 13:55:40 +02:00
Ben Noordhuis
ebdeaed2e3 Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	ChangeLog
	src/version.c
2013-05-02 09:22:39 +02:00
Ben Noordhuis
b3ab332b34 unix: fix EMFILE error handling
On Linux, the accept() and accept4() system calls checks for EMFILE
before checking for EAGAIN. Refine our EMFILE error handling tactic
to deal with that. Here is what used to happen:

 1. The event loop calls accept() and sees EMFILE.

 2. Libuv switches to EMFILE error handling mode. It closes a stashed
    file descriptor and calls accept() again.

 3. The accept() system call fails with EAGAIN.

 4. Libuv reopens the stashed file descriptor (reaching RLIMIT_NOFILE
    again) and returns control to the regular event loop.

 5. The regular event loop calls accept(), sees EMFILE and jumps to
    step 2 again. Effectively an infinite loop.

Avoid that by not calling accept() again when we've seen EAGAIN.

Fixes joyent/node#5389.
2013-05-01 19:37:45 +02:00
Fedor Indutny
67f9b91a8b stream: use harder sync restrictions for osx-hack
Synchronize harder to avoid excessive spins, invokations of async
callback and sporadic assertion failures on double-call of async
callback.
2013-04-30 14:07:30 +04:00
Fedor Indutny
ac4e7e7ff2 stream: fix small nit in select hack, add test 2013-04-27 18:50:55 +02:00
Fedor Indutny
2400716d87 stream: fix osx select hack
After latest twiddling, `stream->io_watcher.fd` doesn't contain a real
stream's file descriptior anymore. The one from `select_state` should be
used instead.

Zero-initialize `select_state->event` field.
2013-04-24 13:21:58 +02:00
isaacs
a0cb926e2e Now working on v0.10.6 2013-04-22 17:37:25 -07:00
isaacs
6595a7732c 2013.04.24, Version 0.10.5 (Stable)
Changes since version 0.10.4:

* unix: silence STATIC_ASSERT compiler warnings (Ben Noordhuis)

* windows: make timers handle large timeouts (Miroslav Bajtoš)

* windows: remove superfluous assert statement (Bert Belder)

* unix: silence STATIC_ASSERT compiler warnings (Ben Noordhuis)

* linux: don't use fopen() in uv_resident_set_memory() (Ben Noordhuis)
2013-04-22 17:37:22 -07:00
Ben Noordhuis
cd10637d0b linux: don't use fopen() in uv_resident_set_memory()
RSS is a reflection of the number of pages that a process has mapped.
glibc implements fopen() in terms of mmap() which means that trying
to read the number of mapped pages changes it. Switch to open().
2013-04-22 08:26:53 +02:00
Ben Noordhuis
105e4dcb23 unix: silence STATIC_ASSERT compiler warnings
Fix the following two warnings:

  src/unix/core.c:74:1: warning: ISO C90 forbids array
  'static_assert_failed' whose size can't be evaluated [-Wvla]
  src/unix/core.c:76:1: warning: ISO C90 forbids array
  'static_assert_failed' whose size can't be evaluated [-Wvla]
2013-04-22 07:48:09 +02:00
Bert Belder
ffe2ef06eb windows: deal with the fact that GetTickCount might lag
We use GetQueuedCompletionStatus(Ex) to sleep the thread until the next
timer expires (provided that no other events happen before that).
However after waking up from a sleep the GetTickCount() return value may
not immediately reflect that some time has passed. This happens because
gqcs can sometimes sleep for periods shorter than the GetTickCount clock
resulution. This patch changes time tracking so the amount of time
waited by gqcs is taken into account.

This has the following advantages:

* Excessive loop iterations are avoided.
* Small timeouts are fired more precisely.
* The `loop-stop` test that used to be flaky on Windows now passes
  consistently.
2013-04-18 23:39:16 +02:00
Ben Noordhuis
7f8130a21b unix: remove src/unix/cygwin.c
The cygwin build has been broken for a long time now and no one is
complaining, which strongly suggests that no one actually uses it.
Remove it.
2013-04-18 21:53:33 +02:00
Bert Belder
79f96298c1 Merge branch 'v0.10' 2013-04-18 02:58:44 +02:00
Bert Belder
a3963883b8 windows: remove superfluous assert statement 2013-04-18 02:56:07 +02:00
Saúl Ibarra Corretgé
a92b66fe33 unix, windows: add uv_has_ref() function 2013-04-17 15:31:08 +02:00
Miroslav Bajtoš
09ff5100e3 windows: make timers handle large timeouts
Fixes a bug where timers with very large timeouts run on the next tick.
Based on a similar bug fix for unix (9b61939).

Fixes joyent/node#5101.
2013-04-16 16:30:33 +02:00
Ben Noordhuis
ef85bdaffb unix: silence STATIC_ASSERT compiler warnings
Newer versions of gcc complain about the definition of the zero element
array. Squelch that warning by turning it into a one element array.
2013-04-12 19:40:57 +02:00
Bert Belder
aa23eea5cf Merge branch 'v0.10' 2013-04-12 13:20:30 +02:00
isaacs
5ed1d02cc0 Now working on v0.10.5 2013-04-11 09:00:10 -07:00
isaacs
85827e2640 2013.04.12, Version 0.10.4 (Stable)
Changes since version 0.10.3:

* include: update uv_backend_fd() documentation (Ben Noordhuis)

* unix: include uv.h in src/version.c (Ben Noordhuis)

* unix: don't write more than IOV_MAX iovecs (Fedor Indutny)

* mingw-w64: don't call _set_invalid_parameter_handler (Nils Maier)

* build: gyp disable thin archives (Timothy J. Fontaine)

* sunos: re-export entire library when static (Timothy J. Fontaine)

* unix: dtrace probes for tick-start and tick-stop (Timothy J. Fontaine)

* windows: fix memory leak in fs__sendfile (Shannen Saez)

* windows: remove double initialization in uv_tty_init (Shannen Saez)

* build: fix dtrace-enabled out of tree build (Ben Noordhuis)

* build: squelch -Wdollar-in-identifier-extension warnings (Ben
  Noordhuis)

* inet: snprintf returns int, not size_t (Brian White)

* win: refactor uv_cpu_info (Bert Belder)

* build: add support for Visual Studio 2012 (Nicholas Vavilov)

* build: -Wno-dollar-in-identifier-extension is clang only (Ben
  Noordhuis)
2013-04-11 09:00:06 -07:00
Ben Noordhuis
145f7b3560 darwin: look up file path with F_GETPATH
Look up the file path with fcntl(F_GETPATH) and pass it to
the uv_fs_event_cb callback.
2013-04-10 19:45:43 +02:00
Bert Belder
fcac38abe4 Now working on v0.11.2 2013-04-10 19:43:10 +02:00
Bert Belder
5c10e82ae0 2013.04.11, Version 0.11.1 (Unstable)
This is the first versioned release from the current unstable libuv
branch.

Changes since Node.js v0.11.0:

* all platforms: nanosecond resolution support for uv_fs_[fl]stat
  (Timothy J. Fontaine)

* all platforms: add netmask to uv_interface_address (Ben Kelly)

* unix: make sure the `status` parameter passed to the `uv_getaddrinfo`
  is 0 or -1 (Ben Noordhuis)

* unix: limit the number of iovecs written in a single `writev` syscall
  to IOV_MAX (Fedor Indutny)

* unix: add dtrace probes for tick-start and tick-stop (Timothy J.
  Fontaine)

* mingw-w64: don't call _set_invalid_parameter_handler (Nils Maier)

* windows: fix memory leak in fs__sendfile (Shannen Saez)

* windows: fix edge case bugs in uv_cpu_info (Bert Belder)

* include: no longer ship with / include ngx-queue.h (Ben Noordhuis)

* include: remove UV_VERSION_* macros from uv.h (Ben Noordhuis)

* documentation updates (Kristian Evensen, Ben Kelly, Ben Noordhuis)

* build: fix dtrace-enabled builds (Ben Noordhuis, Timothy J. Fontaine)

* build: gyp disable thin archives (Timothy J. Fontaine)

* build: add support for Visual Studio 2012 (Nicholas Vavilov)
2013-04-10 19:43:07 +02:00
mscdex
633d33a92a cygwin: remove unused variable 2013-04-10 18:30:37 +02:00
Bert Belder
db1a8b85d2 Merge branch 'v0.10' 2013-04-10 17:53:10 +02:00
Bert Belder
1d5c61a8b3 windows: simplify netmask detection in uv_interface_addresses 2013-04-10 17:33:37 +02:00
Bert Belder
a9bce29f0c win: refactor uv_cpu_info
Fixes a couple of error handling issues:

* Don't free an uninitialized pointer when allocating memory for
  `cpu_infos` fails.
* Don't return a bogus error value when NtQuerySystemInformation fails.
  That function returns an NTSTATUS code instead of setting the last
  error.
* Don't clobber out parameters when an error happens.
2013-04-10 16:04:15 +02:00
Brian White
9021dbcd8d inet: snprintf returns int, not size_t 2013-04-10 15:50:39 +02:00
Brian White
4d4f1496d9 windows, unix: remove dead code 2013-04-10 15:50:39 +02:00
Ben Noordhuis
8041c52fcd unix: style fixups 2013-04-10 14:59:02 +02:00
Ben Kelly
14aa6153be unix, win: add netmask to uv_interface_address
Include the netmask when returning information about the OS network
interfaces.

This commit provides implementations for windows and those unix
platforms using getifaddrs().

AIX was not implemented because it requires the use of ioctls and I do
not have an AIX development/test environment.  The windows code was
developed using mingw on winxp as I do not have access to visual studio.

Tested on darwin (ipv4/ipv6) and winxp (ipv4 only).  Needs testing on
newer windows using ipv6 and other unix platforms.
2013-04-10 14:48:23 +02:00
Ben Noordhuis
f78bcfbd6a Merge remote-tracking branch 'origin/v0.10' 2013-04-10 14:24:18 +02:00