Commit Graph

1413 Commits

Author SHA1 Message Date
Ben Noordhuis
9d60f1ebda linux: don't turn on SO_REUSEPORT socket option
On the BSDs, SO_REUSEPORT is pretty much SO_REUSEADDR with some special
casing for IP multicast.  When two processes (that don't do multicast)
bind to the same address, only the last one receives traffic.  It allows
one to "steal" the bound address from another process.  (Both processes
have to enable SO_REUSEPORT though, so it only works in a cooperative
setting.)

On Linux however, it enables port sharing, not stealing - both processes
receive a share of the traffic.  This is a desirable trait but pre-3.9
kernels don't support the socket option and a libuv program therefore
behaves differently with older kernels or on another platform.

The difference in behavior (sharing vs. stealing) is, in my opinion,
big enough and confusing enough that it merits a rollback.  People
that want this kind of functionality can prepare the socket manually
and hand it off to uv_udp_open().

This commit effectively reverts commit 17452cd.
2013-08-25 21:38:39 +02:00
Bert Belder
c8607675b9 Now working on v0.11.11 2013-08-24 19:46:03 +02:00
Bert Belder
742dadcb71 2013.08.25, Version 0.11.10 (Unstable)
* windows: Re-implement uv_fs_stat. The st_ctime field now contains the
  change time, not the creation time, like on unix systems. st_dev,
  st_ino, st_blocks and st_blksize are now also filled out. (Bert
  Belder)

* linux: fix setsockopt(SO_REUSEPORT) error handling (Ben Noordhuis)

* windows: report uv_process_t exit code correctly (Bert Belder)

* windows: make uv_fs_chmod() report errors correctly (Bert Belder)

* windows: make some more NT apis available for libuv's internal use
  (Bert Belder)

* windows: squelch some compiler warnings (Bert Belder)
2013-08-24 19:45:59 +02:00
Bert Belder
20a8e58adb windows: reimplement uv_fs_stat using NT syscalls
This improves the output of uv_fs_stat:
  * `st_ctime` now contains the change time, not the creation time.
  * `st_ino` is now filled in with an fs-specific unique number.
  * `st_dev` is set to the serial number of the containing file system.
  * `st_blocks` now gets set.
  * `st_blksize` is no longer zero, but set to a reasonable default.
2013-08-24 19:13:51 +02:00
Bert Belder
1cc6f96f0c windows: squelch some compiler warnings
This removes some compiler warnings caused by implicit type conversion
from uint64_t to long, which would happen in the `FILETIME_TO_TIMESPEC`
macro.
2013-08-24 19:13:50 +02:00
Bert Belder
315d7001e8 windows: make it possible to use NtQueryVolumeInformationFile
This commit adds bootstrap code, function signatures, struct definitions
etc. to make it possible for libuv to use NtQueryVolumeInformationFile.

Most of this comes from the NT DDK, which libuv mirrors so that people
don't need the DDK to compile it.
2013-08-24 19:13:42 +02:00
Bert Belder
c283a9ef84 windows: add DDK definitions for more file information classes
Copy some more structs from the NT DDK to winapi.h, so people can
compile libuv without installing the DDK.
2013-08-24 16:45:32 +02:00
Bert Belder
1f73bd4030 windows: add additional NTSTATUS class detection macros 2013-08-24 16:45:31 +02:00
Bert Belder
7f756955b6 windows: make uv_fs_chmod() report errors correctly
Before this patch libuv would attempt to use GetLastError() to retrieve
the cause of NtQueryInformationFile failure, but that's not how it
should be done.
2013-08-24 16:45:31 +02:00
Bert Belder
d667653f77 windows: report uv_process_t exit code correctly
A stupid oversight in 66ae0ff would cause a random value to be reported
as the exit code for a 'normally exited' child process.
2013-08-24 16:45:30 +02:00
Ben Noordhuis
17452cd0e2 linux: fix setsockopt(SO_REUSEPORT) error handling
Linux as of 3.9 has a SO_REUSEPORT option that is similar but not
identical to its BSD counterpart.

On the BSDs, it turns on SO_REUSEADDR _and_ makes it possible to share
the address and port across processes.

On Linux, it "merely" enables fair load distribution - port sharing
still requires that you set SO_REUSEADDR.

Fair distribution is a desirable trait but not an essential one.
We don't know in advance whether the kernel actually supports
SO_REUSEPORT so don't treat EINVAL or ENOPROTOOPT as errors.

As an aside, on the BSDs we now omit the setsockopt(SO_REUSEADDR)
system call because it's implied by SO_REUSEPORT.

Fixes #870.
2013-08-24 15:26:51 +02:00
Bert Belder
e47e6b2afa Now working on v0.11.10 2013-08-23 18:51:38 +02:00
Bert Belder
a2d29b5b06 2013.08.24, Version 0.11.9 (Unstable)
Changes since version 0.11.8:

* fsevents: share FSEventStream between multiple FS watchers, which
  removes a limit on the maximum number of file watchers that can be
  created on OS X. (Fedor Indutny)

* process: the `exit_status` parameter for a uv_process_t's exit
  callback now is an int64_t, and no longer an int. (Bert Belder)

* process: make uv_spawn() return some types of errors immediately on
  windows, instead of passing the error code the the exit callback. This
  brings it on par with libuv's behavior on unix. (Bert Belder)
2013-08-23 18:51:36 +02:00
Bert Belder
66ae0ff562 process: make the 'status' parameter for exit_cb an int64_t
This means we no longer have to strip the high bit from the process exit
code on Windows, which is problematic because an unhandled SEH exception
can make a process exit with a status code that has the high bit set.
2013-08-23 18:35:09 +02:00
Bert Belder
ed82eae13a windows: make uv_spawn() failure more predictable
* It will now report some types of errors synchronously, to bring it on
  par with uv-unix. Fixes #865.

* Failure to find the target executable will now set up stdio pipes
  correctly, so the user can assume that when uv_spawn() returns 0 these
  pipes will never trigger asserts in libuv's guts.
2013-08-23 18:34:14 +02:00
Fedor Indutny
cd2794c01f fsevents: use shared FSEventStream
It seems that number of simultaneously opened FSEventStreams is
limited on OSX (i.e. you can have only fixed number of them on
one running system), getting past through this limit will cause
`FSEventStreamCreate` to return false and write following message
to stderr:

    (CarbonCore.framework) FSEventStreamStart: register_with_server:
    ERROR: f2d_register_rpc() => (null) (-21)

To prevent this, we must use only one shared FSEventStream with a
paths for all uv_fsevent_t handles, and then filter out events for
each handle using this paths again.

See https://github.com/joyent/node/issues/5463
2013-08-22 16:35:13 +04:00
Timothy J Fontaine
abcad99e23 Now working on v0.11.9 2013-08-21 10:25:40 -07:00
Timothy J Fontaine
a5260462db 2013.08.22, Version 0.11.8 (Unstable)
Changes since version 0.11.7:

* unix: fix missing return value warning in stream.c (Ben Noordhuis)

* build: serial-tests was added in automake v1.12 (Ben Noordhuis)

* windows: fix uninitialized local variable warning (Ben Noordhuis)

* windows: fix missing return value warning (Ben Noordhuis)

* build: fix string comparisons in autogen.sh (Ben Noordhuis)

* windows: move INLINE macro, remove UNUSED (Ben Noordhuis)

* unix: clean up __attribute__((quux)) usage (Ben Noordhuis)

* sunos: remove futimes() macro (Ben Noordhuis)

* unix: fix uv__signal_unlock() prototype (Ben Noordhuis)

* unix, windows: allow NULL async callback (Ben Noordhuis)

* build: apply dtrace -G to all object files (Timothy J. Fontaine)

* darwin: fix indentation in uv__hrtime() (Ben Noordhuis)

* darwin: create fsevents thread on demand (Ben Noordhuis)

* darwin: reduce fsevents thread stack size (Ben Noordhuis)

* darwin: call pthread_setname_np() if available (Ben Noordhuis)

* build: fix automake serial-tests check again (Ben Noordhuis)

* unix: retry waitpid() on EINTR (Ben Noordhuis)

* darwin: fix ios build error (Ben Noordhuis)

* darwin: fix ios compiler warning (Ben Noordhuis)

* test: simplify test-ip6-addr.c (Ben Noordhuis)

* unix, windows: fix ipv6 link-local address parsing (Ben Noordhuis)

* fsevents: FSEvents is most likely not thread-safe (Fedor Indutny)

* windows: omit stdint.h, fix msvc 2008 build error (Ben Noordhuis)
2013-08-21 10:25:37 -07:00
Ben Noordhuis
8531046a86 windows: omit stdint.h, fix msvc 2008 build error
Don't include <stdint.h>, it's not available when compiling with MSVC
2008 and we don't need it in the first place - just cast the argument
to `char *` rather than `uintptr_t`.

Fixes #893.
2013-08-20 14:06:35 +02:00
Fedor Indutny
303ae3b958 fsevents: FSEvents is most likely not thread-safe
Perform all operation with FSEventStream in the same thread, where it'll
be used.
2013-08-20 13:04:47 +04:00
Ben Noordhuis
602b1c69e1 unix, windows: fix ipv6 link-local address parsing
uv_ip6_addr() copies the address part to a temporary buffer when it
contains a link-local suffix ('<address>%<interface>'). Before this
commit, it didn't zero-terminate the address properly: it put the nul
byte at the end of the temporary buffer rather than at the end of the
address string, meaning the buffer looked like this:

    <address> <garbage> '\0'

Fixes the following valgrind warning:

    ==16170== Conditional jump or move depends on uninitialised value(s)
    ==16170==    at 0x43602C: inet_pton6 (inet.c:228)
    ==16170==    by 0x435CE1: uv_inet_pton (inet.c:163)
    ==16170==    by 0x436FD0: uv_ip6_addr (uv-common.c:175)
    ==16170==    by 0x434717: test_ip6_addr_scope (test-ip6-addr.c:89)
    ==16170==    by 0x43455B: call_iface_info_cb (test-ip6-addr.c:45)
    ==16170==    by 0x43462B: foreach_ip6_interface (test-ip6-addr.c:59)
    ==16170==    by 0x434791: run_test_ip6_addr_link_local (test-ip6-add
    ==16170==    by 0x4061E8: run_test_part (runner.c:396)
    ==16170==    by 0x404F4B: main (run-tests.c:58)
    ==16170==
    ==16170== Conditional jump or move depends on uninitialised value(s)
    ==16170==    at 0x4C2AD8A: __GI_strchr (mc_replace_strmem.c:224)
    ==16170==    by 0x435ECB: inet_pton6 (inet.c:231)
    ==16170==    by 0x435CE1: uv_inet_pton (inet.c:163)
    ==16170==    by 0x436FD0: uv_ip6_addr (uv-common.c:175)
    ==16170==    by 0x434717: test_ip6_addr_scope (test-ip6-addr.c:89)
    ==16170==    by 0x43455B: call_iface_info_cb (test-ip6-addr.c:45)
    ==16170==    by 0x43462B: foreach_ip6_interface (test-ip6-addr.c:59)
    ==16170==    by 0x434791: run_test_ip6_addr_link_local (test-ip6-add
    ==16170==    by 0x4061E8: run_test_part (runner.c:396)
    ==16170==    by 0x404F4B: main (run-tests.c:58)

Fixes #890.
2013-08-19 22:38:51 +02:00
Ben Noordhuis
12bad62add darwin: fix ios compiler warning
uv__fsevents_loop_delete() returns void. Remove the 'return 0'
statement.
2013-08-19 13:27:25 +02:00
Ben Noordhuis
b03192ed6f darwin: fix ios build error
Include <errno.h> and <stdlib.h>.  They're being pulled in implicitly
on OS X but apparently that's not the case with iOS builds.

Build breakage introduced in 5ff6f85 by yours truly. Mea culpa.

Fixes #885 and #891.
2013-08-19 13:26:57 +02:00
Ben Noordhuis
389fc448df Merge remote-tracking branch 'origin/v0.10' 2013-08-18 17:48:52 +02:00
Ben Noordhuis
b2ac4d3bf4 unix: retry waitpid() on EINTR
Before this commit, libuv would abort() if waitpid() failed with EINTR.

It's unlikely that anyone actually hit this error condition: the major
UNIX platforms - with the possible exception of Solaris - don't return
EINTR when the WNOHANG flag is specified, as libuv does.

However, POSIX allows for an implementation to do whatever here: unless
explicitly forbidden, it's allowed and POSIX doesn't restrict
implementers in this particular area.

Let's opt for robustness and handle EINTR.
2013-08-18 17:45:52 +02:00
Ben Noordhuis
5ff6f85f58 darwin: call pthread_setname_np() if available
When setting the process title, also call pthread_setname_np() when
supported (OS X >= 10.6 and iOS >= 3.2.)
2013-08-15 21:52:26 +02:00
Ben Noordhuis
c82e7033a5 darwin: reduce fsevents thread stack size
The fsevents watcher thread only needs a minimal amount of stack space
in order to run. Restrict its stack size so there's more address space
left for the libuv user.
2013-08-13 11:42:04 +02:00
Ben Noordhuis
06c4fa67ed darwin: create fsevents thread on demand
* Move CF run loop code to fsevents.c.

* Create the fsevents thread on demand rather than at startup.

* Remove use of ACCESS_ONCE. All accesses to loop->cf_loop are
  protected by full memory barriers so no reordering can take place.

Fixes #872.
2013-08-13 11:41:48 +02:00
Ben Noordhuis
ffcf5d1a7f darwin: fix indentation in uv__hrtime() 2013-08-13 11:39:56 +02:00
Ben Noordhuis
1510ce81fd unix, windows: allow NULL async callback
Allow a NULL callback so the user doesn't have to provide a dummy when
the actual event is processed by e.g. a check handle callback.
2013-08-12 08:55:51 +02:00
Ben Noordhuis
c6adab2e27 unix: fix uv__signal_unlock() prototype 2013-08-12 07:55:34 +02:00
Ben Noordhuis
1920513735 sunos: remove futimes() macro
Remove a macro from src/unix/internal.h that aliases futimes() to
futimesat(). Deal with the platform inconsistency in src/unix/fs.c.
2013-08-12 07:46:22 +02:00
Ben Noordhuis
fd23dbf5c6 unix: clean up __attribute__((quux)) usage
Macro-ify __attribute__((destructor)) and __attribute__((unused)).

The macros are no-ops when the compiler does not support function
attributes.
2013-08-12 07:41:49 +02:00
Ben Noordhuis
1e500266eb windows: move INLINE macro, remove UNUSED
Move the INLINE macro from src/uv-common.h to src/win/internal.h, it's
not used in src/unix/ or src/

Remove the UNUSED macro. It's, well, unused.
2013-08-12 07:22:19 +02:00
Ben Noordhuis
db1dccb9ec windows: fix missing return value warning
Fixes the following warning:

    src\uv-common.c(476): warning C4715:
    'uv__getaddrinfo_translate_error' : not all control paths return
    a value

The function never returns - the final statement is a call to abort() -
but it seems MSVC's program flow analyzer is too weak to figure that
out.
2013-08-09 19:06:31 +02:00
Ben Noordhuis
85b92ad5bf windows: fix uninitialized local variable warning
Pass the user-returned buffer to the read calback. Fixes the following
warning:

    src\win\tcp.c(439): warning C4700: uninitialized local variable
    'buf'
2013-08-09 19:00:52 +02:00
Ben Noordhuis
6837e480fd unix: fix missing return value warning in stream.c 2013-08-08 21:10:37 +02:00
Ben Noordhuis
d34fad7325 Now working on v0.11.8 2013-08-06 23:19:01 +02:00
Ben Noordhuis
3cad361f87 2013.08.07, Version 0.11.7 (Unstable)
Changes since version 0.11.6:

* unix, windows: fix uv_fs_chown() function prototype (Ben Noordhuis)

* unix, windows: remove unused variables (Brian White)

* test: fix signed/unsigned comparison warnings (Ben Noordhuis)

* build: dtrace shouldn't break out of tree builds (Timothy J. Fontaine)

* unix, windows: don't read/recv if buf.len==0 (Ben Noordhuis)

* build: add mingw makefile (Ben Noordhuis)

* unix, windows: add MAC to uv_interface_addresses() (Brian White)

* build: enable AM_INIT_AUTOMAKE([subdir-objects]) (Ben Noordhuis)

* unix, windows: make buf arg to uv_fs_write const (Ben Noordhuis)

* sunos: fix build breakage introduced in e3a657c (Ben Noordhuis)

* aix: fix build breakage introduced in 3ee4d3f (Ben Noordhuis)

* windows: fix mingw32 build, define JOB_OBJECT_XXX (Yasuhiro Matsumoto)

* windows: fix mingw32 build, include limits.h (Yasuhiro Matsumoto)

* test: replace sprintf() with snprintf() (Ben Noordhuis)

* test: replace strcpy() with strncpy() (Ben Noordhuis)

* openbsd: fix uv_ip6_addr() unused variable warnings (Ben Noordhuis)

* openbsd: fix dlerror() const correctness warning (Ben Noordhuis)

* openbsd: fix uv_fs_sendfile() unused variable warnings (Ben Noordhuis)

* build: disable parallel automake tests (Ben Noordhuis)

* test: add windows-only snprintf() function (Ben Noordhuis)

* build: add automake serial-tests version check (Ben Noordhuis)
2013-08-06 23:18:55 +02:00
Ben Noordhuis
fb2a6d4a15 openbsd: fix uv_fs_sendfile() unused variable warnings 2013-08-05 02:45:59 +02:00
Ben Noordhuis
103969ac8e openbsd: fix dlerror() const correctness warning 2013-08-05 02:45:59 +02:00
Ben Noordhuis
f7e46379ef openbsd: fix uv_ip6_addr() unused variable warnings 2013-08-05 02:45:59 +02:00
Yasuhiro Matsumoto
d7a1ba85f2 windows: fix mingw32 build, include limits.h
src/win/process uses INT_MAX so include limits.h.
2013-08-01 15:21:35 +02:00
Yasuhiro Matsumoto
bfa3e28b0d windows: fix mingw32 build, define JOB_OBJECT_XXX
mingw32 doesn't have the JOB_OBJECT_XXX defines. Provide them ourselves
when they are not already defined.

This is possibly only an issue with older versions of mingw32 because
mingw-w64 2.0 _does_ export the defines.
2013-08-01 15:21:35 +02:00
Ben Noordhuis
4bdb7d837a aix: fix build breakage introduced in 3ee4d3f
Possibly, anyway - this change is untested. Without it, libuv
definitely won't build on AIX though.
2013-07-29 06:11:13 +02:00
Ben Noordhuis
167a817351 sunos: fix build breakage introduced in e3a657c 2013-07-29 06:08:35 +02:00
Ben Noordhuis
0e7ba080b4 unix, windows: make buf arg to uv_fs_write const
Change the uv_fs_write() prototype so the 'buf' argument is now
`const void*` rather than `void*`.

The argument is stored in a non-const field in the uv_fs_t but that's
inconsequential because the memory it points to is not touched.
2013-07-29 05:27:45 +02:00
Ben Noordhuis
3d4099ebcb Merge remote-tracking branch 'origin/v0.10'
Conflicts:
	AUTHORS
	ChangeLog
	src/version.c
	src/win/fs.c
2013-07-25 20:01:31 +02:00
Timothy J Fontaine
2744e1e009 Now working on v0.10.14 2013-07-25 10:34:41 -07:00
Timothy J Fontaine
381312e1fe 2013.07.26, Version 0.10.13 (Stable)
Changes since version 0.10.12:

* unix, windows: fix uv_fs_chown() function prototype (Ben Noordhuis)
2013-07-25 10:31:28 -07:00