Commit Graph

931 Commits

Author SHA1 Message Date
Bert Belder
4c5c5d9aea windows: map ERROR_DIRECTORY to UV_ENOENT 2013-01-30 19:06:10 +01:00
Andrew Shaffer
49977386e9 sunos: properly disarm PORT_LOADED fsevent watcher
Fixes a segmentation fault when the watched entity is changed after the watcher
has been closed.
2012-12-14 12:02:57 +01:00
Bert Belder
527a10f904 windows: improve / fix uv_interface_addresses
* If GetAdaptersAddresses() failed, it would return UV_OK nonetheless,
  but the `adresses` and `count` out parameters would not be set.

* When adapters were enabled or added in between the two
  GetAdaptersAddresses() calls, it would fail.

* In case of an out of memory situation, libuv would crash with a fatal
  error.

* All interface information is now stored in a single heap-allocated
  area.
2012-12-04 14:05:50 +01:00
Bert Belder
c7fca7ad84 windows: add some error code mappings 2012-12-04 14:05:50 +01:00
Ben Noordhuis
deb1c34774 sunos: fix uv_getaddrinfo() NULL pointer dereference 2012-11-29 23:30:48 +01:00
Ben Noordhuis
5639b2f1f9 linux: use /proc/cpuinfo for CPU frequency
Obtain the CPU frequency from /proc/cpuinfo because there may not be any
cpufreq info available in /sys. This also means that the reported CPU speed
from now on is the *maximum* speed, not the *actual* speed the CPU runs at.

This change only applies to x86 because ARM and MIPS don't report that
information in /proc/cpuinfo.

Fixes #588.

This is a back-port of commit 775064a from the master branch.
2012-11-20 19:20:16 +01:00
Ben Noordhuis
72955c29c2 windows: map WSAESHUTDOWN to UV_EPIPE
This is a back-port of commit 483043b from the master branch.
2012-11-14 01:06:03 +01:00
Bert Belder
f372fd4b13 windows: map ERROR_GEN_FAILURE to UV_EIO 2012-11-07 11:10:43 +01:00
Charlie McConnell
fb64948746 unix: do not set environ unless one is provided
Currently, `uv_spawn` will set `environ` to the value of `options.env`, even if
`options.env` is `NULL`.  This results in child processes for whom `environ ==
NULL`, which can cause a variety of unexpected issues.

This is a back-port of commit 1d85815 from the master branch.
2012-11-03 01:41:10 +01:00
Ben Noordhuis
c2478b2669 linux: update comm field in uv_set_process_title()
Makes the new process name visible in both `ps` and `ps a`, with the caveat
that `ps` will only print the first 16 characters.

Before this commit, `ps` kept reporting the old process name.
2012-10-22 13:44:56 +02:00
saghul
9a6f496985 win: fix compilation with MSVCRT < 8.0 2012-10-11 00:59:43 +02:00
Bert Belder
b0c1a3803a windows: fix handle leak in uv_fs_utime 2012-10-10 17:15:25 +02:00
Bert Belder
39ca621987 windows: don't blow up when an invalid FD is used 2012-09-22 03:50:30 +02:00
Charlie McConnell
b877db93ce unix: map EDQUOT to UV_ENOSPC 2012-09-21 17:08:27 +02:00
Ben Noordhuis
9a4838110d linux: improve /proc/cpuinfo parser
Make uv_cpu_info() understand the ARM and MIPS versions of /proc/cpuinfo,
it only knew how to deal with the x86 version

This commit also fixes a buglet where uv_cpu_info() reported the maximum CPU
frequency instead of the actual CPU frequency. That is, before this commit
`out/Debug/run-tests platform_output | grep speed | sort | uniq -c` on my
system always reported:

      8   speed: 3400

Now it reports (for example):

      2   speed: 3400
      6   speed: 1600

In other words, two CPUs are running at full speed while the others have been
scaled back because they're mostly idle.

This is a back-port of commit 54bfb66 from the master branch.

Fixes #526.
2012-09-15 19:10:41 +02:00
Bert Belder
b2dc1e6d64 win/tty: reset background brightness when color is set to default 2012-09-14 17:50:45 +02:00
Ben Noordhuis
1988f5e581 unix: put child process stdio fds in blocking mode
Remove the O_NONBLOCK flag from file descriptors 0-2, most applications don't
expect EAGAIN errors when dealing with stdio.
2012-09-12 01:48:05 +02:00
Ben Noordhuis
b5028c5b54 unix: code cleanup, rename variable 2012-09-12 01:33:16 +02:00
Ben Noordhuis
12c25e1027 unix: fix EMFILE busy loop
Don't spin in epoll_wait() / kevent() / port_getn() / etc. when we can't
accept() a new connection due to having reached the file descriptor limit.
Pass the error to the connection_cb and let the libuv user deal with it.
2012-09-10 15:03:03 +02:00
Ben Noordhuis
b101a53e6e sunos: don't set TCP_KEEPALIVE
The system headers advertise the socket option but the actual syscall fails
with ENOPROTOOPT.

Fixes joyent/node#3937.
2012-09-04 01:20:33 +02:00
Bert Belder
24c062cc3e windows: fix memory corruption when closing shared server sockets 2012-08-30 17:25:32 +02:00
Ben Noordhuis
ad7b48aeec unix: fix memory leak in udp.c
Some memory was leaked when the uv_udp_t handle was closed when there were
in-flight send requests with a heap allocated buffer list.

That doesn't happen much in practice. In the common case (writing < 5 buffers),
the buffer list is stored inside the uv_udp_send_t structure, not allocated on
the heap.
2012-08-25 22:28:52 +02:00
Ben Noordhuis
0ac2fdc554 unix: map errno ESPIPE 2012-08-23 00:32:56 +02:00
Bert Belder
a7b83e0b98 windows: fix uninitialized memory access in uv_update_time()
uv_update_time does not overwrite the high 32 bits of uv_loop_t.time.
It merely increments it by one when the low 32 bits have wrapped. That
means that `time` needs to be initialized to zero before
uv_update_time() is called for the first time.
2012-08-21 01:17:52 +02:00
Ben Noordhuis
012cbda719 unix, windows: fix memory corruption in fs-poll.c
uv_fs_poll_t has an embedded uv_timer_t handle that got closed at a time when
the memory of the encapsulating handle might already have been deallocated.

Solve that by moving the poller's state into a structure that is allocated on
the heap and can be freed independently.
2012-08-20 17:13:27 +02:00
Ben Noordhuis
83e00873b7 unix: fix const correctness compiler warning
This is a back-port of commit f97c80f from the master branch.
2012-08-20 16:18:38 +02:00
Tim Holy
ce87b7e14c unix: fix integer overflow in uv_hrtime
Conversion to nanoseconds was overflowing with 32-bit builds.
2012-08-18 03:55:13 +02:00
Ben Noordhuis
22ce5a3412 sunos: fix uv_cpu_info() on x86_64
kstat_data_lookup("clock_Mhz") returns a KSTAT_DATA_INT32 on i386 but a
KSTAT_DATA_INT64 on x86_64.
2012-08-16 14:43:46 +02:00
Bert Belder
a1157cef37 windows: don't duplicate invalid stdio handles
Ref: joyent/node#3779
2012-08-08 02:24:48 +02:00
Bert Belder
00d2f22151 windows: fix typos in process-stdio.c 2012-08-08 02:18:53 +02:00
Bert Belder
dfb6be0e07 windows: map WSANO_DATA to UV_ENOENT
This improves uv_getaddrinfo error reporting.
2012-08-03 17:37:22 +02:00
Bert Belder
6209fe51f0 windows: invalid stdio handles should be INVALID_HANDLE_VALUE and not NULL 2012-08-01 01:09:07 +02:00
Bert Belder
109e176ae2 windows: only allow opening directories for reading
This is closer to the Posix model.
2012-08-01 00:31:31 +02:00
Bert Belder
69c2ef8acc windows: initialize uv_fs_t.path to NULL
This shouldn't be necessary, but node v0.8 relies on it.
2012-07-31 21:08:26 +02:00
Bert Belder
9d71d1cab5 windows/uv_spawn: ignore errors when duplicating fd 0-2 fails
Hopefully this fixes joyent/node#3779.
2012-07-31 19:38:43 +02:00
Bert Belder
ed2bc23346 windows: fix the MinGW build 2012-07-31 17:24:46 +02:00
Bert Belder
7f6b86c687 windows: improve uv_fs_unlink
* It's now more efficient, the file is not opened twice.
* It no longer allows deletion of non-symlink directory reparse points.
2012-07-31 17:24:45 +02:00
Bert Belder
7edc29a414 windows: fix regression in uv_fs_link
Old and new path were accidentally reversed.
2012-07-31 17:24:45 +02:00
Ben Noordhuis
d192a317aa sunos: workaround OS bug to prevent fs.watch() from spinning
This is a back-port of commit cfb06db from the master branch.

Fixes joyent/node#3768.
2012-07-31 15:07:40 +00:00
Bert Belder
514265ec6e windows: fix memory leaks in fs
Also clean up the code in various ways.
2012-07-31 00:04:48 +02:00
Ben Noordhuis
4fe1916926 linux: fix 'two watchers, one path' segfault
Problem: registering two uv_fs_event_t watchers for the same path, then closing
them, caused a segmentation fault. While active, the watchers didn't work right
either, only one would receive events.

Cause: each watcher has a wd (watch descriptor) that's used as its key in a
binary tree. When you call inotify_watch_add() twice with the same path, the
second call doesn't return a new wd - it returns the existing one. That in turn
resulted in the first handle getting ousted from the binary tree, leaving
dangling pointers.

This commit addresses that by storing the watchers in a queue and storing the
queue in the binary tree instead of storing the watchers directly in the tree.

Fixes joyent/node#3789.
2012-07-28 16:31:47 +02:00
Shuhei Tanuma
22f004db61 unix: don't abort() when trylock functions return EBUSY
Fixes #500.
2012-07-26 00:11:46 +02:00
Ben Noordhuis
94355e4718 unix: fix format string vulnerability in freebsd.c
uv_set_process_title() was susceptible to a format string vulnerability:

  $ node -e 'process.title = Array(42).join("%s")'
  Segmentation fault: 11 (core dumped)

The fix is trivial - call setproctitle("%s", s) instead of setproctitle(s) -
but valgrind complains loudly about reads from and writes to uninitialized
memory in libc. It's not a libuv bug because the test case below triggers the
same warnings:

  #include <sys/types.h>
  #include <unistd.h>

  int main(void)
  {
    setproctitle("%s", "test");
    return 0;
  }

That's why this commit replaces setproctitle() with sysctl(KERN_PROC_ARGS).

This commit reapplies commit a9f6f06, which got reverted in 69a6afe. The revert
turned out to be unnecessary.
2012-07-19 16:26:54 +02:00
Ben Noordhuis
ff59525c7e unix: fix uv_pipe_connect() with existing fd
Don't create a new socket descriptor if one has been previously assigned with
uv_pipe_open().
2012-07-19 16:25:49 +02:00
Ben Noordhuis
e3a28508b2 unix: fix errno reporting in uv_pipe_connect()
Remember the errno when the socket() syscall fails.
2012-07-19 16:13:44 +02:00
Ben Noordhuis
69a6afea63 unix: undo changes to uv_set_process_title()
It's making node.js crash when run as root. Backtrace:

  (gdb) bt
  #0  0x00007fff856e3ff9 in __findenv ()
  #1  0x00007fff856e404c in getenv ()
  #2  0x000000010004c850 in loop_init (loop=0x10045a792, flags=8) at ev.c:1707
  #3  0x000000010004cb3b in ev_backend [inlined] () at /Users/tjfontaine/Development/node/deps/uv/src/unix/ev/ev.c:2090
  #4  0x000000010004cb3b in ev_default_loop (flags=1606417108) at ev.c:2092
  #5  0x000000010004e5c6 in uv__loop_init (loop=0x10066e330, default_loop=1) at loop.c:52
  #6  0x0000000100044367 in uv_default_loop () at core.c:196
  #7  0x0000000100004625 in node::Init (argc=1606417456, argv=0x100b0f490) at node.cc:2761
  #8  0x000000010000797d in node::Start (argc=1606417600, argv=0x0) at node.cc:2888
  #9  0x0000000100000ca4 in start ()

This reverts commits:

  b49d6f7 unix: fix uv_set_process_title()
  a9f6f06 unix: fix format string vulnerability in freebsd.c
  a87abc7 unix: avoid buffer overflow in proctitle.c
  dc97d44 unix: move uv_set_process_title() to proctitle.c
2012-07-18 22:54:39 +02:00
Ben Noordhuis
b49d6f7c30 unix: fix uv_set_process_title()
Use strncpy() to set the process title, it pads the remainder with nul bytes.
Avoids garbage output on systems where `ps aux` prints the entire proctitle
buffer, not just the characters up to the first '\0'.

Fixes joyent/node#3726.
2012-07-18 00:26:02 +02:00
Ben Noordhuis
a9f6f06fea unix: fix format string vulnerability in freebsd.c
uv_set_process_title() was susceptible to a format string vulnerability:

  $ node -e 'process.title = Array(42).join("%s")'
  Segmentation fault: 11 (core dumped)

The fix is trivial - call setproctitle("%s", s) instead of setproctitle(s) -
but valgrind complains loudly about reads from and writes to uninitialized
memory in libc. It's not a libuv bug because the test case below triggers the
same warnings:

  #include <stdio.h>
  #include <stdlib.h>
  #include <sys/types.h>
  #include <unistd.h>

  int main(void)
  {
    setproctitle("%s", "test");
    return 0;
  }

That's why this commit replaces setproctitle() with sysctl(KERN_PROC_ARGS).
2012-07-13 17:16:38 +02:00
Ben Noordhuis
a87abc7070 unix: avoid buffer overflow in proctitle.c
Get/set process title with uv_strlcpy(), not strncpy(). The latter won't
zero-terminate the result if the destination buffer is too small.
2012-07-13 15:03:39 +02:00
Fedor Indutny
dc97d44c56 unix: move uv_set_process_title() to proctitle.c
Use hijacking argv array to change process' title. It seems to be working fine
on almost every platform (at least it should not break anything as it's used in
nginx in a similar way).
2012-07-13 14:57:40 +02:00