summaryrefslogtreecommitdiff
path: root/deps/uv/src
diff options
context:
space:
mode:
authorSaúl Ibarra Corretgé <saghul@gmail.com>2014-12-09 21:01:35 +0100
committerTrevor Norris <trev.norris@gmail.com>2014-12-09 17:03:50 -0800
commit20a7088d9c62c43fedf9ab077fbbeae92c7e6617 (patch)
treecd62507bde03fff1e59de67338f2b406d2221bdd /deps/uv/src
parent4dc660e164417e0a1bc86eadd825b41d7abb053f (diff)
downloadandroid-node-v8-20a7088d9c62c43fedf9ab077fbbeae92c7e6617.tar.gz
android-node-v8-20a7088d9c62c43fedf9ab077fbbeae92c7e6617.tar.bz2
android-node-v8-20a7088d9c62c43fedf9ab077fbbeae92c7e6617.zip
deps: update libuv to 1.0.2
PR-URL: https://github.com/joyent/node/pull/8847 Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'deps/uv/src')
-rw-r--r--deps/uv/src/unix/aix.c4
-rw-r--r--deps/uv/src/unix/core.c2
-rw-r--r--deps/uv/src/unix/getaddrinfo.c4
-rw-r--r--deps/uv/src/unix/internal.h5
-rw-r--r--deps/uv/src/unix/kqueue.c17
-rw-r--r--deps/uv/src/unix/linux-core.c28
-rw-r--r--deps/uv/src/unix/linux-syscalls.c3
-rw-r--r--deps/uv/src/unix/linux-syscalls.h8
-rw-r--r--deps/uv/src/unix/loop.c12
-rw-r--r--deps/uv/src/unix/pipe.c13
-rw-r--r--deps/uv/src/unix/stream.c24
-rw-r--r--deps/uv/src/unix/sunos.c29
-rw-r--r--deps/uv/src/unix/udp.c3
-rw-r--r--deps/uv/src/uv-common.c14
-rw-r--r--deps/uv/src/uv-common.h3
-rw-r--r--deps/uv/src/win/core.c15
-rw-r--r--deps/uv/src/win/fs.c4
-rw-r--r--deps/uv/src/win/getaddrinfo.c2
-rw-r--r--deps/uv/src/win/poll.c34
-rw-r--r--deps/uv/src/win/process.c6
-rw-r--r--deps/uv/src/win/tcp.c6
-rw-r--r--deps/uv/src/win/thread.c4
-rw-r--r--deps/uv/src/win/udp.c2
-rw-r--r--deps/uv/src/win/util.c4
24 files changed, 167 insertions, 79 deletions
diff --git a/deps/uv/src/unix/aix.c b/deps/uv/src/unix/aix.c
index eb90111345..349c2b558e 100644
--- a/deps/uv/src/unix/aix.c
+++ b/deps/uv/src/unix/aix.c
@@ -151,7 +151,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
* Could maybe mod if we knew for sure no events are removed, but
* content of w->events is handled above as not reliable (falls back)
* so may require a pollset_query() which would have to be pretty cheap
- * compared to a PS_DELETE to be worth optimising. Alternatively, could
+ * compared to a PS_DELETE to be worth optimizing. Alternatively, could
* lazily remove events, squelching them in the mean time. */
pc.cmd = PS_DELETE;
if (pollset_ctl(loop->backend_fd, &pc, 1)) {
@@ -332,7 +332,7 @@ int uv_exepath(char* buffer, size_t* size) {
res = readlink(symlink, temp_buffer, PATH_MAX-1);
/* if readlink fails, it is a normal file just copy symlink to the
- * outbut buffer.
+ * output buffer.
*/
if (res < 0) {
assert(*size > strlen(symlink));
diff --git a/deps/uv/src/unix/core.c b/deps/uv/src/unix/core.c
index e6a076831c..c08040e537 100644
--- a/deps/uv/src/unix/core.c
+++ b/deps/uv/src/unix/core.c
@@ -325,7 +325,7 @@ int uv_run(uv_loop_t* loop, uv_run_mode mode) {
uv__run_closing_handles(loop);
if (mode == UV_RUN_ONCE) {
- /* UV_RUN_ONCE implies forward progess: at least one callback must have
+ /* UV_RUN_ONCE implies forward progress: at least one callback must have
* been invoked when it returns. uv__io_poll() can return without doing
* I/O (meaning: no callbacks) when its timeout expires - which means we
* have pending timers that satisfy the forward progress constraint.
diff --git a/deps/uv/src/unix/getaddrinfo.c b/deps/uv/src/unix/getaddrinfo.c
index f6c2de9b43..faf9add928 100644
--- a/deps/uv/src/unix/getaddrinfo.c
+++ b/deps/uv/src/unix/getaddrinfo.c
@@ -182,10 +182,8 @@ int uv_getaddrinfo(uv_loop_t* loop,
len += service_len;
}
- if (hostname) {
+ if (hostname)
req->hostname = memcpy(buf + len, hostname, hostname_len);
- len += hostname_len;
- }
uv__work_submit(loop,
&req->work_req,
diff --git a/deps/uv/src/unix/internal.h b/deps/uv/src/unix/internal.h
index b94508cba5..daad61b782 100644
--- a/deps/uv/src/unix/internal.h
+++ b/deps/uv/src/unix/internal.h
@@ -146,6 +146,11 @@ enum {
UV_HANDLE_IPV6 = 0x10000 /* Handle is bound to a IPv6 socket. */
};
+/* loop flags */
+enum {
+ UV_LOOP_BLOCK_SIGPROF = 1
+};
+
typedef enum {
UV_CLOCK_PRECISE = 0, /* Use the highest resolution clock available. */
UV_CLOCK_FAST = 1 /* Use the fastest clock with <= 1ms granularity. */
diff --git a/deps/uv/src/unix/kqueue.c b/deps/uv/src/unix/kqueue.c
index b4f9f5d840..aaadcd8419 100644
--- a/deps/uv/src/unix/kqueue.c
+++ b/deps/uv/src/unix/kqueue.c
@@ -55,9 +55,11 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
unsigned int nevents;
unsigned int revents;
QUEUE* q;
+ uv__io_t* w;
+ sigset_t* pset;
+ sigset_t set;
uint64_t base;
uint64_t diff;
- uv__io_t* w;
int filter;
int fflags;
int count;
@@ -117,6 +119,13 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
w->events = w->pevents;
}
+ pset = NULL;
+ if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
+ pset = &set;
+ sigemptyset(pset);
+ sigaddset(pset, SIGPROF);
+ }
+
assert(timeout >= -1);
base = loop->time;
count = 48; /* Benchmarks suggest this gives the best throughput. */
@@ -127,6 +136,9 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
spec.tv_nsec = (timeout % 1000) * 1000000;
}
+ if (pset != NULL)
+ pthread_sigmask(SIG_BLOCK, pset, NULL);
+
nfds = kevent(loop->backend_fd,
events,
nevents,
@@ -134,6 +146,9 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
ARRAY_SIZE(events),
timeout == -1 ? NULL : &spec);
+ if (pset != NULL)
+ pthread_sigmask(SIG_UNBLOCK, pset, NULL);
+
/* Update loop->time unconditionally. It's tempting to skip the update when
* timeout == 0 (i.e. non-blocking poll) but there is no guarantee that the
* operating system didn't reschedule our process while in the syscall.
diff --git a/deps/uv/src/unix/linux-core.c b/deps/uv/src/unix/linux-core.c
index 7a43630494..a2145b0f36 100644
--- a/deps/uv/src/unix/linux-core.c
+++ b/deps/uv/src/unix/linux-core.c
@@ -33,6 +33,7 @@
#include <sys/prctl.h>
#include <sys/sysinfo.h>
#include <unistd.h>
+#include <signal.h>
#include <fcntl.h>
#include <time.h>
@@ -141,6 +142,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
struct uv__epoll_event e;
QUEUE* q;
uv__io_t* w;
+ sigset_t* pset;
+ sigset_t set;
uint64_t base;
uint64_t diff;
int nevents;
@@ -191,12 +194,25 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
w->events = w->pevents;
}
+ pset = NULL;
+ if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
+ pset = &set;
+ sigemptyset(pset);
+ sigaddset(pset, SIGPROF);
+ }
+
assert(timeout >= -1);
base = loop->time;
count = 48; /* Benchmarks suggest this gives the best throughput. */
for (;;) {
- if (!no_epoll_wait) {
+ if (no_epoll_wait || pset != NULL) {
+ nfds = uv__epoll_pwait(loop->backend_fd,
+ events,
+ ARRAY_SIZE(events),
+ timeout,
+ pset);
+ } else {
nfds = uv__epoll_wait(loop->backend_fd,
events,
ARRAY_SIZE(events),
@@ -205,12 +221,6 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
no_epoll_wait = 1;
continue;
}
- } else {
- nfds = uv__epoll_pwait(loop->backend_fd,
- events,
- ARRAY_SIZE(events),
- timeout,
- NULL);
}
/* Update loop->time unconditionally. It's tempting to skip the update when
@@ -744,6 +754,7 @@ int uv_interface_addresses(uv_interface_address_t** addresses,
return -errno;
*count = 0;
+ *addresses = NULL;
/* Count the number of interfaces */
for (ent = addrs; ent != NULL; ent = ent->ifa_next) {
@@ -756,6 +767,9 @@ int uv_interface_addresses(uv_interface_address_t** addresses,
(*count)++;
}
+ if (*count == 0)
+ return 0;
+
*addresses = malloc(*count * sizeof(**addresses));
if (!(*addresses))
return -ENOMEM;
diff --git a/deps/uv/src/unix/linux-syscalls.c b/deps/uv/src/unix/linux-syscalls.c
index 1ff8abd197..e036fad5ef 100644
--- a/deps/uv/src/unix/linux-syscalls.c
+++ b/deps/uv/src/unix/linux-syscalls.c
@@ -21,6 +21,7 @@
#include "linux-syscalls.h"
#include <unistd.h>
+#include <signal.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <errno.h>
@@ -328,7 +329,7 @@ int uv__epoll_pwait(int epfd,
nevents,
timeout,
sigmask,
- sizeof(*sigmask));
+ _NSIG / 8);
#else
return errno = ENOSYS, -1;
#endif
diff --git a/deps/uv/src/unix/linux-syscalls.h b/deps/uv/src/unix/linux-syscalls.h
index 0f0b34b1ed..fd6bb48665 100644
--- a/deps/uv/src/unix/linux-syscalls.h
+++ b/deps/uv/src/unix/linux-syscalls.h
@@ -44,7 +44,7 @@
#if defined(__alpha__)
# define UV__O_NONBLOCK 0x4
#elif defined(__hppa__)
-# define UV__O_NONBLOCK 0x10004
+# define UV__O_NONBLOCK O_NONBLOCK
#elif defined(__mips__)
# define UV__O_NONBLOCK 0x80
#elif defined(__sparc__)
@@ -60,7 +60,11 @@
#define UV__IN_NONBLOCK UV__O_NONBLOCK
#define UV__SOCK_CLOEXEC UV__O_CLOEXEC
-#define UV__SOCK_NONBLOCK UV__O_NONBLOCK
+#if defined(SOCK_NONBLOCK)
+# define UV__SOCK_NONBLOCK SOCK_NONBLOCK
+#else
+# define UV__SOCK_NONBLOCK UV__O_NONBLOCK
+#endif
/* epoll flags */
#define UV__EPOLL_CLOEXEC UV__O_CLOEXEC
diff --git a/deps/uv/src/unix/loop.c b/deps/uv/src/unix/loop.c
index 002224855c..616cf5bc43 100644
--- a/deps/uv/src/unix/loop.c
+++ b/deps/uv/src/unix/loop.c
@@ -192,3 +192,15 @@ static void uv__loop_close(uv_loop_t* loop) {
loop->watchers = NULL;
loop->nwatchers = 0;
}
+
+
+int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
+ if (option != UV_LOOP_BLOCK_SIGNAL)
+ return UV_ENOSYS;
+
+ if (va_arg(ap, int) != SIGPROF)
+ return UV_EINVAL;
+
+ loop->flags |= UV_LOOP_BLOCK_SIGPROF;
+ return 0;
+}
diff --git a/deps/uv/src/unix/pipe.c b/deps/uv/src/unix/pipe.c
index a26c3dbc13..b20fb9210c 100644
--- a/deps/uv/src/unix/pipe.c
+++ b/deps/uv/src/unix/pipe.c
@@ -44,13 +44,10 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
struct sockaddr_un saddr;
const char* pipe_fname;
int sockfd;
- int bound;
int err;
pipe_fname = NULL;
sockfd = -1;
- bound = 0;
- err = -EINVAL;
/* Already bound? */
if (uv__stream_fd(handle) >= 0)
@@ -83,7 +80,6 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
err = -EACCES;
goto out;
}
- bound = 1;
/* Success. */
handle->pipe_fname = pipe_fname; /* Is a strdup'ed copy. */
@@ -91,11 +87,9 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
return 0;
out:
- if (bound) {
- /* unlink() before uv__close() to avoid races. */
- assert(pipe_fname != NULL);
- unlink(pipe_fname);
- }
+ /* unlink() before uv__close() to avoid races. */
+ assert(pipe_fname != NULL);
+ unlink(pipe_fname);
uv__close(sockfd);
free((void*)pipe_fname);
return err;
@@ -158,7 +152,6 @@ void uv_pipe_connect(uv_connect_t* req,
int r;
new_sock = (uv__stream_fd(handle) == -1);
- err = -EINVAL;
if (new_sock) {
err = uv__socket(AF_UNIX, SOCK_STREAM, 0);
diff --git a/deps/uv/src/unix/stream.c b/deps/uv/src/unix/stream.c
index 9c7d28cbf4..d41a3429a7 100644
--- a/deps/uv/src/unix/stream.c
+++ b/deps/uv/src/unix/stream.c
@@ -549,7 +549,6 @@ int uv_accept(uv_stream_t* server, uv_stream_t* client) {
if (server->accepted_fd == -1)
return -EAGAIN;
- err = 0;
switch (client->type) {
case UV_NAMED_PIPE:
case UV_TCP:
@@ -951,6 +950,7 @@ static void uv__stream_eof(uv_stream_t* stream, const uv_buf_t* buf) {
uv__handle_stop(stream);
uv__stream_osx_interrupt_select(stream);
stream->read_cb(stream, UV_EOF, buf);
+ stream->flags &= ~UV_STREAM_READING;
}
@@ -1117,8 +1117,13 @@ static void uv__read(uv_stream_t* stream) {
} else {
/* Error. User should call uv_close(). */
stream->read_cb(stream, -errno, &buf);
- assert(!uv__io_active(&stream->io_watcher, UV__POLLIN) &&
- "stream->read_cb(status=-1) did not call uv_close()");
+ if (stream->flags & UV_STREAM_READING) {
+ stream->flags &= ~UV_STREAM_READING;
+ uv__io_stop(stream->loop, &stream->io_watcher, UV__POLLIN);
+ if (!uv__io_active(&stream->io_watcher, UV__POLLOUT))
+ uv__handle_stop(stream);
+ uv__stream_osx_interrupt_select(stream);
+ }
}
return;
} else if (nread == 0) {
@@ -1319,7 +1324,7 @@ int uv_write2(uv_write_t* req,
/* It's legal for write_queue_size > 0 even when the write_queue is empty;
* it means there are error-state requests in the write_completed_queue that
* will touch up write_queue_size later, see also uv__write_req_finish().
- * We chould check that write_queue is empty instead but that implies making
+ * We could check that write_queue is empty instead but that implies making
* a write() syscall when we know that the handle is in error mode.
*/
empty_queue = (stream->write_queue_size == 0);
@@ -1471,15 +1476,8 @@ int uv_read_start(uv_stream_t* stream,
int uv_read_stop(uv_stream_t* stream) {
- /* Sanity check. We're going to stop the handle unless it's primed for
- * writing but that means there should be some kind of write action in
- * progress.
- */
- assert(!uv__io_active(&stream->io_watcher, UV__POLLOUT) ||
- !QUEUE_EMPTY(&stream->write_completed_queue) ||
- !QUEUE_EMPTY(&stream->write_queue) ||
- stream->shutdown_req != NULL ||
- stream->connect_req != NULL);
+ if (!(stream->flags & UV_STREAM_READING))
+ return 0;
stream->flags &= ~UV_STREAM_READING;
uv__io_stop(stream->loop, &stream->io_watcher, UV__POLLIN);
diff --git a/deps/uv/src/unix/sunos.c b/deps/uv/src/unix/sunos.c
index a630dba759..d6fb7f4950 100644
--- a/deps/uv/src/unix/sunos.c
+++ b/deps/uv/src/unix/sunos.c
@@ -122,6 +122,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
struct timespec spec;
QUEUE* q;
uv__io_t* w;
+ sigset_t* pset;
+ sigset_t set;
uint64_t base;
uint64_t diff;
unsigned int nfds;
@@ -129,6 +131,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
int saved_errno;
int nevents;
int count;
+ int err;
int fd;
if (loop->nfds == 0) {
@@ -150,6 +153,13 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
w->events = w->pevents;
}
+ pset = NULL;
+ if (loop->flags & UV_LOOP_BLOCK_SIGPROF) {
+ pset = &set;
+ sigemptyset(pset);
+ sigaddset(pset, SIGPROF);
+ }
+
assert(timeout >= -1);
base = loop->time;
count = 48; /* Benchmarks suggest this gives the best throughput. */
@@ -165,11 +175,20 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
nfds = 1;
saved_errno = 0;
- if (port_getn(loop->backend_fd,
- events,
- ARRAY_SIZE(events),
- &nfds,
- timeout == -1 ? NULL : &spec)) {
+
+ if (pset != NULL)
+ pthread_sigmask(SIG_BLOCK, pset, NULL);
+
+ err = port_getn(loop->backend_fd,
+ events,
+ ARRAY_SIZE(events),
+ &nfds,
+ timeout == -1 ? NULL : &spec);
+
+ if (pset != NULL)
+ pthread_sigmask(SIG_UNBLOCK, pset, NULL);
+
+ if (err) {
/* Work around another kernel bug: port_getn() may return events even
* on error.
*/
diff --git a/deps/uv/src/unix/udp.c b/deps/uv/src/unix/udp.c
index 7cafea1d08..71a0e41f1f 100644
--- a/deps/uv/src/unix/udp.c
+++ b/deps/uv/src/unix/udp.c
@@ -278,9 +278,6 @@ int uv__udp_bind(uv_udp_t* handle,
int yes;
int fd;
- err = -EINVAL;
- fd = -1;
-
/* Check for bad flags. */
if (flags & ~(UV_UDP_IPV6ONLY | UV_UDP_REUSEADDR))
return -EINVAL;
diff --git a/deps/uv/src/uv-common.c b/deps/uv/src/uv-common.c
index 5ba1ea4df4..f84f8c4ae1 100644
--- a/deps/uv/src/uv-common.c
+++ b/deps/uv/src/uv-common.c
@@ -24,6 +24,7 @@
#include <stdio.h>
#include <assert.h>
+#include <stdarg.h>
#include <stddef.h> /* NULL */
#include <stdlib.h> /* malloc */
#include <string.h> /* memset */
@@ -442,3 +443,16 @@ int uv_fs_scandir_next(uv_fs_t* req, uv_dirent_t* ent) {
return 0;
}
+
+
+int uv_loop_configure(uv_loop_t* loop, uv_loop_option option, ...) {
+ va_list ap;
+ int err;
+
+ va_start(ap, option);
+ /* Any platform-agnostic options should be handled here. */
+ err = uv__loop_configure(loop, option, ap);
+ va_end(ap);
+
+ return err;
+}
diff --git a/deps/uv/src/uv-common.h b/deps/uv/src/uv-common.h
index e06606c19b..7d3c58f121 100644
--- a/deps/uv/src/uv-common.h
+++ b/deps/uv/src/uv-common.h
@@ -28,6 +28,7 @@
#define UV_COMMON_H_
#include <assert.h>
+#include <stdarg.h>
#include <stddef.h>
#if defined(_MSC_VER) && _MSC_VER < 1600
@@ -59,6 +60,8 @@ enum {
# define UV__HANDLE_CLOSING 0x01
#endif
+int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap);
+
int uv__tcp_bind(uv_tcp_t* tcp,
const struct sockaddr* addr,
unsigned int addrlen,
diff --git a/deps/uv/src/win/core.c b/deps/uv/src/win/core.c
index c9e4c88fa7..48897cf29b 100644
--- a/deps/uv/src/win/core.c
+++ b/deps/uv/src/win/core.c
@@ -39,7 +39,7 @@
static uv_loop_t default_loop_struct;
static uv_loop_t* default_loop_ptr;
-/* uv_once intialization guards */
+/* uv_once initialization guards */
static uv_once_t uv_init_guard_ = UV_ONCE_INIT;
@@ -103,7 +103,7 @@ static void uv_init(void) {
#endif
/* Fetch winapi function pointers. This must be done first because other
- * intialization code might need these function pointers to be loaded.
+ * initialization code might need these function pointers to be loaded.
*/
uv_winapi_init();
@@ -133,7 +133,7 @@ int uv_loop_init(uv_loop_t* loop) {
if (loop->iocp == NULL)
return uv_translate_sys_error(GetLastError());
- /* To prevent uninitialized memory access, loop->time must be intialized
+ /* To prevent uninitialized memory access, loop->time must be initialized
* to zero before calling uv_update_time for the first time.
*/
loop->time = 0;
@@ -199,7 +199,7 @@ uv_loop_t* uv_default_loop(void) {
static void uv__loop_close(uv_loop_t* loop) {
size_t i;
- /* close the async handle without needeing an extra loop iteration */
+ /* close the async handle without needing an extra loop iteration */
assert(!loop->wq_async.async_sent);
loop->wq_async.close_cb = NULL;
uv__handle_closing(&loop->wq_async);
@@ -272,6 +272,11 @@ void uv_loop_delete(uv_loop_t* loop) {
}
+int uv__loop_configure(uv_loop_t* loop, uv_loop_option option, va_list ap) {
+ return UV_ENOSYS;
+}
+
+
int uv_backend_fd(const uv_loop_t* loop) {
return -1;
}
@@ -411,7 +416,7 @@ int uv_run(uv_loop_t *loop, uv_run_mode mode) {
uv_process_endgames(loop);
if (mode == UV_RUN_ONCE) {
- /* UV_RUN_ONCE implies forward progess: at least one callback must have
+ /* UV_RUN_ONCE implies forward progress: at least one callback must have
* been invoked when it returns. uv__io_poll() can return without doing
* I/O (meaning: no callbacks) when its timeout expires - which means we
* have pending timers that satisfy the forward progress constraint.
diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c
index 7208a65c42..30a457a023 100644
--- a/deps/uv/src/win/fs.c
+++ b/deps/uv/src/win/fs.c
@@ -947,7 +947,7 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf) {
*
* Currently it's based on whether the 'readonly' attribute is set, which
* makes little sense because the semantics are so different: the 'read-only'
- * flag is just a way for a user to protect against accidental deleteion, and
+ * flag is just a way for a user to protect against accidental deletion, and
* serves no security purpose. Windows uses ACLs for that.
*
* Also people now use uv_fs_chmod() to take away the writable bit for good
@@ -956,7 +956,7 @@ INLINE static int fs__stat_handle(HANDLE handle, uv_stat_t* statbuf) {
* deleted.
*
* IOW it's all just a clusterfuck and we should think of something that
- * makes slighty more sense.
+ * makes slightly more sense.
*
* And uv_fs_chmod should probably just fail on windows or be a total no-op.
* There's nothing sensible it can do anyway.
diff --git a/deps/uv/src/win/getaddrinfo.c b/deps/uv/src/win/getaddrinfo.c
index 787cfd5366..53a6084efe 100644
--- a/deps/uv/src/win/getaddrinfo.c
+++ b/deps/uv/src/win/getaddrinfo.c
@@ -296,7 +296,7 @@ int uv_getaddrinfo(uv_loop_t* loop,
req->alloc = (void*)alloc_ptr;
/* convert node string to UTF16 into allocated memory and save pointer in */
- /* the reques. */
+ /* the request. */
if (node != NULL) {
req->node = (WCHAR*)alloc_ptr;
if (uv_utf8_to_utf16(node,
diff --git a/deps/uv/src/win/poll.c b/deps/uv/src/win/poll.c
index 85c314828b..622cbabe39 100644
--- a/deps/uv/src/win/poll.c
+++ b/deps/uv/src/win/poll.c
@@ -79,7 +79,7 @@ static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) {
handle->mask_events_2 = handle->events;
} else if (handle->submitted_events_2 == 0) {
req = &handle->poll_req_2;
- afd_poll_info = &handle->afd_poll_info_2;
+ afd_poll_info = &handle->afd_poll_info_2.afd_poll_info_ptr[0];
handle->submitted_events_2 = handle->events;
handle->mask_events_1 = handle->events;
handle->mask_events_2 = 0;
@@ -119,18 +119,19 @@ static void uv__fast_poll_submit_poll_req(uv_loop_t* loop, uv_poll_t* handle) {
static int uv__fast_poll_cancel_poll_req(uv_loop_t* loop, uv_poll_t* handle) {
- AFD_POLL_INFO afd_poll_info;
- int result;
+ AFD_POLL_INFO* afd_poll_info;
+ DWORD result;
- afd_poll_info.Exclusive = TRUE;
- afd_poll_info.NumberOfHandles = 1;
- afd_poll_info.Timeout.QuadPart = INT64_MAX;
- afd_poll_info.Handles[0].Handle = (HANDLE) handle->socket;
- afd_poll_info.Handles[0].Status = 0;
- afd_poll_info.Handles[0].Events = AFD_POLL_ALL;
+ afd_poll_info = &handle->afd_poll_info_2.afd_poll_info_ptr[1];
+ afd_poll_info->Exclusive = TRUE;
+ afd_poll_info->NumberOfHandles = 1;
+ afd_poll_info->Timeout.QuadPart = INT64_MAX;
+ afd_poll_info->Handles[0].Handle = (HANDLE) handle->socket;
+ afd_poll_info->Handles[0].Status = 0;
+ afd_poll_info->Handles[0].Events = AFD_POLL_ALL;
result = uv_msafd_poll(handle->socket,
- &afd_poll_info,
+ afd_poll_info,
uv__get_overlapped_dummy());
if (result == SOCKET_ERROR) {
@@ -154,7 +155,7 @@ static void uv__fast_poll_process_poll_req(uv_loop_t* loop, uv_poll_t* handle,
handle->submitted_events_1 = 0;
mask_events = handle->mask_events_1;
} else if (req == &handle->poll_req_2) {
- afd_poll_info = &handle->afd_poll_info_2;
+ afd_poll_info = &handle->afd_poll_info_2.afd_poll_info_ptr[0];
handle->submitted_events_2 = 0;
mask_events = handle->mask_events_2;
} else {
@@ -546,7 +547,7 @@ int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle,
handle->flags |= UV_HANDLE_POLL_SLOW;
}
- /* Intialize 2 poll reqs. */
+ /* Initialize 2 poll reqs. */
handle->submitted_events_1 = 0;
uv_req_init(loop, (uv_req_t*) &(handle->poll_req_1));
handle->poll_req_1.type = UV_POLL_REQ;
@@ -557,6 +558,11 @@ int uv_poll_init_socket(uv_loop_t* loop, uv_poll_t* handle,
handle->poll_req_2.type = UV_POLL_REQ;
handle->poll_req_2.data = handle;
+ handle->afd_poll_info_2.afd_poll_info_ptr = malloc(sizeof(*handle->afd_poll_info_2.afd_poll_info_ptr) * 2);
+ if (handle->afd_poll_info_2.afd_poll_info_ptr == NULL) {
+ return UV_ENOMEM;
+ }
+
return 0;
}
@@ -618,5 +624,9 @@ void uv_poll_endgame(uv_loop_t* loop, uv_poll_t* handle) {
assert(handle->submitted_events_1 == 0);
assert(handle->submitted_events_2 == 0);
+ if (handle->afd_poll_info_2.afd_poll_info_ptr) {
+ free(handle->afd_poll_info_2.afd_poll_info_ptr);
+ handle->afd_poll_info_2.afd_poll_info_ptr = NULL;
+ }
uv__handle_close(handle);
}
diff --git a/deps/uv/src/win/process.c b/deps/uv/src/win/process.c
index 4d04a0e906..3a0106f82d 100644
--- a/deps/uv/src/win/process.c
+++ b/deps/uv/src/win/process.c
@@ -1063,7 +1063,7 @@ int uv_spawn(uv_loop_t* loop,
if (options->flags & UV_PROCESS_DETACHED) {
/* Note that we're not setting the CREATE_BREAKAWAY_FROM_JOB flag. That
- * means that libuv might not let you create a fully deamonized process
+ * means that libuv might not let you create a fully daemonized process
* when run under job control. However the type of job control that libuv
* itself creates doesn't trickle down to subprocesses so they can still
* daemonize.
@@ -1141,7 +1141,7 @@ int uv_spawn(uv_loop_t* loop,
assert(!err);
/* Make the handle active. It will remain active until the exit callback */
- /* iis made or the handle is closed, whichever happens first. */
+ /* is made or the handle is closed, whichever happens first. */
uv__handle_start(process);
/* Cleanup, whether we succeeded or failed. */
@@ -1177,7 +1177,7 @@ static int uv__kill(HANDLE process_handle, int signum) {
return 0;
/* If the process already exited before TerminateProcess was called, */
- /* TerminateProcess will fail with ERROR_ACESS_DENIED. */
+ /* TerminateProcess will fail with ERROR_ACCESS_DENIED. */
err = GetLastError();
if (err == ERROR_ACCESS_DENIED &&
GetExitCodeProcess(process_handle, &status) &&
diff --git a/deps/uv/src/win/tcp.c b/deps/uv/src/win/tcp.c
index 23fadc220d..cff2929e4c 100644
--- a/deps/uv/src/win/tcp.c
+++ b/deps/uv/src/win/tcp.c
@@ -241,7 +241,7 @@ void uv_tcp_endgame(uv_loop_t* loop, uv_tcp_t* handle) {
* allow binding to addresses that are in use by sockets in TIME_WAIT, it
* effectively allows 'stealing' a port which is in use by another application.
*
- * SO_EXCLUSIVEADDRUSE is also not good here because it does cehck all sockets,
+ * SO_EXCLUSIVEADDRUSE is also not good here because it does check all sockets,
* regardless of state, so we'd get an error even if the port is in use by a
* socket in TIME_WAIT state.
*
@@ -590,7 +590,7 @@ int uv_tcp_listen(uv_tcp_t* handle, int backlog, uv_connection_cb cb) {
}
/* Initialize other unused requests too, because uv_tcp_endgame */
- /* doesn't know how how many requests were intialized, so it will */
+ /* doesn't know how how many requests were initialized, so it will */
/* try to clean up {uv_simultaneous_server_accepts} requests. */
for (i = simultaneous_accepts; i < uv_simultaneous_server_accepts; i++) {
req = &handle->accept_reqs[i];
@@ -1342,7 +1342,7 @@ void uv_tcp_close(uv_loop_t* loop, uv_tcp_t* tcp) {
if (uv_tcp_try_cancel_io(tcp) != 0) {
/* When cancellation is not possible, there is another option: we can */
/* close the incoming sockets, which will also cancel the accept */
- /* operations. However this is not cool because we might inadvertedly */
+ /* operations. However this is not cool because we might inadvertently */
/* close a socket that just accepted a new connection, which will */
/* cause the connection to be aborted. */
unsigned int i;
diff --git a/deps/uv/src/win/thread.c b/deps/uv/src/win/thread.c
index 7143743926..a697d7ae74 100644
--- a/deps/uv/src/win/thread.c
+++ b/deps/uv/src/win/thread.c
@@ -100,7 +100,7 @@ static NOINLINE void uv__once_inner(uv_once_t* guard,
} else {
/* We lost the race. Destroy the event we created and wait for the */
- /* existing one todv become signaled. */
+ /* existing one to become signaled. */
CloseHandle(created_event);
result = WaitForSingleObject(existing_event, INFINITE);
assert(result == WAIT_OBJECT_0);
@@ -155,7 +155,7 @@ int uv_thread_create(uv_thread_t *tid, void (*entry)(void *arg), void *arg) {
ctx->arg = arg;
/* Create the thread in suspended state so we have a chance to pass
- * its own creation handle to it */
+ * its own creation handle to it */
thread = (HANDLE) _beginthreadex(NULL,
0,
uv__thread_start,
diff --git a/deps/uv/src/win/udp.c b/deps/uv/src/win/udp.c
index 99fd80fce9..73b5bd5e46 100644
--- a/deps/uv/src/win/udp.c
+++ b/deps/uv/src/win/udp.c
@@ -83,7 +83,7 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle, SOCKET socket,
}
if (pSetFileCompletionNotificationModes) {
- /* All know windowses that support SetFileCompletionNotificationModes */
+ /* All known Windows that support SetFileCompletionNotificationModes */
/* have a bug that makes it impossible to use this function in */
/* conjunction with datagram sockets. We can work around that but only */
/* if the user is using the default UDP driver (AFD) and has no other */
diff --git a/deps/uv/src/win/util.c b/deps/uv/src/win/util.c
index 0bcb721a52..43d843ff5c 100644
--- a/deps/uv/src/win/util.c
+++ b/deps/uv/src/win/util.c
@@ -44,7 +44,7 @@
* of the console title is that it is smaller than 64K. However in practice
* it is much smaller, and there is no way to figure out what the exact length
* of the title is or can be, at least not on XP. To make it even more
- * annoying, GetConsoleTitle failes when the buffer to be read into is bigger
+ * annoying, GetConsoleTitle fails when the buffer to be read into is bigger
* than the actual maximum length. So we make a conservative guess here;
* just don't put the novel you're writing in the title, unless the plot
* survives truncation.
@@ -64,7 +64,7 @@ static double hrtime_interval_ = 0;
/*
- * One-time intialization code for functionality defined in util.c.
+ * One-time initialization code for functionality defined in util.c.
*/
void uv__util_init() {
LARGE_INTEGER perf_frequency;