uv: Upgrade to v0.10.22
authorTimothy J Fontaine <tjfontaine@gmail.com>
Tue, 7 Jan 2014 22:05:24 +0000 (14:05 -0800)
committerTimothy J Fontaine <tjfontaine@gmail.com>
Tue, 7 Jan 2014 22:05:58 +0000 (14:05 -0800)
deps/uv/ChangeLog
deps/uv/build.mk
deps/uv/checksparse.sh
deps/uv/src/unix/kqueue.c
deps/uv/src/version.c
deps/uv/src/win/pipe.c
deps/uv/test/test-ipc.c
deps/uv/test/test-list.h
deps/uv/test/test-pipe-server-close.c [new file with mode: 0644]
deps/uv/test/test-poll-close.c
deps/uv/uv.gyp

index db3bc80..d55fd00 100644 (file)
@@ -1,4 +1,11 @@
-2013.12.19, Version 0.10.21 (Stable)
+2014.01.08, Version 0.10.22 (Stable)
+
+Changes since version 0.10.21:
+
+* windows: avoid assertion failure when pipe server is closed (Bert Belder)
+
+
+2013.12.19, Version 0.10.21 (Stable), 375ebce068555f0ca8151b562edb5f1b263022db
 
 Changes since version 0.10.20:
 
index 2de7961..5077929 100644 (file)
@@ -98,6 +98,7 @@ TESTS= \
        test/test-ping-pong.o \
        test/test-pipe-bind-error.o \
        test/test-pipe-connect-error.o \
+       test/test-pipe-server-close.o \
        test/test-platform-output.o \
        test/test-poll.o \
        test/test-poll-close.o \
index 43c9441..01fac07 100755 (executable)
@@ -116,6 +116,7 @@ test/test-pass-always.c
 test/test-ping-pong.c
 test/test-pipe-bind-error.c
 test/test-pipe-connect-error.c
+test/test-pipe-server-close.c
 test/test-platform-output.c
 test/test-poll-close.c
 test/test-poll.c
index a80b7d1..dc64203 100644 (file)
@@ -168,11 +168,10 @@ void uv__io_poll(uv_loop_t* loop, int timeout) {
     for (i = 0; i < nfds; i++) {
       ev = events + i;
       fd = ev->ident;
-      w = loop->watchers[fd];
-
       /* Skip invalidated events, see uv__platform_invalidate_fd */
       if (fd == -1)
         continue;
+      w = loop->watchers[fd];
 
       if (w == NULL) {
         /* File descriptor that we've stopped watching, disarm it. */
index 98da565..6786ec7 100644 (file)
@@ -34,7 +34,7 @@
 
 #define UV_VERSION_MAJOR 0
 #define UV_VERSION_MINOR 10
-#define UV_VERSION_PATCH 21
+#define UV_VERSION_PATCH 22
 #define UV_VERSION_IS_RELEASE 1
 
 
index fd7418d..cce1d99 100644 (file)
@@ -1480,6 +1480,13 @@ void uv_process_pipe_accept_req(uv_loop_t* loop, uv_pipe_t* handle,
 
   assert(handle->type == UV_NAMED_PIPE);
 
+  if (handle->flags & UV__HANDLE_CLOSING) {
+    /* The req->pipeHandle should be freed already in uv_pipe_cleanup(). */
+    assert(req->pipeHandle == INVALID_HANDLE_VALUE);
+    DECREASE_PENDING_REQ_COUNT(handle);
+    return;
+  }
+
   if (REQ_SUCCESS(req)) {
     assert(req->pipeHandle != INVALID_HANDLE_VALUE);
     req->next_pending = handle->pending_accepts;
index 40a48b7..ef27cc7 100644 (file)
@@ -439,7 +439,7 @@ static void on_tcp_child_process_read(uv_stream_t* tcp, ssize_t nread, uv_buf_t
       return;
     }
 
-    printf("error recving on tcp connection: %s\n", 
+    printf("error recving on tcp connection: %s\n",
       uv_strerror(uv_last_error(tcp->loop)));
     abort();
   }
index 9273262..11fc498 100644 (file)
@@ -88,6 +88,7 @@ TEST_DECLARE   (pipe_bind_error_inval)
 TEST_DECLARE   (pipe_listen_without_bind)
 TEST_DECLARE   (pipe_connect_bad_name)
 TEST_DECLARE   (pipe_connect_to_file)
+TEST_DECLARE   (pipe_server_close)
 TEST_DECLARE   (connection_fail)
 TEST_DECLARE   (connection_fail_doesnt_auto_close)
 TEST_DECLARE   (shutdown_close_tcp)
@@ -257,6 +258,7 @@ TASK_LIST_START
   TEST_ENTRY  (pipe_connect_bad_name)
   TEST_ENTRY  (pipe_connect_to_file)
 
+  TEST_ENTRY  (pipe_server_close)
   TEST_ENTRY  (tty)
   TEST_ENTRY  (stdio_over_pipes)
   TEST_ENTRY  (ipc_listen_before_write)
diff --git a/deps/uv/test/test-pipe-server-close.c b/deps/uv/test/test-pipe-server-close.c
new file mode 100644 (file)
index 0000000..1dcdfff
--- /dev/null
@@ -0,0 +1,91 @@
+/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include "uv.h"
+#include "task.h"
+
+#include <string.h>
+#include <errno.h>
+
+
+static uv_pipe_t pipe_client;
+static uv_pipe_t pipe_server;
+static uv_connect_t connect_req;
+
+static int pipe_close_cb_called = 0;
+static int pipe_client_connect_cb_called = 0;
+
+
+static void pipe_close_cb(uv_handle_t* handle) {
+  ASSERT(handle == (uv_handle_t*) &pipe_client ||
+         handle == (uv_handle_t*) &pipe_server);
+  pipe_close_cb_called++;
+}
+
+
+static void pipe_client_connect_cb(uv_connect_t* req, int status) {
+  ASSERT(req == &connect_req);
+  ASSERT(status == 0);
+
+  pipe_client_connect_cb_called++;
+
+  uv_close((uv_handle_t*) &pipe_client, pipe_close_cb);
+  uv_close((uv_handle_t*) &pipe_server, pipe_close_cb);
+}
+
+
+static void pipe_server_connection_cb(uv_stream_t* handle, int status) {
+  /* This function *may* be called, depending on whether accept or the
+   * connection callback is called first.
+   */
+  ASSERT(status == 0);
+}
+
+
+TEST_IMPL(pipe_server_close) {
+  uv_loop_t* loop;
+  int r;
+
+  loop = uv_default_loop();
+  ASSERT(loop != NULL);
+
+  r = uv_pipe_init(loop, &pipe_server, 0);
+  ASSERT(r == 0);
+
+  r = uv_pipe_bind(&pipe_server, TEST_PIPENAME);
+  ASSERT(r == 0);
+
+  r = uv_listen((uv_stream_t*) &pipe_server, 0, pipe_server_connection_cb);
+  ASSERT(r == 0);
+
+  r = uv_pipe_init(loop, &pipe_client, 0);
+  ASSERT(r == 0);
+
+  uv_pipe_connect(&connect_req, &pipe_client, TEST_PIPENAME, pipe_client_connect_cb);
+
+  r = uv_run(loop, UV_RUN_DEFAULT);
+  ASSERT(r == 0);
+  ASSERT(pipe_client_connect_cb_called == 1);
+  ASSERT(pipe_close_cb_called == 2);
+
+  MAKE_VALGRIND_HAPPY();
+  return 0;
+}
index 70b775f..2eccddf 100644 (file)
@@ -59,7 +59,7 @@ TEST_IMPL(poll_close) {
     uv_poll_init_socket(uv_default_loop(), &poll_handles[i], sockets[i]);
     uv_poll_start(&poll_handles[i], UV_READABLE | UV_WRITABLE, NULL);
   }
-  
+
   for (i = 0; i < NUM_SOCKETS; i++) {
     uv_close((uv_handle_t*) &poll_handles[i], close_cb);
   }
index 1f3e19a..ea8707b 100644 (file)
         'test/test-ping-pong.c',
         'test/test-pipe-bind-error.c',
         'test/test-pipe-connect-error.c',
+        'test/test-pipe-server-close.c',
         'test/test-platform-output.c',
         'test/test-poll.c',
         'test/test-poll-close.c',