Commit Graph

1898 Commits

Author SHA1 Message Date
Ben Noordhuis
6150feda56 unix: fix ‘fd’ undeclared build error
Reapplies commit b5028c5b, failed to merge in 5cb4197.
2012-10-25 12:50:40 +02:00
Ben Noordhuis
5cb4197deb Merge branch 'v0.8' 2012-10-25 04:43:19 +02:00
Ben Noordhuis
f43ad85edd include: fix ngx_queue_foreach() macro
Guard against the possibility that the queue is emptied while we're iterating
over it. Simple test case:

  #include "ngx-queue.h"
  #include <assert.h>

  int main(void) {
    ngx_queue_t h;
    ngx_queue_t v[2];
    ngx_queue_t* q;
    unsigned n = 0;
    ngx_queue_init(&h);
    ngx_queue_insert_tail(&h, v + 0);
    ngx_queue_insert_tail(&h, v + 1);
    ngx_queue_foreach(q, &h) {
      ngx_queue_remove(v + 0);
      ngx_queue_remove(v + 1);
      n++;
    }
    assert(n == 1); // *not* 2
    return 0;
  }

Fixes #605.
2012-10-25 04:36:51 +02:00
Bert Belder
0dbab84529 benchmark: async_pummel should not call uv_async_send on closed handle
This fixes an assertion that triggered in debug builds on Windows.
2012-10-24 21:36:57 +02:00
Bert Belder
a54b9e2921 benchmark: timed_udp_pummel should not write to closed udp handle
This fixes intermittent assertion failures when running the benchmark.
2012-10-24 21:36:57 +02:00
Ben Noordhuis
31f9fbce63 unix: reopen tty as /dev/tty
Reopen the file descriptor when it refers to a tty. This lets us put the tty in
non-blocking mode without affecting other processes that share it with us.

Fixes #601.
2012-10-24 15:39:11 +02:00
Ben Noordhuis
b7f38b1e53 Revert "unix: avoid iterating over all async handles"
This reverts commit 209abbab27.

Fixes the following SIGSEGV:

  (gdb) f 1
  #1  0x00007fc084683aec in uv__async_io (loop=0x7fc0848e0b40,
  handle=0x7fc0848e0c78, events=1) at src/unix/async.c:175
  175             ASYNC_CB(h)
  (gdb) list
  170
  171         /* If we need to sweep all handles anyway - skip this loop */
  172         if (!loop->async_sweep_needed) {
  173           for (i = 0; i < end; i += sizeof(h)) {
  174             h = *((uv_async_t**) (buf + i));
  175             ASYNC_CB(h)
  176           }
  177         }
  178
  179         bytes -= end;
  (gdb) print *h
  $1 = {close_cb = 0x184e1b0, data = 0x18d9520, loop = 0x7fc0848e0b40,
  type = 49, handle_queue = {prev = 0x18dae10, next = 0x7860c0}, flags = 32,
  next_closing = 0x1863b40, pending = 0, async_cb = 0x31,
  queue = {prev = 0x18dae50, next = 0x7860c0}}
  (gdb)

It looks like the async handle gets closed or otherwise becomes invalid before
the sweep is executed.

Fixes #603.
2012-10-24 14:58:49 +02:00
saghul
61ecb3415d win: support compilation with Visual Studio 2008 2012-10-23 22:55:25 +02: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
Ben Noordhuis
775064a3a5 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.
2012-10-21 00:08:21 +02:00
Ben Noordhuis
1bb1ba27dd unix: fix compiler warning in async.c
Include missing <string.h> header. Fixes the following compiler warning:

  src/unix/async.c:182:7: warning: implicit declaration of
  function ‘memmove’ [-Wimplicit-function-declaration]
2012-10-20 23:36:00 +02:00
Fedor Indutny
209abbab27 unix: avoid iterating over all async handles 2012-10-19 17:22:30 +02:00
Bert Belder
1e32cb01b5 unix: support signal handlers outside the main loop 2012-10-17 01:25:02 +02:00
Bert Belder
39d574dcff unix: make it possible to delay close callbacks 2012-10-17 01:25:00 +02:00
Bert Belder
47eb03490a test: move loop cleanup code to the individual tests 2012-10-17 01:24:49 +02:00
Bert Belder
28eb619c65 windows: don't run signal tests
They are dummy tests on windows, running them is misleading.
Also remove duplicate 'test-signal.c' entry from uv.gyp.
2012-10-16 17:23:04 +02:00
Bert Belder
c5e1140779 tests: fix some compile warnings on windows 2012-10-16 17:22:54 +02:00
Hiroaki Nakamura
36b1e1a57c test: change 10e8 to 1e9
It is clearer and used everywhere else.
2012-10-16 00:07:46 +02:00
Ben Noordhuis
fd136da04a unix: remove always_inline attribute
Fixes the following gcc 4.7+ warning:

  ../src/unix/internal.h:105:13: warning: always_inline function might not be
  inlinable [-Wattributes]

gcc wants the always_inline function to be annotated with the 'inline' keyword
which we can't do because we compile in C89 mode.

Using __inline is not an option because that makes clang generate warnings when
-Wlanguage-extension-token is enabled.

Therefore, remove the always_inline attribute altogether and hope that the
compiler is smart enough to inline the functions.
2012-10-15 01:08:47 +02:00
Ben Noordhuis
d8de4fbd13 build: compile with -fwrapv in debug mode 2012-10-15 00:52:27 +02:00
Ben Noordhuis
47b2cd31c9 build: rename uv.a to libuv.a 2012-10-11 14:32:06 +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
4900912d44 windows: fix application crashed popup in debug version
This is a backport of 2 patches by Ting-Yu Lin and Hiroaki Nakamura.
2012-10-10 17:15:25 +02:00
Ben Noordhuis
cb03e3bd26 darwin: work around concurrent write() kernel bug
Simultaneously writing from multiple threads to the same file descriptor is not
safe on OS X. We already serialized all pwrite() system calls, apply the same
workaround to the write() system call.

Fixes a node.js test, test/simple/test-fs-sir-writes-alot.js, that was failing
because parts of the output file got filled with nul bytes.
2012-10-10 02:15:54 +02:00
Ben Noordhuis
4affbe70b6 unix: remove unnecessary pthread_join ESRCH check
ESRCH means the thread never got started but we guard against that now.
2012-10-10 01:11:09 +02:00
Hiroaki Nakamura
acea3028c5 unix, windows: add thread barrier support 2012-10-09 17:30:52 +02:00
Hiroaki Nakamura
2684f876a9 windows: don't set CRT debug mode on MinGW 2012-10-09 17:00:02 +02:00
Andrius Bentkus
193432df7d uv.h: move gid and uid to the end of the uv_process_t struct
uv_gid_t and uv_uid_t have different sizes on different platforms.
Moving them to the end of the struct is easier for bindings that use
FFI.
2012-10-09 16:57:02 +02:00
Andrius Bentkus
b2caee7cfb uv.h: move private uv_req_t fields to the bottom of the struct 2012-10-09 16:56:11 +02:00
Ben Noordhuis
40134c3537 unix: don't reap threads if none were started
Fixes a segmentation fault on 32 bits linux with glibc 2.15.

Thanks to Johan Bergström (@jbergstroem) for reporting the issue and testing
out the patch.
2012-10-08 00:37:03 +02:00
Shigeki Ohtsu
f7c991f1ce test: add consumer-producer test for condvar 2012-10-07 23:17:31 +02:00
Ting-Yu Lin
8f1ec32865 windows: fix application crashed popup in debug version 2012-10-07 15:43:03 +02:00
Ben Noordhuis
b9ed1a6dbf unix: don't abort() on EINVAL in threadpool.c
The FreeBSD implementation of pthread_join() returns EINVAL when a thread has
already quit, not ESRCH.
2012-10-06 22:58:28 +02:00
Ben Noordhuis
b152b12772 unix: fix scandir filter prototype again
The only platforms where the dirent argument is non-const are OS X, OpenBSD
and older versions of FreeBSD (but not FreeBSD 9). Accommodate the first two.
2012-10-06 22:25:58 +02:00
Ben Noordhuis
7833df14ba freebsd, openbsd: don't use fdatasync()
The fdatasync() system call does not exist on either FreeBSD or OpenBSD, fall
back to fsync().
2012-10-06 17:19:12 +02:00
Ben Noordhuis
7aa1261769 include: fix confusing uv_tcp_keepalive comment 2012-10-05 15:05:40 +02:00
Hiroaki Nakamura
976c8a4387 Add support for condition variables on all platforms 2012-10-05 13:03:55 +02:00
Bert Belder
744dc3e77c windows: make uv_rwlock_init initialize libuv
Without this patch, the fallback implementation would be used if
uv_rwlock_init were to be called before a loop was created or
uv_default_loop() was called.
2012-10-04 01:21:30 +02:00
Artur Adib
fed718c6cb unix: move queue stuff from fs.c to threadpool.c 2012-10-03 23:56:01 +02:00
Shigeki Ohtsu
01337af65d test, windows: fix duplicated windows.h
including windows.h before winsock2.h cause build error
2012-10-03 03:46:49 +02:00
Ben Noordhuis
d796c3b6f4 test: fix windows #include bug
Fixes a "'AF_IPX' : macro redefinition" warning when compiling test/runner.c.
2012-10-03 00:58:04 +02:00
Ben Noordhuis
b88f8b40d6 test: fix uninitialized memory warning, use calloc
Fixes the following valgrind warning:

  ==29019== Syscall param writev(vector[...]) points to uninitialised byte(s)
  ==29019==    at 0x584270B: writev (writev.c:51)
  ==29019==    by 0x449BB2: uv__write (stream.c:733)
  ==29019==    by 0x44AE91: uv_write2 (stream.c:1159)
  ==29019==    by 0x44AF25: uv_write (stream.c:1180)
  ==29019==    by 0x42CCAA: connect_cb (test-tcp-writealot.c:129)
  ==29019==    by 0x44AC05: uv__stream_connect (stream.c:1097)
  ==29019==    by 0x44AA25: uv__stream_io (stream.c:1050)
  ==29019==    by 0x437430: uv__io_rw (core.c:539)
  ==29019==    by 0x43C3D9: ev_invoke_pending (ev.c:2145)
  ==29019==    by 0x436EC5: uv__poll (core.c:260)
  ==29019==    by 0x436F0F: uv__run (core.c:269)
  ==29019==    by 0x436F6E: uv_run (core.c:277)
  ==29019==  Address 0x5f15040 is 0 bytes inside a block of size 94,371,840 alloc'd
  ==29019==    at 0x4C2C5EF: malloc (vg_replace_malloc.c:270)
  ==29019==    by 0x42CDED: run_test_tcp_writealot (test-tcp-writealot.c:148)
  ==29019==    by 0x406551: run_test_part (runner.c:302)
  ==29019==    by 0x405384: main (run-tests.c:57)
2012-10-03 00:23:38 +02:00
Ben Noordhuis
c666b6310d unix: fix uninitialized memory read in uv__read()
This commit fixes the following valgrind warning:

  ==26443== Conditional jump or move depends on uninitialised value(s)
  ==26443==    at 0x44AAFF: uv__read (stream.c:872)
  ==26443==    by 0x44ADD4: uv__stream_io (stream.c:1051)
  ==26443==    by 0x4377B8: uv__io_rw (core.c:539)
  ==26443==    by 0x43C761: ev_invoke_pending (ev.c:2145)
  ==26443==    by 0x43724D: uv__poll (core.c:260)
  ==26443==    by 0x437297: uv__run (core.c:269)
  ==26443==    by 0x4372F6: uv_run (core.c:277)
  ==26443==    by 0x42094B: run_test_pipe_ref4 (test-ref.c:334)
  ==26443==    by 0x406551: run_test_part (runner.c:302)
  ==26443==    by 0x405384: main (run-tests.c:57)
2012-10-03 00:03:01 +02:00
Ben Noordhuis
c6c691f323 test: join worker thread at exit in test-async.c 2012-10-02 23:54:19 +02:00
Ben Noordhuis
5135cfc45b test: fix memory leak in test-getsockname.c 2012-10-02 23:45:27 +02:00
Ben Noordhuis
f89986b153 test: fix memory leaks in test-fs-event.c 2012-10-02 23:19:53 +02:00
Ben Noordhuis
e474a2a420 test: fix memory leak in test-fs.c 2012-10-02 23:10:59 +02:00
Ben Noordhuis
b37a0f5bb3 unix: fix small race in fs.c
Don't return req->result after posting the work request. It's possible (if
unlikely) for a worker thread to process the request before the main thread
reaches the return statement.
2012-10-02 23:06:08 +02:00
Ben Noordhuis
3977d1b36c unix: emulate sendfile if necessary
Some platforms don't support sendfile() (netbsd, openbsd), others don't support
arbitrary file descriptors (freebsd, darwin) and yet others have quirks in their
implementation (sunos).

Work around the quirks. If all else fails, fall back to sendfile() emulation.
2012-10-02 22:50:42 +02:00