libuv 2.0.1 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4d09dbd548f07b923954c84a68c379cd6f505a57
4
- data.tar.gz: eca4be71daa05339d195feb72bda34ec883495e3
3
+ metadata.gz: efca251c5022c8b1930338e419d3b18768aefd24
4
+ data.tar.gz: a8083cd695fbed0357daf6fb5bfa143d8117b3e2
5
5
  SHA512:
6
- metadata.gz: 46dd78c6788302bd6219ce150fed9fd04853a3a526950d92469c65c0be56ef6a2854e4c4a942c3efc93c10460683b380d1949fc40d9774f8391be1dbf6328395
7
- data.tar.gz: 1019298eef2701c03264d1c18380d3f9a4d3d6733b60cb6f856c4923a792f8d8d580ba52c2096f844dabbcae3fbd36fd475d0717ae3954c60fbfd914e1b087f6
6
+ metadata.gz: 90c1818cc42e10b76edb107f8a1bbb8582c511dafd12a1ed9c4b883e617146af01922eac241b0a3c012d9a449193c9177bbf401dfae88ce901ade0963f196c83
7
+ data.tar.gz: 8b4bd90f4adeddc3c94fe0eeecfabe27b569bd327c7945d4193f8108cc9720655a5b8d94a9405ff243c789f3c80318a0f88919ac3c322727e0b15d762b96d427
data/ext/libuv/AUTHORS CHANGED
@@ -214,3 +214,7 @@ Roger A. Light <roger@atchoo.org>
214
214
  chenttuuvv <chenttuuvv@yahoo.com>
215
215
  Richard Lau <riclau@uk.ibm.com>
216
216
  ronkorving <rkorving@wizcorp.jp>
217
+ Corbin Simpson <MostAwesomeDude@gmail.com>
218
+ Zachary Hamm <zsh@imipolexg.org>
219
+ Karl Skomski <karl@skomski.com>
220
+ Jeremy Whitlock <jwhitlock@apache.org>
data/ext/libuv/ChangeLog CHANGED
@@ -1,3 +1,44 @@
1
+ 2015.08.20, Version 1.7.1 (Stable), 44f4b6bd82d8ae4583ccc4768a83af778ef69f85
2
+
3
+ Changes since version 1.7.0:
4
+
5
+ * doc: document the procedure for verifying releases (Saúl Ibarra Corretgé)
6
+
7
+ * doc: add note about Windows binaries to the README (Saúl Ibarra Corretgé)
8
+
9
+ * doc: use long GPG IDs in MAINTAINERS.md (Saúl Ibarra Corretgé)
10
+
11
+ * Revert "stream: squelch ECONNRESET error if already closed" (Saúl Ibarra
12
+ Corretgé)
13
+
14
+ * doc: clarify uv_read_stop() is idempotent (Corbin Simpson)
15
+
16
+ * unix: OpenBSD's setsockopt needs an unsigned char for multicast (Zachary
17
+ Hamm)
18
+
19
+ * test: Fix two memory leaks (Karl Skomski)
20
+
21
+ * unix,win: return EINVAL on nullptr args in uv_fs_{read,write} (Karl Skomski)
22
+
23
+ * win: set accepted TCP sockets as non-inheritable (Saúl Ibarra Corretgé)
24
+
25
+ * unix: remove superfluous parentheses in fs macros (Ben Noordhuis)
26
+
27
+ * unix: don't copy arguments for sync fs requests (Ben Noordhuis)
28
+
29
+ * test: plug small memory leak in unix test runner (Ben Noordhuis)
30
+
31
+ * unix,windows: allow NULL loop for sync fs requests (Ben Noordhuis)
32
+
33
+ * unix,windows: don't assert on unknown error code (Ben Noordhuis)
34
+
35
+ * stream: retry write on EPROTOTYPE on OSX (Brian White)
36
+
37
+ * common: fix use of snprintf on Windows (Saúl Ibarra Corretgé)
38
+
39
+ * tests: refactored fs watch_dir tests for stability (Jeremy Whitlock)
40
+
41
+
1
42
  2015.08.06, Version 1.7.0 (Stable), 415a865d6365ba58d02b92b89d46ba5d7744ec8b
2
43
 
3
44
  Changes since version 1.6.1:
@@ -1,4 +1,4 @@
1
- version: v1.7.0.build{build}
1
+ version: v1.7.1.build{build}
2
2
 
3
3
  install:
4
4
  - cinst -y nsis
@@ -13,7 +13,7 @@
13
13
  # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
14
14
 
15
15
  AC_PREREQ(2.57)
16
- AC_INIT([libuv], [1.7.0], [https://github.com/libuv/libuv/issues])
16
+ AC_INIT([libuv], [1.7.1], [https://github.com/libuv/libuv/issues])
17
17
  AC_CONFIG_MACRO_DIR([m4])
18
18
  m4_include([m4/libuv-extra-automake-flags.m4])
19
19
  m4_include([m4/as_case.m4])
@@ -322,8 +322,10 @@ API
322
322
 
323
323
  .. c:function:: const char* uv_strerror(int err)
324
324
 
325
- Returns the error message for the given error code.
325
+ Returns the error message for the given error code. Leaks a few bytes
326
+ of memory when you call it with an unknown error code.
326
327
 
327
328
  .. c:function:: const char* uv_err_name(int err)
328
329
 
329
- Returns the error name for the given error code.
330
+ Returns the error name for the given error code. Leaks a few bytes
331
+ of memory when you call it with an unknown error code.
@@ -142,6 +142,8 @@ API
142
142
  Stop reading data from the stream. The :c:type:`uv_read_cb` callback will
143
143
  no longer be called.
144
144
 
145
+ This function is idempotent and may be safely called on a stopped stream.
146
+
145
147
  .. c:function:: int uv_write(uv_write_t* req, uv_stream_t* handle, const uv_buf_t bufs[], unsigned int nbufs, uv_write_cb cb)
146
148
 
147
149
  Write data to stream. Buffers are written in order. Example:
@@ -32,7 +32,7 @@
32
32
 
33
33
  #define UV_VERSION_MAJOR 1
34
34
  #define UV_VERSION_MINOR 7
35
- #define UV_VERSION_PATCH 0
35
+ #define UV_VERSION_PATCH 1
36
36
  #define UV_VERSION_IS_RELEASE 1
37
37
  #define UV_VERSION_SUFFIX ""
38
38
 
@@ -58,52 +58,63 @@
58
58
  # include <sys/sendfile.h>
59
59
  #endif
60
60
 
61
- #define INIT(type) \
61
+ #define INIT(subtype) \
62
62
  do { \
63
- uv__req_init((loop), (req), UV_FS); \
64
- (req)->fs_type = UV_FS_ ## type; \
65
- (req)->result = 0; \
66
- (req)->ptr = NULL; \
67
- (req)->loop = loop; \
68
- (req)->path = NULL; \
69
- (req)->new_path = NULL; \
70
- (req)->cb = (cb); \
63
+ req->type = UV_FS; \
64
+ if (cb != NULL) \
65
+ uv__req_init(loop, req, UV_FS); \
66
+ req->fs_type = UV_FS_ ## subtype; \
67
+ req->result = 0; \
68
+ req->ptr = NULL; \
69
+ req->loop = loop; \
70
+ req->path = NULL; \
71
+ req->new_path = NULL; \
72
+ req->cb = cb; \
71
73
  } \
72
74
  while (0)
73
75
 
74
76
  #define PATH \
75
77
  do { \
76
- (req)->path = uv__strdup(path); \
77
- if ((req)->path == NULL) \
78
- return -ENOMEM; \
78
+ assert(path != NULL); \
79
+ if (cb == NULL) { \
80
+ req->path = path; \
81
+ } else { \
82
+ req->path = uv__strdup(path); \
83
+ if (req->path == NULL) \
84
+ return -ENOMEM; \
85
+ } \
79
86
  } \
80
87
  while (0)
81
88
 
82
89
  #define PATH2 \
83
90
  do { \
84
- size_t path_len; \
85
- size_t new_path_len; \
86
- path_len = strlen((path)) + 1; \
87
- new_path_len = strlen((new_path)) + 1; \
88
- (req)->path = uv__malloc(path_len + new_path_len); \
89
- if ((req)->path == NULL) \
90
- return -ENOMEM; \
91
- (req)->new_path = (req)->path + path_len; \
92
- memcpy((void*) (req)->path, (path), path_len); \
93
- memcpy((void*) (req)->new_path, (new_path), new_path_len); \
91
+ if (cb == NULL) { \
92
+ req->path = path; \
93
+ req->new_path = new_path; \
94
+ } else { \
95
+ size_t path_len; \
96
+ size_t new_path_len; \
97
+ path_len = strlen(path) + 1; \
98
+ new_path_len = strlen(new_path) + 1; \
99
+ req->path = uv__malloc(path_len + new_path_len); \
100
+ if (req->path == NULL) \
101
+ return -ENOMEM; \
102
+ req->new_path = req->path + path_len; \
103
+ memcpy((void*) req->path, path, path_len); \
104
+ memcpy((void*) req->new_path, new_path, new_path_len); \
105
+ } \
94
106
  } \
95
107
  while (0)
96
108
 
97
109
  #define POST \
98
110
  do { \
99
- if ((cb) != NULL) { \
100
- uv__work_submit((loop), &(req)->work_req, uv__fs_work, uv__fs_done); \
111
+ if (cb != NULL) { \
112
+ uv__work_submit(loop, &req->work_req, uv__fs_work, uv__fs_done); \
101
113
  return 0; \
102
114
  } \
103
115
  else { \
104
- uv__fs_work(&(req)->work_req); \
105
- uv__fs_done(&(req)->work_req, 0); \
106
- return (req)->result; \
116
+ uv__fs_work(&req->work_req); \
117
+ return req->result; \
107
118
  } \
108
119
  } \
109
120
  while (0)
@@ -886,8 +897,7 @@ static void uv__fs_done(struct uv__work* w, int status) {
886
897
  req->result = -ECANCELED;
887
898
  }
888
899
 
889
- if (req->cb != NULL)
890
- req->cb(req);
900
+ req->cb(req);
891
901
  }
892
902
 
893
903
 
@@ -1071,6 +1081,9 @@ int uv_fs_read(uv_loop_t* loop, uv_fs_t* req,
1071
1081
  unsigned int nbufs,
1072
1082
  int64_t off,
1073
1083
  uv_fs_cb cb) {
1084
+ if (bufs == NULL || nbufs == 0)
1085
+ return -EINVAL;
1086
+
1074
1087
  INIT(READ);
1075
1088
  req->file = file;
1076
1089
 
@@ -1193,6 +1206,9 @@ int uv_fs_write(uv_loop_t* loop,
1193
1206
  unsigned int nbufs,
1194
1207
  int64_t off,
1195
1208
  uv_fs_cb cb) {
1209
+ if (bufs == NULL || nbufs == 0)
1210
+ return -EINVAL;
1211
+
1196
1212
  INIT(WRITE);
1197
1213
  req->file = file;
1198
1214
 
@@ -1212,7 +1228,14 @@ int uv_fs_write(uv_loop_t* loop,
1212
1228
 
1213
1229
 
1214
1230
  void uv_fs_req_cleanup(uv_fs_t* req) {
1215
- uv__free((void*)req->path);
1231
+ /* Only necessary for asychronous requests, i.e., requests with a callback.
1232
+ * Synchronous ones don't copy their arguments and have req->path and
1233
+ * req->new_path pointing to user-owned memory. UV_FS_MKDTEMP is the
1234
+ * exception to the rule, it always allocates memory.
1235
+ */
1236
+ if (req->path != NULL && (req->cb != NULL || req->fs_type == UV_FS_MKDTEMP))
1237
+ uv__free((void*) req->path); /* Memory is shared with req->new_path. */
1238
+
1216
1239
  req->path = NULL;
1217
1240
  req->new_path = NULL;
1218
1241
 
@@ -809,7 +809,17 @@ start:
809
809
  do {
810
810
  n = sendmsg(uv__stream_fd(stream), &msg, 0);
811
811
  }
812
+ #if defined(__APPLE__)
813
+ /*
814
+ * Due to a possible kernel bug at least in OS X 10.10 "Yosemite",
815
+ * EPROTOTYPE can be returned while trying to write to a socket that is
816
+ * shutting down. If we retry the write, we should get the expected EPIPE
817
+ * instead.
818
+ */
819
+ while (n == -1 && (errno == EINTR || errno == EPROTOTYPE));
820
+ #else
812
821
  while (n == -1 && errno == EINTR);
822
+ #endif
813
823
  } else {
814
824
  do {
815
825
  if (iovcnt == 1) {
@@ -818,7 +828,17 @@ start:
818
828
  n = writev(uv__stream_fd(stream), iov, iovcnt);
819
829
  }
820
830
  }
831
+ #if defined(__APPLE__)
832
+ /*
833
+ * Due to a possible kernel bug at least in OS X 10.10 "Yosemite",
834
+ * EPROTOTYPE can be returned while trying to write to a socket that is
835
+ * shutting down. If we retry the write, we should get the expected EPIPE
836
+ * instead.
837
+ */
838
+ while (n == -1 && (errno == EINTR || errno == EPROTOTYPE));
839
+ #else
821
840
  while (n == -1 && errno == EINTR);
841
+ #endif
822
842
  }
823
843
 
824
844
  if (n < 0) {
@@ -668,6 +668,8 @@ static int uv__setsockopt_maybe_char(uv_udp_t* handle,
668
668
  int val) {
669
669
  #if defined(__sun) || defined(_AIX)
670
670
  char arg = val;
671
+ #elif defined(__OpenBSD__)
672
+ unsigned char arg = val;
671
673
  #else
672
674
  int arg = val;
673
675
  #endif
@@ -702,13 +704,13 @@ int uv_udp_set_ttl(uv_udp_t* handle, int ttl) {
702
704
  * so hardcode the size of these options on this platform,
703
705
  * and use the general uv__setsockopt_maybe_char call on other platforms.
704
706
  */
705
- #if defined(__sun) || defined(_AIX)
707
+ #if defined(__sun) || defined(_AIX) || defined(__OpenBSD__)
706
708
  return uv__setsockopt(handle,
707
709
  IP_TTL,
708
710
  IPV6_UNICAST_HOPS,
709
711
  &ttl,
710
712
  sizeof(ttl));
711
- #endif /* defined(__sun) || defined(_AIX) */
713
+ #endif /* defined(__sun) || defined(_AIX) || defined (__OpenBSD__) */
712
714
 
713
715
  return uv__setsockopt_maybe_char(handle,
714
716
  IP_TTL,
@@ -137,14 +137,27 @@ uv_buf_t uv_buf_init(char* base, unsigned int len) {
137
137
  }
138
138
 
139
139
 
140
+ static const char* uv__unknown_err_code(int err) {
141
+ char buf[32];
142
+ char* copy;
143
+
144
+ #ifndef _WIN32
145
+ snprintf(buf, sizeof(buf), "Unknown system error %d", err);
146
+ #else
147
+ _snprintf(buf, sizeof(buf), "Unknown system error %d", err);
148
+ #endif
149
+ copy = uv__strdup(buf);
150
+
151
+ return copy != NULL ? copy : "Unknown system error";
152
+ }
153
+
154
+
140
155
  #define UV_ERR_NAME_GEN(name, _) case UV_ ## name: return #name;
141
156
  const char* uv_err_name(int err) {
142
157
  switch (err) {
143
158
  UV_ERRNO_MAP(UV_ERR_NAME_GEN)
144
- default:
145
- assert(0);
146
- return NULL;
147
159
  }
160
+ return uv__unknown_err_code(err);
148
161
  }
149
162
  #undef UV_ERR_NAME_GEN
150
163
 
@@ -153,9 +166,8 @@ const char* uv_err_name(int err) {
153
166
  const char* uv_strerror(int err) {
154
167
  switch (err) {
155
168
  UV_ERRNO_MAP(UV_STRERROR_GEN)
156
- default:
157
- return "Unknown system error";
158
169
  }
170
+ return uv__unknown_err_code(err);
159
171
  }
160
172
  #undef UV_STRERROR_GEN
161
173
 
@@ -116,8 +116,8 @@ void uv_fs_init() {
116
116
  }
117
117
 
118
118
 
119
- INLINE static int fs__capture_path(uv_loop_t* loop, uv_fs_t* req,
120
- const char* path, const char* new_path, const int copy_path) {
119
+ INLINE static int fs__capture_path(uv_fs_t* req, const char* path,
120
+ const char* new_path, const int copy_path) {
121
121
  char* buf;
122
122
  char* pos;
123
123
  ssize_t buf_sz = 0, path_len, pathw_len = 0, new_pathw_len = 0;
@@ -1762,8 +1762,7 @@ static void uv__fs_done(struct uv__work* w, int status) {
1762
1762
  req->result = UV_ECANCELED;
1763
1763
  }
1764
1764
 
1765
- if (req->cb != NULL)
1766
- req->cb(req);
1765
+ req->cb(req);
1767
1766
  }
1768
1767
 
1769
1768
 
@@ -1792,7 +1791,7 @@ int uv_fs_open(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags,
1792
1791
 
1793
1792
  uv_fs_req_init(loop, req, UV_FS_OPEN, cb);
1794
1793
 
1795
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
1794
+ err = fs__capture_path(req, path, NULL, cb != NULL);
1796
1795
  if (err) {
1797
1796
  return uv_translate_sys_error(err);
1798
1797
  }
@@ -1831,6 +1830,9 @@ int uv_fs_read(uv_loop_t* loop,
1831
1830
  unsigned int nbufs,
1832
1831
  int64_t offset,
1833
1832
  uv_fs_cb cb) {
1833
+ if (bufs == NULL || nbufs == 0)
1834
+ return UV_EINVAL;
1835
+
1834
1836
  uv_fs_req_init(loop, req, UV_FS_READ, cb);
1835
1837
 
1836
1838
  req->file.fd = fd;
@@ -1864,6 +1866,9 @@ int uv_fs_write(uv_loop_t* loop,
1864
1866
  unsigned int nbufs,
1865
1867
  int64_t offset,
1866
1868
  uv_fs_cb cb) {
1869
+ if (bufs == NULL || nbufs == 0)
1870
+ return UV_EINVAL;
1871
+
1867
1872
  uv_fs_req_init(loop, req, UV_FS_WRITE, cb);
1868
1873
 
1869
1874
  req->file.fd = fd;
@@ -1896,7 +1901,7 @@ int uv_fs_unlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
1896
1901
 
1897
1902
  uv_fs_req_init(loop, req, UV_FS_UNLINK, cb);
1898
1903
 
1899
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
1904
+ err = fs__capture_path(req, path, NULL, cb != NULL);
1900
1905
  if (err) {
1901
1906
  return uv_translate_sys_error(err);
1902
1907
  }
@@ -1917,7 +1922,7 @@ int uv_fs_mkdir(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode,
1917
1922
 
1918
1923
  uv_fs_req_init(loop, req, UV_FS_MKDIR, cb);
1919
1924
 
1920
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
1925
+ err = fs__capture_path(req, path, NULL, cb != NULL);
1921
1926
  if (err) {
1922
1927
  return uv_translate_sys_error(err);
1923
1928
  }
@@ -1940,7 +1945,7 @@ int uv_fs_mkdtemp(uv_loop_t* loop, uv_fs_t* req, const char* tpl,
1940
1945
 
1941
1946
  uv_fs_req_init(loop, req, UV_FS_MKDTEMP, cb);
1942
1947
 
1943
- err = fs__capture_path(loop, req, tpl, NULL, TRUE);
1948
+ err = fs__capture_path(req, tpl, NULL, TRUE);
1944
1949
  if (err)
1945
1950
  return uv_translate_sys_error(err);
1946
1951
 
@@ -1959,7 +1964,7 @@ int uv_fs_rmdir(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
1959
1964
 
1960
1965
  uv_fs_req_init(loop, req, UV_FS_RMDIR, cb);
1961
1966
 
1962
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
1967
+ err = fs__capture_path(req, path, NULL, cb != NULL);
1963
1968
  if (err) {
1964
1969
  return uv_translate_sys_error(err);
1965
1970
  }
@@ -1980,7 +1985,7 @@ int uv_fs_scandir(uv_loop_t* loop, uv_fs_t* req, const char* path, int flags,
1980
1985
 
1981
1986
  uv_fs_req_init(loop, req, UV_FS_SCANDIR, cb);
1982
1987
 
1983
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
1988
+ err = fs__capture_path(req, path, NULL, cb != NULL);
1984
1989
  if (err) {
1985
1990
  return uv_translate_sys_error(err);
1986
1991
  }
@@ -2003,7 +2008,7 @@ int uv_fs_link(uv_loop_t* loop, uv_fs_t* req, const char* path,
2003
2008
 
2004
2009
  uv_fs_req_init(loop, req, UV_FS_LINK, cb);
2005
2010
 
2006
- err = fs__capture_path(loop, req, path, new_path, cb != NULL);
2011
+ err = fs__capture_path(req, path, new_path, cb != NULL);
2007
2012
  if (err) {
2008
2013
  return uv_translate_sys_error(err);
2009
2014
  }
@@ -2024,7 +2029,7 @@ int uv_fs_symlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
2024
2029
 
2025
2030
  uv_fs_req_init(loop, req, UV_FS_SYMLINK, cb);
2026
2031
 
2027
- err = fs__capture_path(loop, req, path, new_path, cb != NULL);
2032
+ err = fs__capture_path(req, path, new_path, cb != NULL);
2028
2033
  if (err) {
2029
2034
  return uv_translate_sys_error(err);
2030
2035
  }
@@ -2047,7 +2052,7 @@ int uv_fs_readlink(uv_loop_t* loop, uv_fs_t* req, const char* path,
2047
2052
 
2048
2053
  uv_fs_req_init(loop, req, UV_FS_READLINK, cb);
2049
2054
 
2050
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2055
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2051
2056
  if (err) {
2052
2057
  return uv_translate_sys_error(err);
2053
2058
  }
@@ -2068,7 +2073,7 @@ int uv_fs_chown(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_uid_t uid,
2068
2073
 
2069
2074
  uv_fs_req_init(loop, req, UV_FS_CHOWN, cb);
2070
2075
 
2071
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2076
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2072
2077
  if (err) {
2073
2078
  return uv_translate_sys_error(err);
2074
2079
  }
@@ -2102,7 +2107,7 @@ int uv_fs_stat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
2102
2107
 
2103
2108
  uv_fs_req_init(loop, req, UV_FS_STAT, cb);
2104
2109
 
2105
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2110
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2106
2111
  if (err) {
2107
2112
  return uv_translate_sys_error(err);
2108
2113
  }
@@ -2122,7 +2127,7 @@ int uv_fs_lstat(uv_loop_t* loop, uv_fs_t* req, const char* path, uv_fs_cb cb) {
2122
2127
 
2123
2128
  uv_fs_req_init(loop, req, UV_FS_LSTAT, cb);
2124
2129
 
2125
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2130
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2126
2131
  if (err) {
2127
2132
  return uv_translate_sys_error(err);
2128
2133
  }
@@ -2157,7 +2162,7 @@ int uv_fs_rename(uv_loop_t* loop, uv_fs_t* req, const char* path,
2157
2162
 
2158
2163
  uv_fs_req_init(loop, req, UV_FS_RENAME, cb);
2159
2164
 
2160
- err = fs__capture_path(loop, req, path, new_path, cb != NULL);
2165
+ err = fs__capture_path(req, path, new_path, cb != NULL);
2161
2166
  if (err) {
2162
2167
  return uv_translate_sys_error(err);
2163
2168
  }
@@ -2246,7 +2251,7 @@ int uv_fs_access(uv_loop_t* loop,
2246
2251
 
2247
2252
  uv_fs_req_init(loop, req, UV_FS_ACCESS, cb);
2248
2253
 
2249
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2254
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2250
2255
  if (err)
2251
2256
  return uv_translate_sys_error(err);
2252
2257
 
@@ -2268,7 +2273,7 @@ int uv_fs_chmod(uv_loop_t* loop, uv_fs_t* req, const char* path, int mode,
2268
2273
 
2269
2274
  uv_fs_req_init(loop, req, UV_FS_CHMOD, cb);
2270
2275
 
2271
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2276
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2272
2277
  if (err) {
2273
2278
  return uv_translate_sys_error(err);
2274
2279
  }
@@ -2308,7 +2313,7 @@ int uv_fs_utime(uv_loop_t* loop, uv_fs_t* req, const char* path, double atime,
2308
2313
 
2309
2314
  uv_fs_req_init(loop, req, UV_FS_UTIME, cb);
2310
2315
 
2311
- err = fs__capture_path(loop, req, path, NULL, cb != NULL);
2316
+ err = fs__capture_path(req, path, NULL, cb != NULL);
2312
2317
  if (err) {
2313
2318
  return uv_translate_sys_error(err);
2314
2319
  }
@@ -419,6 +419,15 @@ static void uv_tcp_queue_accept(uv_tcp_t* handle, uv_tcp_accept_t* req) {
419
419
  return;
420
420
  }
421
421
 
422
+ /* Make the socket non-inheritable */
423
+ if (!SetHandleInformation((HANDLE) accept_socket, HANDLE_FLAG_INHERIT, 0)) {
424
+ SET_REQ_ERROR(req, GetLastError());
425
+ uv_insert_pending_req(loop, (uv_req_t*)req);
426
+ handle->reqs_pending++;
427
+ closesocket(accept_socket);
428
+ return;
429
+ }
430
+
422
431
  /* Prepare the overlapped structure. */
423
432
  memset(&(req->u.io.overlapped), 0, sizeof(req->u.io.overlapped));
424
433
  if (handle->flags & UV_HANDLE_EMULATE_IOCP) {
@@ -31,7 +31,7 @@
31
31
 
32
32
  #define sync_stat(req, path) \
33
33
  do { \
34
- uv_fs_stat(uv_default_loop(), (req), (path), NULL); \
34
+ uv_fs_stat(NULL, (req), (path), NULL); \
35
35
  uv_fs_req_cleanup((req)); \
36
36
  } \
37
37
  while (0)
@@ -304,7 +304,7 @@ static int pipe_echo_start(char* pipeName) {
304
304
  #ifndef _WIN32
305
305
  {
306
306
  uv_fs_t req;
307
- uv_fs_unlink(uv_default_loop(), &req, pipeName, NULL);
307
+ uv_fs_unlink(NULL, &req, pipeName, NULL);
308
308
  uv_fs_req_cleanup(&req);
309
309
  }
310
310
  #endif
@@ -267,15 +267,11 @@ int process_wait(process_info_t* vec, int n, int timeout) {
267
267
  kill(p->pid, SIGTERM);
268
268
  }
269
269
  retval = -2;
270
-
271
- /* Wait for thread to finish. */
272
- r = pthread_join(tid, NULL);
273
- if (r) {
274
- perror("pthread_join");
275
- retval = -1;
276
- }
277
270
  }
278
271
 
272
+ if (pthread_join(tid, NULL))
273
+ abort();
274
+
279
275
  terminate:
280
276
  close(args.pipe[0]);
281
277
  close(args.pipe[1]);