uv: upgrade to 9bd8bd7
authorBen Noordhuis <info@bnoordhuis.nl>
Mon, 12 Sep 2011 21:45:00 +0000 (23:45 +0200)
committerBen Noordhuis <info@bnoordhuis.nl>
Mon, 12 Sep 2011 21:46:39 +0000 (23:46 +0200)
41 files changed:
deps/uv/include/uv.h
deps/uv/src/unix/core.c
deps/uv/src/unix/pipe.c
deps/uv/src/win/core.c
deps/uv/src/win/internal.h
deps/uv/src/win/timer.c
deps/uv/test/benchmark-ares.c
deps/uv/test/benchmark-getaddrinfo.c
deps/uv/test/benchmark-ping-pongs.c
deps/uv/test/benchmark-pound.c
deps/uv/test/benchmark-pump.c
deps/uv/test/benchmark-spawn.c
deps/uv/test/benchmark-udp-packet-storm.c
deps/uv/test/dns-server.c
deps/uv/test/echo-server.c
deps/uv/test/test-async.c
deps/uv/test/test-callback-stack.c
deps/uv/test/test-connection-fail.c
deps/uv/test/test-delayed-accept.c
deps/uv/test/test-fs.c
deps/uv/test/test-getaddrinfo.c
deps/uv/test/test-gethostbyname.c
deps/uv/test/test-getsockname.c
deps/uv/test/test-idle.c
deps/uv/test/test-loop-handles.c
deps/uv/test/test-ping-pong.c
deps/uv/test/test-pipe-bind-error.c
deps/uv/test/test-ref.c
deps/uv/test/test-shutdown-eof.c
deps/uv/test/test-spawn.c
deps/uv/test/test-tcp-bind-error.c
deps/uv/test/test-tcp-bind6-error.c
deps/uv/test/test-tcp-writealot.c
deps/uv/test/test-threadpool.c
deps/uv/test/test-timer-again.c
deps/uv/test/test-timer.c
deps/uv/test/test-udp-dgram-too-big.c
deps/uv/test/test-udp-ipv6.c
deps/uv/test/test-udp-send-and-recv.c
deps/uv/uv.gyp
src/node.cc

index e42509e..58678c5 100644 (file)
@@ -81,11 +81,10 @@ typedef struct uv_work_s uv_work_t;
  * All callbacks in libuv are made asynchronously. That is they are never
  * made by the function that takes them as a parameter.
  */
-void uv_init();
 uv_loop_t* uv_loop_new();
-
 void uv_loop_delete(uv_loop_t*);
 
+
 /*
  * Returns the default loop.
  */
index 57306ac..fec2567 100644 (file)
@@ -65,17 +65,6 @@ static void uv__finish_close(uv_handle_t* handle);
 #endif
 
 
-void uv_init() {
-  default_loop_ptr = &default_loop_struct;
-#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
-  default_loop_struct.ev = ev_default_loop(EVBACKEND_KQUEUE);
-#else
-  default_loop_struct.ev = ev_default_loop(EVFLAG_AUTO);
-#endif
-  ev_set_userdata(default_loop_struct.ev, default_loop_ptr);
-}
-
-
 void uv_close(uv_handle_t* handle, uv_close_cb close_cb) {
   uv_udp_t* udp;
   uv_async_t* async;
@@ -176,6 +165,15 @@ void uv_loop_delete(uv_loop_t* loop) {
 
 
 uv_loop_t* uv_default_loop() {
+  if (!default_loop_ptr) {
+    default_loop_ptr = &default_loop_struct;
+#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
+    default_loop_struct.ev = ev_default_loop(EVBACKEND_KQUEUE);
+#else
+    default_loop_struct.ev = ev_default_loop(EVFLAG_AUTO);
+#endif
+    ev_set_userdata(default_loop_struct.ev, default_loop_ptr);
+  }
   assert(default_loop_ptr->ev == EV_DEFAULT_UC);
   return default_loop_ptr;
 }
index fb420dd..d4e0889 100644 (file)
@@ -38,7 +38,7 @@ int uv_pipe_init(uv_loop_t* loop, uv_pipe_t* handle) {
 
 
 int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
-  struct sockaddr_un sun;
+  struct sockaddr_un saddr;
   const char* pipe_fname;
   int saved_errno;
   int sockfd;
@@ -71,11 +71,11 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
     goto out;
   }
 
-  memset(&sun, 0, sizeof sun);
-  uv__strlcpy(sun.sun_path, pipe_fname, sizeof(sun.sun_path));
-  sun.sun_family = AF_UNIX;
+  memset(&saddr, 0, sizeof saddr);
+  uv__strlcpy(saddr.sun_path, pipe_fname, sizeof(saddr.sun_path));
+  saddr.sun_family = AF_UNIX;
 
-  if (bind(sockfd, (struct sockaddr*)&sun, sizeof sun) == -1) {
+  if (bind(sockfd, (struct sockaddr*)&saddr, sizeof saddr) == -1) {
     /* On EADDRINUSE:
      *
      * We hold the file lock so there is no other process listening
@@ -86,7 +86,7 @@ int uv_pipe_bind(uv_pipe_t* handle, const char* name) {
      */
     if (errno != EADDRINUSE
         || unlink(pipe_fname) == -1
-        || bind(sockfd, (struct sockaddr*)&sun, sizeof sun) == -1) {
+        || bind(sockfd, (struct sockaddr*)&saddr, sizeof saddr) == -1) {
       /* Convert ENOENT to EACCES for compatibility with Windows. */
       uv_err_new(handle->loop, (errno == ENOENT) ? EACCES : errno);
       goto out;
@@ -174,7 +174,7 @@ int uv_pipe_connect(uv_connect_t* req,
                     uv_pipe_t* handle,
                     const char* name,
                     uv_connect_cb cb) {
-  struct sockaddr_un sun;
+  struct sockaddr_un saddr;
   int saved_errno;
   int sockfd;
   int status;
@@ -189,15 +189,15 @@ int uv_pipe_connect(uv_connect_t* req,
     goto out;
   }
 
-  memset(&sun, 0, sizeof sun);
-  uv__strlcpy(sun.sun_path, name, sizeof(sun.sun_path));
-  sun.sun_family = AF_UNIX;
+  memset(&saddr, 0, sizeof saddr);
+  uv__strlcpy(saddr.sun_path, name, sizeof(saddr.sun_path));
+  saddr.sun_family = AF_UNIX;
 
   /* We don't check for EINPROGRESS. Think about it: the socket
    * is either there or not.
    */
   do {
-    r = connect(sockfd, (struct sockaddr*)&sun, sizeof sun);
+    r = connect(sockfd, (struct sockaddr*)&saddr, sizeof saddr);
   }
   while (r == -1 && errno == EINTR);
 
@@ -236,7 +236,7 @@ out:
 
 /* TODO merge with uv__server_io()? */
 void uv__pipe_accept(EV_P_ ev_io* watcher, int revents) {
-  struct sockaddr_un sun;
+  struct sockaddr_un saddr;
   uv_pipe_t* pipe;
   int saved_errno;
   int sockfd;
@@ -247,7 +247,7 @@ void uv__pipe_accept(EV_P_ ev_io* watcher, int revents) {
   assert(pipe->type == UV_NAMED_PIPE);
   assert(pipe->pipe_fname != NULL);
 
-  sockfd = uv__accept(pipe->fd, (struct sockaddr *)&sun, sizeof sun);
+  sockfd = uv__accept(pipe->fd, (struct sockaddr *)&saddr, sizeof saddr);
   if (sockfd == -1) {
     if (errno == EAGAIN || errno == EWOULDBLOCK) {
       assert(0 && "EAGAIN on uv__accept(pipefd)");
index a8fa5c5..3211bbf 100644 (file)
 
 /* The only event loop we support right now */
 static uv_loop_t uv_default_loop_;
-static int uv_default_loop_initialized_ = 0;
+
+/* uv_once intialization guards */
+static uv_once_t uv_init_guard_ = UV_ONCE_INIT;
+static uv_once_t uv_default_loop_init_guard_ = UV_ONCE_INIT;
+
+
+static void uv_init(void) {
+  /* Initialize winsock */
+  uv_winsock_init();
+
+  /* Fetch winapi function pointers */
+  uv_winapi_init();
+
+  /* Initialize FS */
+  uv_fs_init();
+}
 
 
 static void uv_loop_init(uv_loop_t* loop) {
@@ -68,25 +83,18 @@ static void uv_loop_init(uv_loop_t* loop) {
 }
 
 
-uv_loop_t* uv_default_loop() {
-  if (!uv_default_loop_initialized_) {
-    uv_loop_init(&uv_default_loop_);
-    uv_default_loop_initialized_ = 1;
-  }
+static void uv_default_loop_init(void) {
+  /* Intialize libuv itself first */
+  uv_once(&uv_init_guard_, uv_init);
 
-  return &uv_default_loop_;
+  /* Initialize the main loop */
+  uv_loop_init(&uv_default_loop_);
 }
 
 
-void uv_init() {
-  /* Initialize winsock */
-  uv_winsock_init();
-
-  /* Fetch winapi function pointers */
-  uv_winapi_init();
-
-  /* Initialize FS */
-  uv_fs_init();
+uv_loop_t* uv_default_loop() {
+  uv_once(&uv_default_loop_init_guard_, uv_default_loop_init);
+  return &uv_default_loop_;
 }
 
 
index 19085b6..ee1834e 100644 (file)
@@ -279,4 +279,19 @@ void uv_winsock_init();
 int uv_ntstatus_to_winsock_error(NTSTATUS status);
 
 
+/* Threads and synchronization */
+typedef struct uv_once_s {
+  unsigned char ran;
+  /* The actual event handle must be aligned to sizeof(HANDLE), so in */
+  /* practice it might overlap padding a little. */
+  HANDLE event;
+  HANDLE padding;
+} uv_once_t;
+
+#define UV_ONCE_INIT \
+  { 0, NULL, NULL }
+
+void uv_once(uv_once_t* guard, void (*callback)(void));
+
+
 #endif /* UV_WIN_INTERNAL_H_ */
index c21ea6e..ac20925 100644 (file)
@@ -33,7 +33,7 @@
 /* The resolution of the high-resolution clock. */
 static int64_t uv_ticks_per_msec_ = 0;
 static uint64_t uv_hrtime_frequency_ = 0;
-static char uv_hrtime_initialized_ = 0;
+static uv_once_t uv_hrtime_init_guard_ = UV_ONCE_INIT;
 
 
 void uv_update_time(uv_loop_t* loop) {
@@ -57,24 +57,24 @@ int64_t uv_now(uv_loop_t* loop) {
   return loop->time;
 }
 
-/* TODO: thread safety */
-uint64_t uv_hrtime(void) {
-  LARGE_INTEGER counter;
-
-  /* When called for the first time, obtain the high-resolution clock */
-  /* frequency. */
-  if (!uv_hrtime_initialized_) {
-    uv_hrtime_initialized_ = 1;
 
-    if (!QueryPerformanceFrequency(&counter)) {
-      uv_hrtime_frequency_ = 0;
-      /* uv_set_sys_error(loop, GetLastError()); */
-      return 0;
-    }
+static void uv_hrtime_init(void) {
+  LARGE_INTEGER frequency;
 
-    uv_hrtime_frequency_ = counter.QuadPart;
+  if (!QueryPerformanceFrequency(&frequency)) {
+    uv_hrtime_frequency_ = 0;
+    return;
   }
 
+  uv_hrtime_frequency_ = frequency.QuadPart;
+}
+
+
+uint64_t uv_hrtime(void) {
+  LARGE_INTEGER counter;
+
+  uv_once(&uv_hrtime_init_guard_, uv_hrtime_init);
+
   /* If the performance frequency is zero, there's no support. */
   if (!uv_hrtime_frequency_) {
     /* uv_set_sys_error(loop, ERROR_NOT_SUPPORTED); */
index 5b24402..bfd081d 100644 (file)
@@ -86,7 +86,6 @@ BENCHMARK_IMPL(gethostbyname) {
     return 1;
   }
 
-  uv_init();
   loop = uv_default_loop();
 
   ares_callbacks = 0;
index 31503d8..c2a8879 100644 (file)
@@ -68,7 +68,6 @@ static void getaddrinfo_initiate(uv_getaddrinfo_t* handle) {
 BENCHMARK_IMPL(getaddrinfo) {
   int i;
 
-  uv_init(loop);
   loop = uv_default_loop();
 
   uv_update_time(loop);
index c3263ae..c36215c 100644 (file)
@@ -200,7 +200,6 @@ static void pinger_new() {
 
 
 BENCHMARK_IMPL(ping_pongs) {
-  uv_init();
   loop = uv_default_loop();
 
   start_time = uv_now(loop);
index c2c41c0..1f56e27 100644 (file)
@@ -277,7 +277,6 @@ static int pound_it(int concurrency,
   uint64_t start_time; /* in ns */
   uint64_t end_time;
 
-  uv_init();
   loop = uv_default_loop();
 
   uv_update_time(loop);
index abbb7be..0269fa7 100644 (file)
@@ -367,7 +367,6 @@ HELPER_IMPL(tcp_pump_server) {
   int r;
 
   type = TCP;
-  uv_init();
   loop = uv_default_loop();
 
   listen_addr = uv_ip4_addr("0.0.0.0", TEST_PORT);
@@ -391,7 +390,6 @@ HELPER_IMPL(pipe_pump_server) {
   int r;
   type = PIPE;
 
-  uv_init();
   loop = uv_default_loop();
 
   /* Server */
@@ -414,7 +412,6 @@ void tcp_pump(int n) {
   TARGET_CONNECTIONS = n;
   type = TCP;
 
-  uv_init();
   loop = uv_default_loop();
 
   connect_addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
@@ -431,7 +428,6 @@ void pipe_pump(int n) {
   TARGET_CONNECTIONS = n;
   type = PIPE;
 
-  uv_init();
   loop = uv_default_loop();
 
   /* Start making connections */
index 9798f9d..6e5493d 100644 (file)
@@ -132,7 +132,6 @@ BENCHMARK_IMPL(spawn) {
   int r;
   static int64_t start_time, end_time;
 
-  uv_init();
   loop = uv_default_loop();
 
   r = uv_exepath(exepath, &exepath_size);
index 2be7738..24a9e1b 100644 (file)
@@ -134,7 +134,6 @@ static int do_packet_storm(int n_senders, int n_receivers) {
   ASSERT(n_senders <= MAX_SENDERS);
   ASSERT(n_receivers <= MAX_RECEIVERS);
 
-  uv_init();
   loop = uv_default_loop();
 
   n_senders_ = n_senders;
index e45372e..cad5f72 100644 (file)
@@ -317,7 +317,6 @@ static int dns_start(int port) {
 
 
 HELPER_IMPL(dns_server) {
-  uv_init();
   loop = uv_default_loop();
 
   if (dns_start(TEST_PORT_2))
index ba8a912..96e606b 100644 (file)
@@ -272,7 +272,6 @@ static int pipe_echo_start(char* pipeName) {
 
 
 HELPER_IMPL(tcp4_echo_server) {
-  uv_init();
   loop = uv_default_loop();
 
   if (tcp4_echo_start(TEST_PORT))
@@ -284,7 +283,6 @@ HELPER_IMPL(tcp4_echo_server) {
 
 
 HELPER_IMPL(tcp6_echo_server) {
-  uv_init();
   loop = uv_default_loop();
 
   if (tcp6_echo_start(TEST_PORT))
@@ -296,7 +294,6 @@ HELPER_IMPL(tcp6_echo_server) {
 
 
 HELPER_IMPL(pipe_echo_server) {
-  uv_init();
   loop = uv_default_loop();
 
   if (pipe_echo_start(TEST_PIPENAME))
index ccf259e..3d84151 100644 (file)
@@ -182,8 +182,6 @@ static void prepare_cb(uv_prepare_t* handle, int status) {
 TEST_IMPL(async) {
   int r;
 
-  uv_init();
-
   r = uv_prepare_init(uv_default_loop(), &prepare_handle);
   ASSERT(r == 0);
   r = uv_prepare_start(&prepare_handle, prepare_cb);
index d0f4692..4af6364 100644 (file)
@@ -176,8 +176,6 @@ static void connect_cb(uv_connect_t* req, int status) {
 TEST_IMPL(callback_stack) {
   struct sockaddr_in addr = uv_ip4_addr("127.0.0.1", TEST_PORT);
 
-  uv_init();
-
   if (uv_tcp_init(uv_default_loop(), &client)) {
     FATAL("uv_tcp_init failed");
   }
index 099b1ad..a5d6b1f 100644 (file)
@@ -119,8 +119,6 @@ void connection_fail(uv_connect_cb connect_cb) {
  * expect an error.
  */
 TEST_IMPL(connection_fail) {
-  uv_init();
-
   connection_fail(on_connect_with_close);
 
   ASSERT(timer_close_cb_calls == 0);
@@ -136,9 +134,6 @@ TEST_IMPL(connection_fail) {
  * attempt.
  */
 TEST_IMPL(connection_fail_doesnt_auto_close) {
-  uv_init();
-
-
   uv_timer_init(uv_default_loop(), &timer);
 
   connection_fail(on_connect_without_close);
index 8509951..36c1dcf 100644 (file)
@@ -180,8 +180,6 @@ static void client_connect() {
 
 
 TEST_IMPL(delayed_accept) {
-  uv_init();
-
   start_server();
 
   client_connect();
index 10227bc..99415c6 100644 (file)
@@ -387,7 +387,6 @@ TEST_IMPL(fs_file_noent) {
   uv_fs_t req;
   int r;
 
-  uv_init();
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &req, "does_not_exist", O_RDONLY, 0, NULL);
@@ -476,7 +475,6 @@ TEST_IMPL(fs_file_async) {
   unlink("test_file");
   unlink("test_file2");
 
-  uv_init();
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT,
@@ -539,7 +537,6 @@ TEST_IMPL(fs_file_sync) {
   unlink("test_file");
   unlink("test_file2");
 
-  uv_init();
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &open_req1, "test_file", O_WRONLY | O_CREAT,
@@ -625,7 +622,6 @@ TEST_IMPL(fs_async_dir) {
   unlink("test_dir/file2");
   rmdir("test_dir");
 
-  uv_init();
   loop = uv_default_loop();
 
   r = uv_fs_mkdir(loop, &mkdir_req, "test_dir", 0755, mkdir_cb);
@@ -713,7 +709,6 @@ TEST_IMPL(fs_async_sendfile) {
   struct stat s1, s2;
 
   /* Setup. */
-  uv_init();
   unlink("test_file");
   unlink("test_file2");
 
@@ -781,8 +776,6 @@ TEST_IMPL(fs_fstat) {
   /* Setup. */
   unlink("test_file");
 
-  uv_init();
-
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT,
@@ -837,8 +830,6 @@ TEST_IMPL(fs_chmod) {
   /* Setup. */
   unlink("test_file");
 
-  uv_init();
-
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT,
@@ -926,8 +917,6 @@ TEST_IMPL(fs_chown) {
   /* Setup. */
   unlink("test_file");
 
-  uv_init();
-
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT,
@@ -987,8 +976,6 @@ TEST_IMPL(fs_link) {
   unlink("test_file_link");
   unlink("test_file_link2");
 
-  uv_init();
-
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT,
@@ -1073,8 +1060,6 @@ TEST_IMPL(fs_symlink) {
   unlink("test_file_symlink_symlink");
   unlink("test_file_symlink2_symlink");
 
-  uv_init();
-
   loop = uv_default_loop();
 
   r = uv_fs_open(loop, &req, "test_file", O_RDWR | O_CREAT,
@@ -1187,7 +1172,6 @@ TEST_IMPL(fs_utime) {
   uv_fs_t req;
   int r;
 
-  uv_init();
   loop = uv_default_loop();
 
   atime = mtime = 400497753; /* 1982-09-10 11:22:33 */
@@ -1228,7 +1212,6 @@ TEST_IMPL(fs_futime) {
   uv_fs_t req;
   int r;
 
-  uv_init();
   loop = uv_default_loop();
 
   atime = mtime = 400497753; /* 1982-09-10 11:22:33 */
index 9cd9be4..cac471c 100644 (file)
@@ -72,9 +72,6 @@ static void getaddrinfo_cuncurrent_cb(uv_getaddrinfo_t* handle,
 TEST_IMPL(getaddrinfo_basic) {
   int r;
 
-  uv_init();
-
-
   r = uv_getaddrinfo(uv_default_loop(),
                      &getaddrinfo_handle,
                      &getaddrinfo_basic_cb,
@@ -95,8 +92,6 @@ TEST_IMPL(getaddrinfo_concurrent) {
   int i, r;
   int* data;
 
-  uv_init();
-
   for (i = 0; i < CONCURRENT_COUNT; i++) {
     callback_counts[i] = 0;
 
index 544ac9f..583622e 100644 (file)
@@ -90,8 +90,6 @@ TEST_IMPL(gethostbyname) {
     return 1;
   }
 
-  uv_init();
-
   printf("Start basic gethostbyname test\n");
   prep_tcploopback();
 
index 30aa582..1f46ec3 100644 (file)
@@ -309,7 +309,6 @@ static void udp_sender(void) {
 
 
 TEST_IMPL(getsockname_tcp) {
-  uv_init();
   loop = uv_default_loop();
 
   if (tcp_listener())
@@ -327,7 +326,6 @@ TEST_IMPL(getsockname_tcp) {
 
 
 TEST_IMPL(getsockname_udp) {
-  uv_init();
   loop = uv_default_loop();
 
   if (udp_listener())
index 6e959b9..95ef3a9 100644 (file)
@@ -60,9 +60,6 @@ static void idle_cb(uv_idle_t* handle, int status) {
 TEST_IMPL(idle_starvation) {
   int r;
 
-  uv_init();
-
-
   r = uv_idle_init(uv_default_loop(), &idle_handle);
   ASSERT(r == 0);
   r = uv_idle_start(&idle_handle, idle_cb);
index b9f3be2..9a76cc5 100644 (file)
@@ -299,9 +299,6 @@ TEST_IMPL(loop_handles) {
   int i;
   int r;
 
-  uv_init();
-
-
   r = uv_prepare_init(uv_default_loop(), &prepare_1_handle);
   ASSERT(r == 0);
   r = uv_prepare_start(&prepare_1_handle, prepare_1_cb);
index 700e5e9..dcb5cfd 100644 (file)
@@ -221,8 +221,6 @@ static void pipe_pinger_new() {
 
 
 TEST_IMPL(tcp_ping_pong) {
-  uv_init();
-
   tcp_pinger_new();
   uv_run(uv_default_loop());
 
@@ -233,8 +231,6 @@ TEST_IMPL(tcp_ping_pong) {
 
 
 TEST_IMPL(tcp_ping_pong_v6) {
-  uv_init();
-
   tcp_pinger_v6_new();
   uv_run(uv_default_loop());
 
@@ -245,8 +241,6 @@ TEST_IMPL(tcp_ping_pong_v6) {
 
 
 TEST_IMPL(pipe_ping_pong) {
-  uv_init();
-
   pipe_pinger_new();
   uv_run(uv_default_loop());
 
index 961bb87..832ce02 100644 (file)
@@ -45,9 +45,6 @@ TEST_IMPL(pipe_bind_error_addrinuse) {
   uv_pipe_t server1, server2;
   int r;
 
-  uv_init();
-
-
   r = uv_pipe_init(uv_default_loop(), &server1);
   ASSERT(r == 0);
   r = uv_pipe_bind(&server1, TEST_PIPENAME);
@@ -82,9 +79,6 @@ TEST_IMPL(pipe_bind_error_addrnotavail) {
   uv_pipe_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_pipe_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_pipe_bind(&server, BAD_PIPENAME);
@@ -106,9 +100,6 @@ TEST_IMPL(pipe_bind_error_inval) {
   uv_pipe_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_pipe_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_pipe_bind(&server, TEST_PIPENAME);
@@ -132,9 +123,6 @@ TEST_IMPL(pipe_listen_without_bind) {
   uv_pipe_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_pipe_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_listen((uv_stream_t*)&server, SOMAXCONN, NULL);
index 69dad1c..0083335 100644 (file)
@@ -24,7 +24,6 @@
 
 
 TEST_IMPL(ref) {
-  uv_init();
   uv_run(uv_default_loop());
   return 0;
 }
@@ -32,7 +31,6 @@ TEST_IMPL(ref) {
 
 TEST_IMPL(idle_ref) {
   uv_idle_t h;
-  uv_init();
   uv_idle_init(uv_default_loop(), &h);
   uv_idle_start(&h, NULL);
   uv_unref(uv_default_loop());
@@ -43,7 +41,6 @@ TEST_IMPL(idle_ref) {
 
 TEST_IMPL(async_ref) {
   uv_async_t h;
-  uv_init();
   uv_async_init(uv_default_loop(), &h, NULL);
   uv_unref(uv_default_loop());
   uv_run(uv_default_loop());
@@ -53,7 +50,6 @@ TEST_IMPL(async_ref) {
 
 TEST_IMPL(prepare_ref) {
   uv_prepare_t h;
-  uv_init();
   uv_prepare_init(uv_default_loop(), &h);
   uv_prepare_start(&h, NULL);
   uv_unref(uv_default_loop());
@@ -64,7 +60,6 @@ TEST_IMPL(prepare_ref) {
 
 TEST_IMPL(check_ref) {
   uv_check_t h;
-  uv_init();
   uv_check_init(uv_default_loop(), &h);
   uv_check_start(&h, NULL);
   uv_unref(uv_default_loop());
@@ -83,8 +78,6 @@ static void prepare_cb(uv_prepare_t* handle, int status) {
 
 TEST_IMPL(unref_in_prepare_cb) {
   uv_prepare_t h;
-  uv_init();
-
   uv_prepare_init(uv_default_loop(), &h);
   uv_prepare_start(&h, prepare_cb);
   uv_run(uv_default_loop());
index f7ea80d..d4ad085 100644 (file)
@@ -153,8 +153,6 @@ TEST_IMPL(shutdown_eof) {
   struct sockaddr_in server_addr;
   int r;
 
-  uv_init();
-
   qbuf.base = "Q";
   qbuf.len = 1;
 
index 7255975..653f9ac 100644 (file)
@@ -117,8 +117,6 @@ static void timer_cb(uv_timer_t* handle, int status) {
 TEST_IMPL(spawn_exit_code) {
   int r;
 
-  uv_init();
-
   init_process_options("spawn_helper1", exit_cb);
 
   r = uv_spawn(uv_default_loop(), &process, options);
@@ -138,8 +136,6 @@ TEST_IMPL(spawn_stdout) {
   int r;
   uv_pipe_t out;
 
-  uv_init();
-
   init_process_options("spawn_helper2", exit_cb);
 
   uv_pipe_init(uv_default_loop(), &out);
@@ -171,8 +167,6 @@ int r;
   uv_buf_t buf;
   char buffer[] = "hello-from-spawn_stdin";
 
-  uv_init();
-
   init_process_options("spawn_helper3", exit_cb);
 
   uv_pipe_init(uv_default_loop(), &out);
@@ -205,8 +199,6 @@ int r;
 TEST_IMPL(spawn_and_kill) {
   int r;
 
-  uv_init();
-
   init_process_options("spawn_helper4", kill_cb);
 
   r = uv_spawn(uv_default_loop(), &process, options);
@@ -235,8 +227,6 @@ TEST_IMPL(spawn_detect_pipe_name_collisions_on_windows) {
   char name[64];
   HANDLE pipe_handle;
 
-  uv_init();
-
   init_process_options("spawn_helper2", exit_cb);
 
   uv_pipe_init(uv_default_loop(), &out);
index 28c2f61..9512519 100644 (file)
@@ -39,9 +39,6 @@ TEST_IMPL(tcp_bind_error_addrinuse) {
   uv_tcp_t server1, server2;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server1);
   ASSERT(r == 0);
   r = uv_tcp_bind(&server1, addr);
@@ -75,9 +72,6 @@ TEST_IMPL(tcp_bind_error_addrnotavail_1) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind(&server, addr);
@@ -102,8 +96,6 @@ TEST_IMPL(tcp_bind_error_addrnotavail_2) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind(&server, addr);
@@ -128,9 +120,6 @@ TEST_IMPL(tcp_bind_error_fault) {
 
   garbage_addr = (struct sockaddr_in*) &garbage;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind(&server, *garbage_addr);
@@ -155,9 +144,6 @@ TEST_IMPL(tcp_bind_error_inval) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind(&server, addr1);
@@ -183,9 +169,6 @@ TEST_IMPL(tcp_bind_localhost_ok) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind(&server, addr);
@@ -199,8 +182,6 @@ TEST_IMPL(tcp_listen_without_bind) {
   int r;
   uv_tcp_t server;
 
-  uv_init();
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_listen((uv_stream_t*)&server, 128, NULL);
index 74b930d..5a8b763 100644 (file)
@@ -39,9 +39,6 @@ TEST_IMPL(tcp_bind6_error_addrinuse) {
   uv_tcp_t server1, server2;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server1);
   ASSERT(r == 0);
   r = uv_tcp_bind6(&server1, addr);
@@ -75,9 +72,6 @@ TEST_IMPL(tcp_bind6_error_addrnotavail) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind6(&server, addr);
@@ -102,9 +96,6 @@ TEST_IMPL(tcp_bind6_error_fault) {
 
   garbage_addr = (struct sockaddr_in6*) &garbage;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind6(&server, *garbage_addr);
@@ -129,9 +120,6 @@ TEST_IMPL(tcp_bind6_error_inval) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind6(&server, addr1);
@@ -157,9 +145,6 @@ TEST_IMPL(tcp_bind6_localhost_ok) {
   uv_tcp_t server;
   int r;
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
   r = uv_tcp_bind6(&server, addr);
index 1b1a03b..f6b1dc6 100644 (file)
@@ -176,9 +176,6 @@ TEST_IMPL(tcp_writealot) {
 
   ASSERT(send_buffer != NULL);
 
-  uv_init();
-
-
   r = uv_tcp_init(uv_default_loop(), client);
   ASSERT(r == 0);
 
index 4f0be0c..92130b5 100644 (file)
@@ -45,8 +45,6 @@ static void after_work_cb(uv_work_t* req) {
 TEST_IMPL(threadpool_queue_work_simple) {
   int r;
 
-  uv_init();
-
   work_req.data = &data;
   r = uv_queue_work(uv_default_loop(), &work_req, work_cb, after_work_cb);
   ASSERT(r == 0);
index 49cecf8..9eeee1e 100644 (file)
@@ -95,9 +95,6 @@ static void repeat_2_cb(uv_timer_t* handle, int status) {
 TEST_IMPL(timer_again) {
   int r;
 
-  uv_init();
-
-
   start_time = uv_now(uv_default_loop());
   ASSERT(0 < start_time);
 
index 9e624cb..17bcb84 100644 (file)
@@ -90,8 +90,6 @@ TEST_IMPL(timer) {
   uv_timer_t repeat, never;
   int i, r;
 
-  uv_init();
-
   start_time = uv_now(uv_default_loop());
   ASSERT(0 < start_time);
 
index 92eb055..2d172c0 100644 (file)
@@ -65,8 +65,6 @@ TEST_IMPL(udp_dgram_too_big) {
 
   memset(dgram, 42, sizeof dgram); /* silence valgrind */
 
-  uv_init();
-
   r = uv_udp_init(uv_default_loop(), &handle_);
   ASSERT(r == 0);
 
index a32ba14..6ff36b3 100644 (file)
@@ -100,8 +100,6 @@ static void do_test(uv_udp_recv_cb recv_cb, int bind_flags) {
   uv_buf_t buf;
   int r;
 
-  uv_init();
-
   addr6 = uv_ip6_addr("::0", TEST_PORT);
 
   r = uv_udp_init(uv_default_loop(), &server);
index bf73a56..ab47e91 100644 (file)
@@ -170,8 +170,6 @@ TEST_IMPL(udp_send_and_recv) {
 
   addr = uv_ip4_addr("0.0.0.0", TEST_PORT);
 
-  uv_init();
-
   r = uv_udp_init(uv_default_loop(), &server);
   ASSERT(r == 0);
 
index 0735234..b056624 100644 (file)
             'src/win/stream.c',
             'src/win/tcp.c',
             'src/win/threadpool.c',
+            'src/win/threads.c',
             'src/win/timer.c',
             'src/win/udp.c',
             'src/win/util.c',
             'libraries': [ '-lrt' ],
           },
         }],
-        # TODO add OS=='sun'
+        [ 'OS=="solaris"', {
+          'include_dirs': [ 'src/ares/config_sunos' ],
+          'sources': [ 'src/unix/sunos.c' ],
+          'defines': [
+            '__EXTENSIONS__',
+            '_XOPEN_SOURCE=500',
+            'EV_CONFIG_H="config_sunos.h"',
+            'EIO_CONFIG_H="config_sunos.h"',
+          ],
+          'direct_dependent_settings': {
+            'libraries': [ '-lrt' ],
+          },
+        }],
       ]
     },
 
index 6b2760c..336240a 100644 (file)
@@ -2506,8 +2506,6 @@ int Start(int argc, char *argv[]) {
   pthread_win32_process_attach_np();
 #endif
 
-  uv_init();
-
   // This needs to run *before* V8::Initialize()
   argv = Init(argc, argv);