Commit Graph

3735 Commits

Author SHA1 Message Date
Tony Kelman
7b9bc28e85 win: map ERROR_BAD_PATHNAME to UV_ENOENT
e.g. when trying to call uv_fs_stat on "Z:\\:\\a" for a network drive Z:

Refs: https://github.com/joyent/libuv/issues/390
PR-URL: https://github.com/libuv/libuv/pull/623
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-20 09:38:06 +01:00
Saúl Ibarra Corretgé
5f15f72cca test: fix -Wtautological-pointer-compare warnings
~~~~
test/test-get-loadavg.c:30:14: warning: comparison of array 'avg' not
equal to a null pointer is always true [-Wtautological-pointer-compare]

test/test-getnameinfo.c:76:18: warning: comparison of array 'req.host'
not equal to a null pointer is always true
[-Wtautological-pointer-compare]

test/test-getnameinfo.c:77:18: warning: comparison of array
'req.service' not equal to a null pointer is always true
[-Wtautological-pointer-compare]
~~~~

PR-URL: https://github.com/libuv/libuv/pull/622
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-11-18 22:37:16 +01:00
Ben Noordhuis
9bbc1137ee unix: don't retry dup2/dup3 on EINTR
Like the previous commit, but this time for UNIX platforms other than
Linux.

As far as I have been able to establish, dup2 and dup3 never return
EINTR on OS X and FreeBSD.  Even if other platforms do return EINTR,
it's probably still better not to retry because it's unspecified
whether the file descriptor has been closed.

Fixes: https://github.com/libuv/libuv/issues/462
PR-URL: https://github.com/libuv/libuv/pull/608
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-17 10:48:00 +01:00
Ben Noordhuis
af7a3614d0 linux: don't retry dup2/dup3 on EINTR
Retrying seems like a bad idea in a multi-threaded program because the
man page leaves it unspecified whether the file descriptor is closed
after EINTR.

It's probably an academic issue because as far as I have been able to
establish by checking the kernel sources, dup2 and dup3 never actually
return EINTR.  For dup3, this appears to have been the case since its
introduction in v2.6.27; for dup2, it goes back to at least v2.6.18.

Fixes: https://github.com/libuv/libuv/issues/462
PR-URL: https://github.com/libuv/libuv/pull/608
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-17 10:47:31 +01:00
Santiago Gimeno
4052c74797 test,freebsd: skip udp_dual_stack if not supported
By default, FreeBSD has net.inet6.ip6.v6only set to 1 (i.e., no dual stack
support). A new function can_ipv6_ipv4_dual is added to check its value and
decide whether `udp_dual_stack` test must be skipped or not.

PR-URL: https://github.com/libuv/libuv/pull/614
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-17 09:31:26 +01:00
Ian Kronquist
81072b98f5 misc: remove unnecessary null pointer checks
Fixes: https://github.com/libuv/libuv/issues/595
PR-URL: https://github.com/libuv/libuv/pull/604
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-17 09:18:55 +01:00
Saúl Ibarra Corretgé
f41b7386de include: add stdio.h to uv.h
Fixes a compilation problem in some platforms (notably OSX) after
6490c50.

PR-URL: https://github.com/libuv/libuv/pull/618
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Jeremy Whitlock <jwhitlock@apache.org>
2015-11-17 09:14:01 +01:00
Petka Antonov
6490c508a9 misc: expose handle print APIs
PR-URL: https://github.com/libuv/libuv/pull/291
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-16 09:34:34 +01:00
Imran Iqbal
baf700acdb test: skip process_title for AIX
uv_(get|set)_process_title is not implemented for AIX. See unix/aix.c

PR-URL: https://github.com/libuv/libuv/pull/616
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-11-11 22:37:33 +01:00
Nikolai Vavilov
77eda8d90b win: properly return UV_EBADF when _close() fails
Previously, libuv didn't return the correct error code when attempting
to close an invalid file descriptor with `uv_fs_close()`.

PR-URL: https://github.com/libuv/libuv/pull/613
Reviewed-by: Bert Belder <bertbelder@gmail.com>
2015-11-11 22:33:21 +01:00
Louis DeJardin
dfdecf0006 pipe: enable inprocess uv_write2 on Windows
When duplicating the socket handle being sent the target process
id is defaulted to the current process id. This enables uv_write2
to be used for thread-clustering in addition to process-clustering on
multi-threaded programming languages.

The ipc tests are updated to run in two modes. In the _inproc mode
the echo work is done on a second thread instead of in a second
process.

An internal function int uv_current_pid() is added to the windows
specific code which caches the value of GetCurrentProcessId(). This
means uv_write2 does not call GetCurrentProcessId() every inprocess
send.

Refs: https://github.com/joyent/libuv/issues/926
PR-URL: https://github.com/libuv/libuv/pull/540
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-06 09:33:15 +01:00
Ben Noordhuis
a6da5d7d65 darwin: abort() if (un)locking fs mutex fails
The pthread_mutex_lock() and pthread_mutex_unlock() calls logically
cannot fail in uv__fs_write() but let's check the return value anyway:
cosmic rays and memory corruption do happen.

PR-URL: https://github.com/libuv/libuv/pull/603
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-05 13:28:13 +01:00
Angel Leon
f3216246a2 doc: fix typo in README
PR-URL: https://github.com/libuv/libuv/pull/598
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-04 21:55:28 +01:00
Miodrag Milanovic
010f0b96a3 win: fix comment
Fixes the following:
~~~~
src/win/tty.c: In function
'uv_tty_capture_initial_style':
src/win/tty.c:211:3: error: "/" within
comment [-Werror=comment]
/ Assumption: Caller has acquired uv_tty_output_lock. */
~~~~

PR-URL: https://github.com/libuv/libuv/pull/578
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-11-04 10:17:46 +01:00
Andrius Bentkus
e9b5a86aa6 docs: clarify documentation of uv_tcp_init_ex
I think this makes it clear that the flags can't contain any other
information.

PR-URL: https://github.com/libuv/libuv/pull/592
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-29 01:27:04 +01:00
Wink Saville
7d7400c87f test: use FQDN in getaddrinfo_fail test
For the getaddrinfo_fail test cases you want to use a fully qualified
domain name so that in network configurations that have a search domain
the test will still fail.

To create a fully qualified domain add a period at the end, see
http://www.dns-sd.org/trailingdotsindomainnames.html for an explanation.

Fixes: https://github.com/libuv/libuv/issues/583
PR-URL: https://github.com/libuv/libuv/pull/586
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-23 18:28:51 +02:00
Nathan Corvino
bda29cf808 unix: skip prohibited syscalls on tvOS and watchOS
fork and the exec functions are marked prohibited on tvOS and watchOS,
so referencing them causes compile errors.

This adds preprocessor conditionals to avoid calling them for those
targets.

PR-URL: https://github.com/libuv/libuv/pull/580
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-21 00:40:33 +02:00
Santiago Gimeno
a0e30b551c test: fix fs_event_watch_file_currentdir flakiness
In FreeBSD 10.2 the test sometimes times out because the "touch file"
timer fires before the "watch file" event has been registered in the
kqueue. Increasing the timeout value seems to fix the issue.

PR-URL: https://github.com/libuv/libuv/pull/581
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-21 00:19:18 +02:00
Adam Stylinski
ef47e8b212 unix: make work with Solaris Studio.
The atomics that are in place of a lack of x86 cmpxchg are a GCC
specific intrinsic.  When compiling for Solaris on a SPARC platform
with a non-gcc compiler, this prevents a successful build.  This commit
will rely on a Solaris Studio specific preprocessor macro to redefine
the GCC intrinsic name to be the Solaris Studio one instead.

PR-URL: https://github.com/libuv/libuv/pull/569
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-13 18:07:28 +02:00
HungMingWu
9fbcca0481 unix: fix uv__getiovmax return value
On some embedded devices (arm-linux-uclibc based ip camera),
sysconf(_SC_IOV_MAX) can not get the correct value. The return
value is -1 and the errno is EINPROGRESS. Degrade the value to 1.

PR-URL: https://github.com/libuv/libuv/pull/573
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-13 17:49:41 +02:00
Ben Noordhuis
bf52579f92 unix: only undo fs req registration in async mode
Commit 0199955 ("fs: undo uv__req_init when uv__malloc failed")
mistakingly unregisters the requests unconditionally in a few places,
resulting in memory corruption when it hasn't been registered first.

Fixes: https://github.com/libuv/libuv/pull/543
PR-URL: https://github.com/libuv/libuv/pull/567
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-10-09 21:35:13 +02:00
Ben Noordhuis
822969ad2f test: don't abort on setrlimit() failure
Valgrind blocks the setrlimit() system call.  Print a warning and skip
the test, don't consider it a fatal error.

PR-URL: https://github.com/libuv/libuv/pull/565
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-10-08 21:47:48 +02:00
Ben Noordhuis
1457496452 unix: squelch harmless valgrind warning
Valgrind complains that the msg_control pointer points to uninitialized
memory.  While the memory is only used for writing data to, not for
reading data from, and the warning is therefore bogus, it's still
annoying enough that I decided to squelch it by zeroing the memory.

The performance implications should be minimal because this code path
is only used when sending over a handle to another process.

The warning:

    ==14859== Syscall param sendmsg(msg.msg_control) points to
    uninitialised byte(s)
      ==14859==    at 0x5AF1A80: __sendmsg_nocancel (in
          /usr/lib64/libpthread-2.21.so)
      ==14859==    by 0x46350E: uv__write (stream.c:810)
      ==14859==    by 0x464B24: uv_write2 (stream.c:1398)
      ==14859==    by 0x421ACE: run_test (test-ipc-send-recv.c:104)
      ==14859==    by 0x421DD1: run_test_ipc_send_recv_tcp
      (test-ipc-send-recv.c:156)
      ==14859==    by 0x406D2F: run_test_part (runner.c:404)
      ==14859==    by 0x4058CD: main (run-tests.c:58)
      ==14859==  Address 0xffefff934 is on thread 1's stack
      ==14859==  in frame #1, created by uv__write (stream.c:742)

PR-URL: https://github.com/libuv/libuv/pull/565
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-10-08 21:47:45 +02:00
Ben Noordhuis
442b8a5a84 unix: use QUEUE_MOVE when iterating over lists
Replace uses of QUEUE_FOREACH when the list can get modified while
iterating over it, in particular when a callback is made into the
user's code.  This should fix a number of spurious failures that
people have been reporting.

PR-URL: https://github.com/libuv/libuv/pull/565
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-10-08 21:47:43 +02:00
Ben Noordhuis
1867a6c1ce src: replace QUEUE_SPLIT with QUEUE_MOVE
All uses of QUEUE_SPLIT in libuv split the list at the head so introduce
a QUEUE_MOVE macro that automates that.

PR-URL: https://github.com/libuv/libuv/pull/565
Reviewed-By: Fedor Indutny <fedor.indutny@gmail.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-10-08 21:46:48 +02:00
Jianghua Yang
26917ddf7a unix: fix request handle leak in uv__udp_send
PR-URL: https://github.com/libuv/libuv/pull/561
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-07 15:12:26 +02:00
Fedor Indutny
5e761a5f81 stream: support empty uv_try_write on unix
PR-URL: https://github.com/libuv/libuv/pull/558
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-10-04 18:06:08 -04:00
Ryan Johnston
764877fd9e win: fix compilation with VS < 2012
PR-URL: https://github.com/libuv/libuv/pull/554
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-10-01 00:41:41 +02:00
Saúl Ibarra Corretgé
037a8ab29f win, test: fix compilation warning
uv_os_fd_t is HANDLE on Windows, but closesocket needs a SOCKET.

PR-URL: https://github.com/libuv/libuv/pull/534
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-09-29 09:57:27 +02:00
Peter Jas
a59085e140 win: use the MSVC provided snprintf where possible
PR-URL: https://github.com/libuv/libuv/pull/532
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-29 09:01:33 +02:00
Jianghua Yang
e5c03aed6b include: remove duplicate extern declaration
PR-URL: https://github.com/libuv/libuv/pull/547
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-24 23:19:31 +02:00
Saúl Ibarra Corretgé
2a98e76b45 build: remove unused 'component' GYP option
PR-URL: https://github.com/libuv/libuv/pull/548
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-09-24 23:17:23 +02:00
Jianghua Yang
01999559cf fs: undo uv__req_init when uv__malloc failed
PR-URL: https://github.com/libuv/libuv/pull/543
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-24 09:48:43 +02:00
Gireesh Punathil
25506bb331 unix: make uv_guess_handle work properly for AIX
On AIX, the getsockname API does not operate on the UNIX domain sockets
Please see: https://www-01.ibm.com/support/knowledgecenter/ssw_aix_61/
com.ibm.aix.commtrf2/getsockname.htm

This means that the internal helper routine uv_guess_handle in tty.c
fails in AIX, for common use cases.

There is no direct API support which helps identifying a UNIX domain
socket in AIX. getpeername() retrieves the information pertinent to
connected UNIX domain socket pairs, and using getpeername where
getsockname fails was a good workaround. However, there are edge cases
where one end of a socketpair comes for introspection while the other
end has been closed, which causes getpeername to fail.

A better solution is derived based on these facts:

1.getsockname() on a broken / un-broken socketpair does not actually
fail with -1, instead it returns 0. However, the API does not modify
the socketaddr structure passed to it, with the socket information.

2.This behavior of getsockname is observed only for UNIX domain socket,
among all possible types of sockets which I tested - ~30 of them.

So a practical and stable workaround for AIX is to return
UV_UNKNOWN_HANDLE if getsockname fails.  If it passes and the length
of the structure returned is 0 then we know that the type is AF_UNIX
and return UV_NAMED_PIPE , otherwise we inspect in the same way as for
other platforms to derive the type.

PR-URL: https://github.com/libuv/libuv/pull/539
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-23 16:09:07 +02:00
Jianghua Yang
25c369d4cf unix: fix memory leak in uv_interface_addresses
PR-URL: https://github.com/libuv/libuv/pull/537
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-23 08:16:20 +02:00
Saúl Ibarra Corretgé
455c4035d4 Now working on version 1.7.6 2015-09-22 22:27:51 +02:00
Saúl Ibarra Corretgé
7a1996ae90 Add SHA to ChangeLog 2015-09-22 22:12:18 +02:00
Saúl Ibarra Corretgé
a8c1136de2 2015.09.23, Version 1.7.5 (Stable)
Changes since version 1.7.4:

* unix: Support atomic compare & swap xlC on AIX (nmushell)

* unix: Fix including uv-aix.h on AIX (nmushell)

* unix: consolidate rwlock tryrdlock trywrlock errors (Saúl Ibarra
  Corretgé)

* unix, win: consolidate mutex trylock errors (Saúl Ibarra Corretgé)

* darwin: fix memory leak in uv_cpu_info (Jianghua Yang)

* test: add tests for the uv_rwlock implementation (Bert Belder)

* win: redo/fix the uv_rwlock APIs (Bert Belder)

* win: don't fetch function pointers to SRWLock APIs (Bert Belder)
2015-09-22 22:12:07 +02:00
Bert Belder
98239224c3 win: don't fetch function pointers to SRWLock APIs
They're no longer needed, since the Windows-native SRWLock functions are
no longer used.

PR-URL: https://github.com/libuv/libuv/pull/525
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-22 11:18:23 -04:00
Bert Belder
9a4fd2689d win: redo/fix the uv_rwlock APIs
Previously, on Windows Vista and later, we'd use the Windows native
SRWLock APIs. However they turned out to be semantically incompatible
with pthread read-write locks and/or plain buggy. This patch makes sure
that the custom implementation that was previously only used on old
Windows versions is now used everywhere.

This patch fixes a number of issues with the old fallback
implementation. Specifically:

* The reader count would not be incremented when a thread successfully
  acquired a read lock while another thread *also* held a read lock.

* `uv_rwlock_tryrdlock()` and `uv_rwlock_trywrlock()` now
  consistently return UV_EBUSY when a lock couldn't be acquired.

* Any unexpected errors now cause libuv to abort, with the exception of
  `uv_rwlock_init()`.

See also https://github.com/libuv/libuv/issues/515.

PR-URL: https://github.com/libuv/libuv/pull/525
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-22 11:18:13 -04:00
Bert Belder
1ad6ad7ada test: add tests for the uv_rwlock implementation
PR-URL: https://github.com/libuv/libuv/pull/525
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-22 11:17:49 -04:00
Jianghua Yang
9c307cc630 darwin: fix memory leak in uv_cpu_info
PR-URL: https://github.com/libuv/libuv/pull/538
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-22 12:11:45 +02:00
Saúl Ibarra Corretgé
bd1777fd53 unix, win: consolidate mutex trylock errors
Fold EAGAIN into EBUSY, and make it the only acceptable error.

PR-URL: https://github.com/libuv/libuv/pull/535
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-09-22 00:08:05 +02:00
Saúl Ibarra Corretgé
85adf43e03 unix: consolidate rwlock tryrdlock trywrlock errors
Fold EAGAIN and EBUSY into EBUSY. This makes it consistent across all
Unix platforms and Windows.

Refs: https://github.com/libuv/libuv/pull/525
PR-URL: https://github.com/libuv/libuv/pull/535
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
2015-09-22 00:07:28 +02:00
nmushell
029a43997d unix: Fix including uv-aix.h on AIX
On AIX, it is correct to include AIX specific include files.
This is similar to all other platforms (ex. darwin, linux).

Signed-off-by: Neil Mushell <nmushell@bloomberg.net>

PR-URL: https://github.com/libuv/libuv/pull/521
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-11 18:02:14 +02:00
nmushell
cf0e5b4db2 unix: Support atomic compare & swap xlC on AIX
On AIX with the native xlC compiler, the compiler supports sync
compare swap and compare in two flavors:
 1 __compare_and_swap
 2 __compare_and_swaplp

This differs from the gcc version of this function in name. The
second version of this function supports 8-byte boundary for
a doubleword. Therefore, the macro logic checks:
 if (AIX OS AND using xlC compiler)
    if (64bit)
       __compare_and_swaplp /* 64 bit version */
    else
       __compare_and_swap
    endif
 endif

Signed-off-by: Neil Mushell <nmushell@bloomberg.net>

PR-URL: https://github.com/libuv/libuv/pull/521
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-11 18:00:33 +02:00
Saúl Ibarra Corretgé
e2db9240db Working on the next version 2015-09-11 17:58:25 +02:00
Saúl Ibarra Corretgé
05284402af Add SHA to ChangeLog 2015-09-11 17:44:07 +02:00
Saúl Ibarra Corretgé
a7ad4f5218 2015.09.12, Version 1.7.4 (Stable)
Changes since version 1.7.3:

* doc: uv_read_start and uv_read_cb clarifications (Ben Trask)

* freebsd: obtain true uptime through clock_gettime() (Jianghua Yang)

* win, tty: do not convert \r to \r\n (Colin Snover)

* build,gyp: add DragonFly to the list of OSes (Michael Neumann)

* fs: fix bug in sendfile for DragonFly (Michael Neumann)

* doc: add uv_dlsym() return type (Brian White)

* tests: fix fs tests run w/o full getdents support (Jeremy Whitlock)

* doc: fix typo (Devchandra Meetei Leishangthem)

* doc: fix uv-unix.h location (Sakthipriyan Vairamani)

* unix: fix error check when closing process pipe fd (Ben Noordhuis)

* test,freebsd: fix ipc_listen_xx_write tests (Santiago Gimeno)

* win: fix unsavory rwlock fallback implementation (Bert Belder)

* doc: clarify repeat timer behavior (Eli Skeggs)
2015-09-11 17:44:02 +02:00
Eli Skeggs
36b79057c5 doc: clarify repeat timer behavior
Signed-off-by: Eli Skeggs <skeggse@gmail.com>

Fixes: https://github.com/libuv/libuv/issues/181
PR-URL: https://github.com/libuv/libuv/pull/520
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
2015-09-11 09:35:05 +02:00