Permalink
Commits on Mar 1, 2013
  1. darwin: fix spurious uv_write2() segfault

    We abuse uv_write2() to send over UDP handles to child processes.
    Don't call uv__stream_fd() on those handles, it's a macro that on OS X
    evaluates to a function that operates on a uv_stream_t with a couple of
    OS X specific fields. On other Unices it does (handle)->io_watcher.fd,
    which works but only by accident.
    
    Fixes nodejs/node-v0.x-archive#4870.
    bnoordhuis committed Mar 1, 2013
Commits on Feb 28, 2013
Commits on Feb 27, 2013
  1. test: fix tap output check

    Only report as an error when status != 0.
    
    Stops the platform_output test from being reported as having failed
    on Jenkins.
    bnoordhuis committed Feb 27, 2013
  2. darwin: fix read from uninitialized struct kevent

    In the OS X fallback code, don't read from the struct when the kevent()
    syscall times out.
    bnoordhuis committed Feb 27, 2013
  3. test: remove 'is root?' check

    I debug tests regularly as root (because dtrace and dtruss require the
    additional privileges). The 'is root?' check gets in the way more often
    than it prevents me from doing something silly. Remove it.
    bnoordhuis committed Feb 24, 2013
Commits on Feb 26, 2013
  1. linux, darwin: don't touch environ in uv_setup_args

    Don't overwrite the environment. On OS X, the entries in the environ
    table are not necessarily adjacent. It's arguably also safer for setuid
    binaries.
    
    Fixes nodejs/node-v0.x-archive#4847.
    bnoordhuis committed Feb 26, 2013
  2. windows: initialize stop_flag explicitly

    The default loop lives in the bss section so it's zeroed on startup
    but loops created with uv_loop_new() live on the heap and contain
    random garbage. Initialize the stop_flag explicitly to avoid spurious
    bugs.
    saghul committed with bnoordhuis Feb 26, 2013
Commits on Feb 25, 2013
  1. windows: fix uv_stop in ONCE and NOWAIT modes

    Same as the fix in 492efb9 but this time for uv-win.
    saghul committed with bnoordhuis Feb 25, 2013
  2. unix: make uv_stop work when embedded

    * Make uv_stop() work when libuv is embedded in another event loop.
    
    * Fix a small bug where loop->stop_flag was not reset when mode ==
      UV_RUN_ONCE or UV_RUN_NOWAIT. The next call to uv_run() would return
      immediately without doing any work.
    bnoordhuis committed Feb 25, 2013
  3. unix: set errno in sendfile emulation

    The sendfile emulation in src/unix/fs.c polls the file descriptor for
    write readiness. If POLLERR or POLLHUP is set, it bails out but doesn't
    set errno (hence it doesn't report a useful error code). Rectify that.
    
    Fixes #620.
    bnoordhuis committed Feb 25, 2013
  4. linux: use eventfds for async handles

    Use eventfds to drive async handles, fall back to regular pipes on older
    kernels (pre-2.6.22).
    
    Gives a nice boost on the async handle benchmarks. Before:
    
      12,516,113 async events in 5.0 seconds (2,503,222/s, 1,048,576 unique
      async1: 11.95 sec (83,701/sec)
      async2: 11.65 sec (85,862/sec)
      async4: 5.20 sec (192,154/sec)
      async8: 9.97 sec (100,315/sec)
      async_pummel_1: 1,000,000 callbacks in 2.56 seconds (389,919/sec)
      async_pummel_2: 1,000,000 callbacks in 2.65 seconds (377,205/sec)
      async_pummel_4: 1,000,000 callbacks in 2.18 seconds (457,704/sec)
      async_pummel_8: 1,000,000 callbacks in 4.19 seconds (238,632/sec)
    
    After:
    
      16,168,081 async events in 5.0 seconds (3,233,616/s, 1,048,576 unique
      async1: 11.08 sec (90,213/sec)
      async2: 10.17 sec (98,297/sec)
      async4: 4.81 sec (207,789/sec)
      async8: 8.98 sec (111,419/sec)
      async_pummel_1: 1,000,000 callbacks in 1.16 seconds (863,296/sec)
      async_pummel_2: 1,000,000 callbacks in 1.45 seconds (691,459/sec)
      async_pummel_4: 1,000,000 callbacks in 0.66 seconds (1,514,770/sec)
      async_pummel_8: 1,000,000 callbacks in 1.42 seconds (704,549/sec)
    
    That's a speedup from anywhere between 10% to 330%.
    bnoordhuis committed Feb 25, 2013
  5. unix: abstract away async pipe infrastructure

    This commit lays the groundwork for the switch to eventfds on Linux.
    bnoordhuis committed Feb 25, 2013
Commits on Feb 24, 2013
  1. darwin: implement uv_set_process_title, part 2

    Make changes to the process title visible to tools like `ps`.
    
    The argv clobber technique is reasonably portable across Unices;
    the common code has been moved into src/unix/proctitle.c and is used
    on Linux and OS X. Other platforms will probably follow in the future.
    bnoordhuis committed Feb 24, 2013
  2. darwin: implement uv_set_process_title, part 1

    Apply undocumented Carbon magic to change the process title in a way
    that's visible in the Activity Monitor.
    bnoordhuis committed Feb 24, 2013
  3. build: support 64 bits darwin builds

    Before this commit, gyp built 32 bits versions of libuv exclusively.
    
    Enable with:
    
      $ ./gyp_uv -Dtarget_arch=x64
    bnoordhuis committed Feb 24, 2013
Commits on Feb 22, 2013
  1. test: add tap output

    Given UV_TAP_OUTPUT being set, test result output should use TAP formatting
    tjfontaine committed with bnoordhuis Feb 21, 2013
  2. unix: short-circuit on no-op io watcher changes

    Don't add the io watcher to the watcher queue if the requested change
    is effectively a no-op, that is, when the event mask doesn't change.
    
    The exception here is sunos because the event ports backend requires
    that watched file descriptors are re-added on every turn of the event
    loop.
    
    This commit is a micro-optimization, it does not change the event
    loop's observable behavior in any way.
    bnoordhuis committed Feb 22, 2013
  3. unix: auto-unref spawn handle on process exit

    Consistent, for better or worse, with uv-win.
    
    Fixes #718.
    bnoordhuis committed Feb 22, 2013
Commits on Feb 21, 2013
  1. unix: handle EINPROGRESS for unix sockets

    Before this commit, it was assumed that connect() on UNIX sockets never
    returns EINPROGRESS. It turned out to be a bad assumption: Dave Pacheco
    reports sporadic hangups on SmartOS because of that.
    
    It's not clear to me _why_ the Illumos kernel returns that error but
    that's inconsequential: whatever the cause, libuv needs to handle it
    and now it does.
    
    Fixes nodejs/node-v0.x-archive#4785.
    bnoordhuis committed Feb 21, 2013
  2. unix: use uv__set_artificial_error in uv_write2

    * Use uv__set_artificial_error(), slightly more efficient than
      uv__set_sys_error().
    
    * Return UV_EINVAL instead of UV_EOPNOTSUPP.
    
    * Fix up style.
    bnoordhuis committed Feb 21, 2013
  3. unix: fail early on bad send_handle in uv_write2

    Return UV_EBADF if send_handle doesn't have a valid fd.
    saghul committed with bnoordhuis Feb 21, 2013
Commits on Feb 20, 2013
  1. linux: fix abort() on epoll_ctl() race condition

    Don't check the return value of epoll_ctl(EPOLL_CTL_DEL). When the
    file descriptor is closed, we're potentially racing with another
    thread and that means the errno is not a reliable indicator of
    the actual error.
    
    The other event mechanisms (kqueue, event ports) are not affected
    because:
    
    * kqueue returns either EBADF or ENOENT. Both are handled by libuv.
    * event ports rearms all file descriptors on each call to port_getn().
    
    Fixes nodejs/node-v0.x-archive#4558.
    bnoordhuis committed Feb 20, 2013
  2. build: fix shared-after-static build

    Executing `make libuv.so` after `make libuv.a` failed because the
    libuv.a target compiled the files in src/ without -fPIC.
    
    Make the libuv.so target depend on files with a different suffix to
    keep them separated.
    bnoordhuis committed Feb 20, 2013