Update to 1.19.1
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
This commit is contained in:
parent
a3ad2a8dc5
commit
16d423efa5
1
.gitignore
vendored
1
.gitignore
vendored
@ -41,3 +41,4 @@
|
||||
/libuv-v1.16.0.tar.gz
|
||||
/libuv-v1.16.1.tar.gz
|
||||
/libuv-v1.19.0.tar.gz
|
||||
/libuv-v1.19.1.tar.gz
|
||||
|
@ -1,151 +0,0 @@
|
||||
From 783d19a534bf7f245d5099717666c8f7a7953caa Mon Sep 17 00:00:00 2001
|
||||
From: Ben Noordhuis <info@bnoordhuis.nl>
|
||||
Date: Fri, 19 Jan 2018 01:24:43 +0100
|
||||
Subject: [PATCH 1/3] Revert "unix,tcp: avoid marking server sockets connected"
|
||||
|
||||
Reverted for breaking Node.js in rather spectacular fashion.
|
||||
|
||||
The bug is arguably on the Node.js side. It looks like Node.js starts
|
||||
reading before the socket is actually connected to something.
|
||||
Until that is fixed downstream, let's revert the change.
|
||||
|
||||
This reverts commit fd049399aa4ed8495928e375466970d98cb42e17.
|
||||
|
||||
Fixes: https://github.com/libuv/libuv/issues/1716
|
||||
Fixes: https://github.com/nodejs/node/issues/18225
|
||||
---
|
||||
src/unix/stream.c | 6 ------
|
||||
src/unix/tcp.c | 8 +++++---
|
||||
test/test-list.h | 2 --
|
||||
test/test-tcp-bind-error.c | 42 ------------------------------------------
|
||||
4 files changed, 5 insertions(+), 53 deletions(-)
|
||||
|
||||
diff --git a/src/unix/stream.c b/src/unix/stream.c
|
||||
index bccfd20f..6fc0a01f 100644
|
||||
--- a/src/unix/stream.c
|
||||
+++ b/src/unix/stream.c
|
||||
@@ -1411,9 +1411,6 @@ int uv_write2(uv_write_t* req,
|
||||
if (uv__stream_fd(stream) < 0)
|
||||
return -EBADF;
|
||||
|
||||
- if (!(stream->flags & UV_STREAM_WRITABLE))
|
||||
- return -EPIPE;
|
||||
-
|
||||
if (send_handle) {
|
||||
if (stream->type != UV_NAMED_PIPE || !((uv_pipe_t*)stream)->ipc)
|
||||
return -EINVAL;
|
||||
@@ -1565,9 +1562,6 @@ int uv_read_start(uv_stream_t* stream,
|
||||
if (stream->flags & UV_CLOSING)
|
||||
return -EINVAL;
|
||||
|
||||
- if (!(stream->flags & UV_STREAM_READABLE))
|
||||
- return -ENOTCONN;
|
||||
-
|
||||
/* The UV_STREAM_READING flag is irrelevant of the state of the tcp - it just
|
||||
* expresses the desired state of the user.
|
||||
*/
|
||||
diff --git a/src/unix/tcp.c b/src/unix/tcp.c
|
||||
index a4037851..c7c8d21c 100644
|
||||
--- a/src/unix/tcp.c
|
||||
+++ b/src/unix/tcp.c
|
||||
@@ -158,7 +158,9 @@ int uv__tcp_bind(uv_tcp_t* tcp,
|
||||
if ((flags & UV_TCP_IPV6ONLY) && addr->sa_family != AF_INET6)
|
||||
return -EINVAL;
|
||||
|
||||
- err = maybe_new_socket(tcp, addr->sa_family, 0);
|
||||
+ err = maybe_new_socket(tcp,
|
||||
+ addr->sa_family,
|
||||
+ UV_STREAM_READABLE | UV_STREAM_WRITABLE);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
@@ -333,14 +335,14 @@ int uv_tcp_listen(uv_tcp_t* tcp, int backlog, uv_connection_cb cb) {
|
||||
if (single_accept)
|
||||
tcp->flags |= UV_TCP_SINGLE_ACCEPT;
|
||||
|
||||
- flags = 0;
|
||||
+ flags = UV_STREAM_READABLE;
|
||||
#if defined(__MVS__)
|
||||
/* on zOS the listen call does not bind automatically
|
||||
if the socket is unbound. Hence the manual binding to
|
||||
an arbitrary port is required to be done manually
|
||||
*/
|
||||
flags |= UV_HANDLE_BOUND;
|
||||
-#endif
|
||||
+#endif
|
||||
err = maybe_new_socket(tcp, AF_INET, flags);
|
||||
if (err)
|
||||
return err;
|
||||
diff --git a/test/test-list.h b/test/test-list.h
|
||||
index d23cf866..8e4f2025 100644
|
||||
--- a/test/test-list.h
|
||||
+++ b/test/test-list.h
|
||||
@@ -94,7 +94,6 @@ TEST_DECLARE (tcp_bind_error_fault)
|
||||
TEST_DECLARE (tcp_bind_error_inval)
|
||||
TEST_DECLARE (tcp_bind_localhost_ok)
|
||||
TEST_DECLARE (tcp_bind_invalid_flags)
|
||||
-TEST_DECLARE (tcp_bind_writable_flags)
|
||||
TEST_DECLARE (tcp_listen_without_bind)
|
||||
TEST_DECLARE (tcp_connect_error_fault)
|
||||
TEST_DECLARE (tcp_connect_timeout)
|
||||
@@ -535,7 +534,6 @@ TASK_LIST_START
|
||||
TEST_ENTRY (tcp_bind_error_inval)
|
||||
TEST_ENTRY (tcp_bind_localhost_ok)
|
||||
TEST_ENTRY (tcp_bind_invalid_flags)
|
||||
- TEST_ENTRY (tcp_bind_writable_flags)
|
||||
TEST_ENTRY (tcp_listen_without_bind)
|
||||
TEST_ENTRY (tcp_connect_error_fault)
|
||||
TEST_ENTRY (tcp_connect_timeout)
|
||||
diff --git a/test/test-tcp-bind-error.c b/test/test-tcp-bind-error.c
|
||||
index 1456d081..10ed68e1 100644
|
||||
--- a/test/test-tcp-bind-error.c
|
||||
+++ b/test/test-tcp-bind-error.c
|
||||
@@ -214,45 +214,3 @@ TEST_IMPL(tcp_listen_without_bind) {
|
||||
MAKE_VALGRIND_HAPPY();
|
||||
return 0;
|
||||
}
|
||||
-
|
||||
-
|
||||
-TEST_IMPL(tcp_bind_writable_flags) {
|
||||
- struct sockaddr_in addr;
|
||||
- uv_tcp_t server;
|
||||
- uv_buf_t buf;
|
||||
- uv_write_t write_req;
|
||||
- uv_shutdown_t shutdown_req;
|
||||
- int r;
|
||||
-
|
||||
- ASSERT(0 == uv_ip4_addr("0.0.0.0", TEST_PORT, &addr));
|
||||
- r = uv_tcp_init(uv_default_loop(), &server);
|
||||
- ASSERT(r == 0);
|
||||
- r = uv_tcp_bind(&server, (const struct sockaddr*) &addr, 0);
|
||||
- ASSERT(r == 0);
|
||||
- r = uv_listen((uv_stream_t*)&server, 128, NULL);
|
||||
- ASSERT(r == 0);
|
||||
-
|
||||
- ASSERT(0 == uv_is_writable((uv_stream_t*) &server));
|
||||
- ASSERT(0 == uv_is_readable((uv_stream_t*) &server));
|
||||
-
|
||||
- buf = uv_buf_init("PING", 4);
|
||||
- r = uv_write(&write_req, (uv_stream_t*) &server, &buf, 1, NULL);
|
||||
- ASSERT(r == UV_EPIPE);
|
||||
- r = uv_shutdown(&shutdown_req, (uv_stream_t*) &server, NULL);
|
||||
-#ifdef _WIN32
|
||||
- ASSERT(r == UV_EPIPE);
|
||||
-#else
|
||||
- ASSERT(r == UV_ENOTCONN);
|
||||
-#endif
|
||||
- r = uv_read_start((uv_stream_t*) &server, NULL, NULL);
|
||||
- ASSERT(r == UV_ENOTCONN);
|
||||
-
|
||||
- uv_close((uv_handle_t*)&server, close_cb);
|
||||
-
|
||||
- uv_run(uv_default_loop(), UV_RUN_DEFAULT);
|
||||
-
|
||||
- ASSERT(close_cb_called == 1);
|
||||
-
|
||||
- MAKE_VALGRIND_HAPPY();
|
||||
- return 0;
|
||||
-}
|
||||
--
|
||||
2.15.1
|
||||
|
@ -1,442 +0,0 @@
|
||||
From a37559fdde9d08aad081a28f3118273f61f5a360 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Noordhuis <info@bnoordhuis.nl>
|
||||
Date: Fri, 19 Jan 2018 01:24:43 +0100
|
||||
Subject: [PATCH 2/3] Revert "unix,fs: fix for potential partial reads/writes"
|
||||
|
||||
This commit has been reported as introducing a backwards-incompatible
|
||||
change in reading from stdin and is independently suspected of breaking
|
||||
the Node.js test suite on MacOS and maybe other platforms, possibly in
|
||||
combination with commit fd049399 ("unix,tcp: avoid marking server
|
||||
sockets connected".)
|
||||
|
||||
This reverts commit 14bfc27e641aff178c431083c0c0eada4d6f02dd.
|
||||
|
||||
Fixes: https://github.com/libuv/libuv/issues/1716
|
||||
Fixes: https://github.com/libuv/libuv/issues/1720
|
||||
Fixes: https://github.com/nodejs/node/issues/18225
|
||||
---
|
||||
Makefile.am | 1 +
|
||||
src/unix/fs.c | 62 +++++++++++++++-------
|
||||
test/test-eintr-handling.c | 94 +++++++++++++++++++++++++++++++++
|
||||
test/test-fs.c | 127 +--------------------------------------------
|
||||
test/test-list.h | 6 +--
|
||||
uv.gyp | 1 +
|
||||
6 files changed, 141 insertions(+), 150 deletions(-)
|
||||
create mode 100644 test/test-eintr-handling.c
|
||||
|
||||
diff --git a/Makefile.am b/Makefile.am
|
||||
index c49802f7..ae9d96bc 100644
|
||||
--- a/Makefile.am
|
||||
+++ b/Makefile.am
|
||||
@@ -165,6 +165,7 @@ test_run_tests_SOURCES = test/blackhole-server.c \
|
||||
test/test-default-loop-close.c \
|
||||
test/test-delayed-accept.c \
|
||||
test/test-dlerror.c \
|
||||
+ test/test-eintr-handling.c \
|
||||
test/test-embed.c \
|
||||
test/test-emfile.c \
|
||||
test/test-env-vars.c \
|
||||
diff --git a/src/unix/fs.c b/src/unix/fs.c
|
||||
index 79864638..e0969a4c 100644
|
||||
--- a/src/unix/fs.c
|
||||
+++ b/src/unix/fs.c
|
||||
@@ -334,7 +334,25 @@ static ssize_t uv__fs_read(uv_fs_t* req) {
|
||||
if (no_preadv) retry:
|
||||
# endif
|
||||
{
|
||||
- result = pread(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
|
||||
+ off_t nread;
|
||||
+ size_t index;
|
||||
+
|
||||
+ nread = 0;
|
||||
+ index = 0;
|
||||
+ result = 1;
|
||||
+ do {
|
||||
+ if (req->bufs[index].len > 0) {
|
||||
+ result = pread(req->file,
|
||||
+ req->bufs[index].base,
|
||||
+ req->bufs[index].len,
|
||||
+ req->off + nread);
|
||||
+ if (result > 0)
|
||||
+ nread += result;
|
||||
+ }
|
||||
+ index++;
|
||||
+ } while (index < req->nbufs && result > 0);
|
||||
+ if (nread > 0)
|
||||
+ result = nread;
|
||||
}
|
||||
# if defined(__linux__)
|
||||
else {
|
||||
@@ -722,7 +740,25 @@ static ssize_t uv__fs_write(uv_fs_t* req) {
|
||||
if (no_pwritev) retry:
|
||||
# endif
|
||||
{
|
||||
- r = pwrite(req->file, req->bufs[0].base, req->bufs[0].len, req->off);
|
||||
+ off_t written;
|
||||
+ size_t index;
|
||||
+
|
||||
+ written = 0;
|
||||
+ index = 0;
|
||||
+ r = 0;
|
||||
+ do {
|
||||
+ if (req->bufs[index].len > 0) {
|
||||
+ r = pwrite(req->file,
|
||||
+ req->bufs[index].base,
|
||||
+ req->bufs[index].len,
|
||||
+ req->off + written);
|
||||
+ if (r > 0)
|
||||
+ written += r;
|
||||
+ }
|
||||
+ index++;
|
||||
+ } while (index < req->nbufs && r >= 0);
|
||||
+ if (written > 0)
|
||||
+ r = written;
|
||||
}
|
||||
# if defined(__linux__)
|
||||
else {
|
||||
@@ -972,19 +1008,6 @@ static int uv__fs_fstat(int fd, uv_stat_t *buf) {
|
||||
return ret;
|
||||
}
|
||||
|
||||
-static size_t uv__fs_buf_offset(uv_buf_t* bufs, size_t size) {
|
||||
- size_t offset;
|
||||
- /* Figure out which bufs are done */
|
||||
- for (offset = 0; size > 0 && bufs[offset].len <= size; ++offset)
|
||||
- size -= bufs[offset].len;
|
||||
-
|
||||
- /* Fix a partial read/write */
|
||||
- if (size > 0) {
|
||||
- bufs[offset].base += size;
|
||||
- bufs[offset].len -= size;
|
||||
- }
|
||||
- return offset;
|
||||
-}
|
||||
|
||||
typedef ssize_t (*uv__fs_buf_iter_processor)(uv_fs_t* req);
|
||||
static ssize_t uv__fs_buf_iter(uv_fs_t* req, uv__fs_buf_iter_processor process) {
|
||||
@@ -1004,10 +1027,7 @@ static ssize_t uv__fs_buf_iter(uv_fs_t* req, uv__fs_buf_iter_processor process)
|
||||
if (req->nbufs > iovmax)
|
||||
req->nbufs = iovmax;
|
||||
|
||||
- do
|
||||
- result = process(req);
|
||||
- while (result < 0 && errno == EINTR);
|
||||
-
|
||||
+ result = process(req);
|
||||
if (result <= 0) {
|
||||
if (total == 0)
|
||||
total = result;
|
||||
@@ -1017,12 +1037,14 @@ static ssize_t uv__fs_buf_iter(uv_fs_t* req, uv__fs_buf_iter_processor process)
|
||||
if (req->off >= 0)
|
||||
req->off += result;
|
||||
|
||||
- req->nbufs = uv__fs_buf_offset(req->bufs, result);
|
||||
req->bufs += req->nbufs;
|
||||
nbufs -= req->nbufs;
|
||||
total += result;
|
||||
}
|
||||
|
||||
+ if (errno == EINTR && total == -1)
|
||||
+ return total;
|
||||
+
|
||||
if (bufs != req->bufsml)
|
||||
uv__free(bufs);
|
||||
|
||||
diff --git a/test/test-eintr-handling.c b/test/test-eintr-handling.c
|
||||
new file mode 100644
|
||||
index 00000000..1aaf623b
|
||||
--- /dev/null
|
||||
+++ b/test/test-eintr-handling.c
|
||||
@@ -0,0 +1,94 @@
|
||||
+/* Copyright libuv project 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"
|
||||
+
|
||||
+#ifdef _WIN32
|
||||
+
|
||||
+TEST_IMPL(eintr_handling) {
|
||||
+ RETURN_SKIP("Test not implemented on Windows.");
|
||||
+}
|
||||
+
|
||||
+#else /* !_WIN32 */
|
||||
+
|
||||
+#include <string.h>
|
||||
+#include <unistd.h>
|
||||
+
|
||||
+static uv_loop_t* loop;
|
||||
+static uv_fs_t read_req;
|
||||
+static uv_buf_t iov;
|
||||
+
|
||||
+static char buf[32];
|
||||
+static char test_buf[] = "test-buffer\n";
|
||||
+int pipe_fds[2];
|
||||
+
|
||||
+struct thread_ctx {
|
||||
+ uv_barrier_t barrier;
|
||||
+ int fd;
|
||||
+};
|
||||
+
|
||||
+static void thread_main(void* arg) {
|
||||
+ int nwritten;
|
||||
+ ASSERT(0 == kill(getpid(), SIGUSR1));
|
||||
+
|
||||
+ do
|
||||
+ nwritten = write(pipe_fds[1], test_buf, sizeof(test_buf));
|
||||
+ while (nwritten == -1 && errno == EINTR);
|
||||
+
|
||||
+ ASSERT(nwritten == sizeof(test_buf));
|
||||
+}
|
||||
+
|
||||
+static void sig_func(uv_signal_t* handle, int signum) {
|
||||
+ uv_signal_stop(handle);
|
||||
+}
|
||||
+
|
||||
+TEST_IMPL(eintr_handling) {
|
||||
+ struct thread_ctx ctx;
|
||||
+ uv_thread_t thread;
|
||||
+ uv_signal_t signal;
|
||||
+ int nread;
|
||||
+
|
||||
+ iov = uv_buf_init(buf, sizeof(buf));
|
||||
+ loop = uv_default_loop();
|
||||
+
|
||||
+ ASSERT(0 == uv_signal_init(loop, &signal));
|
||||
+ ASSERT(0 == uv_signal_start(&signal, sig_func, SIGUSR1));
|
||||
+
|
||||
+ ASSERT(0 == pipe(pipe_fds));
|
||||
+ ASSERT(0 == uv_thread_create(&thread, thread_main, &ctx));
|
||||
+
|
||||
+ nread = uv_fs_read(loop, &read_req, pipe_fds[0], &iov, 1, -1, NULL);
|
||||
+
|
||||
+ ASSERT(nread == sizeof(test_buf));
|
||||
+ ASSERT(0 == strcmp(buf, test_buf));
|
||||
+
|
||||
+ ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
|
||||
+
|
||||
+ ASSERT(0 == close(pipe_fds[0]));
|
||||
+ ASSERT(0 == close(pipe_fds[1]));
|
||||
+ uv_close((uv_handle_t*) &signal, NULL);
|
||||
+
|
||||
+ MAKE_VALGRIND_HAPPY();
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+#endif /* !_WIN32 */
|
||||
diff --git a/test/test-fs.c b/test/test-fs.c
|
||||
index d43d6e61..241416bc 100644
|
||||
--- a/test/test-fs.c
|
||||
+++ b/test/test-fs.c
|
||||
@@ -2890,131 +2890,6 @@ TEST_IMPL(fs_write_alotof_bufs_with_offset) {
|
||||
}
|
||||
|
||||
|
||||
-#ifdef _WIN32
|
||||
-
|
||||
-TEST_IMPL(fs_partial_read) {
|
||||
- RETURN_SKIP("Test not implemented on Windows.");
|
||||
-}
|
||||
-
|
||||
-TEST_IMPL(fs_partial_write) {
|
||||
- RETURN_SKIP("Test not implemented on Windows.");
|
||||
-}
|
||||
-
|
||||
-#else /* !_WIN32 */
|
||||
-
|
||||
-static void thread_exec(int fd, char* data, int size, int interval, int doread) {
|
||||
- pid_t pid;
|
||||
- ssize_t result;
|
||||
-
|
||||
- pid = getpid();
|
||||
- result = 1;
|
||||
-
|
||||
- while (size > 0 && result > 0) {
|
||||
- do {
|
||||
- if (doread)
|
||||
- result = write(fd, data, size < interval ? size : interval);
|
||||
- else
|
||||
- result = read(fd, data, size < interval ? size : interval);
|
||||
- } while (result == -1 && errno == EINTR);
|
||||
-
|
||||
- kill(pid, SIGUSR1);
|
||||
- size -= result;
|
||||
- data += result;
|
||||
- }
|
||||
-
|
||||
- ASSERT(size == 0);
|
||||
- ASSERT(result > 0);
|
||||
-}
|
||||
-
|
||||
-struct thread_ctx {
|
||||
- int fd;
|
||||
- char *data;
|
||||
- int size;
|
||||
- int interval;
|
||||
- int doread;
|
||||
-};
|
||||
-
|
||||
-static void thread_main(void* arg) {
|
||||
- struct thread_ctx *ctx;
|
||||
- ctx = (struct thread_ctx*)arg;
|
||||
- thread_exec(ctx->fd, ctx->data, ctx->size, ctx->interval, ctx->doread);
|
||||
-}
|
||||
-
|
||||
-static void sig_func(uv_signal_t* handle, int signum) {
|
||||
- uv_signal_stop(handle);
|
||||
-}
|
||||
-
|
||||
-static void test_fs_partial(int doread) {
|
||||
- struct thread_ctx ctx;
|
||||
- uv_thread_t thread;
|
||||
- uv_signal_t signal;
|
||||
- int pipe_fds[2];
|
||||
- size_t iovcount;
|
||||
- uv_buf_t* iovs;
|
||||
- char* buffer;
|
||||
- size_t index;
|
||||
- int result;
|
||||
-
|
||||
- iovcount = 54321;
|
||||
-
|
||||
- iovs = malloc(sizeof(*iovs) * iovcount);
|
||||
- ASSERT(iovs != NULL);
|
||||
-
|
||||
- ctx.doread = doread;
|
||||
- ctx.interval = 1000;
|
||||
- ctx.size = sizeof(test_buf) * iovcount;
|
||||
- ctx.data = malloc(ctx.size);
|
||||
- ASSERT(ctx.data != NULL);
|
||||
- buffer = malloc(ctx.size);
|
||||
- ASSERT(buffer != NULL);
|
||||
-
|
||||
- for (index = 0; index < iovcount; ++index)
|
||||
- iovs[index] = uv_buf_init(buffer + index * sizeof(test_buf), sizeof(test_buf));
|
||||
-
|
||||
- loop = uv_default_loop();
|
||||
-
|
||||
- ASSERT(0 == uv_signal_init(loop, &signal));
|
||||
- ASSERT(0 == uv_signal_start(&signal, sig_func, SIGUSR1));
|
||||
-
|
||||
- ASSERT(0 == pipe(pipe_fds));
|
||||
-
|
||||
- ctx.fd = pipe_fds[doread];
|
||||
- ASSERT(0 == uv_thread_create(&thread, thread_main, &ctx));
|
||||
-
|
||||
- if (doread)
|
||||
- result = uv_fs_read(loop, &read_req, pipe_fds[0], iovs, iovcount, -1, NULL);
|
||||
- else
|
||||
- result = uv_fs_write(loop, &write_req, pipe_fds[1], iovs, iovcount, -1, NULL);
|
||||
-
|
||||
- ASSERT(result == ctx.size);
|
||||
- ASSERT(0 == memcmp(buffer, ctx.data, result));
|
||||
-
|
||||
- ASSERT(0 == uv_thread_join(&thread));
|
||||
- ASSERT(0 == uv_run(loop, UV_RUN_DEFAULT));
|
||||
-
|
||||
- ASSERT(0 == close(pipe_fds[0]));
|
||||
- ASSERT(0 == close(pipe_fds[1]));
|
||||
- uv_close((uv_handle_t*) &signal, NULL);
|
||||
-
|
||||
- free(iovs);
|
||||
- free(buffer);
|
||||
- free(ctx.data);
|
||||
-
|
||||
- MAKE_VALGRIND_HAPPY();
|
||||
-}
|
||||
-
|
||||
-TEST_IMPL(fs_partial_read) {
|
||||
- test_fs_partial(1);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-TEST_IMPL(fs_partial_write) {
|
||||
- test_fs_partial(0);
|
||||
- return 0;
|
||||
-}
|
||||
-
|
||||
-#endif/* _WIN32 */
|
||||
-
|
||||
TEST_IMPL(fs_read_write_null_arguments) {
|
||||
int r;
|
||||
|
||||
@@ -3223,7 +3098,7 @@ TEST_IMPL(fs_exclusive_sharing_mode) {
|
||||
unlink("test_file");
|
||||
|
||||
ASSERT(UV_FS_O_EXLOCK > 0);
|
||||
-
|
||||
+
|
||||
r = uv_fs_open(NULL,
|
||||
&open_req1,
|
||||
"test_file",
|
||||
diff --git a/test/test-list.h b/test/test-list.h
|
||||
index 8e4f2025..5a50ec67 100644
|
||||
--- a/test/test-list.h
|
||||
+++ b/test/test-list.h
|
||||
@@ -213,6 +213,7 @@ TEST_DECLARE (active)
|
||||
TEST_DECLARE (embed)
|
||||
TEST_DECLARE (async)
|
||||
TEST_DECLARE (async_null_cb)
|
||||
+TEST_DECLARE (eintr_handling)
|
||||
TEST_DECLARE (get_currentexe)
|
||||
TEST_DECLARE (process_title)
|
||||
TEST_DECLARE (process_title_threadsafe)
|
||||
@@ -324,8 +325,6 @@ TEST_DECLARE (fs_read_write_null_arguments)
|
||||
TEST_DECLARE (get_osfhandle_valid_handle)
|
||||
TEST_DECLARE (fs_write_alotof_bufs)
|
||||
TEST_DECLARE (fs_write_alotof_bufs_with_offset)
|
||||
-TEST_DECLARE (fs_partial_read)
|
||||
-TEST_DECLARE (fs_partial_write)
|
||||
TEST_DECLARE (fs_file_pos_after_op_with_offset)
|
||||
TEST_DECLARE (fs_null_req)
|
||||
#ifdef _WIN32
|
||||
@@ -675,6 +674,7 @@ TASK_LIST_START
|
||||
|
||||
TEST_ENTRY (async)
|
||||
TEST_ENTRY (async_null_cb)
|
||||
+ TEST_ENTRY (eintr_handling)
|
||||
|
||||
TEST_ENTRY (get_currentexe)
|
||||
|
||||
@@ -848,8 +848,6 @@ TASK_LIST_START
|
||||
TEST_ENTRY (fs_write_multiple_bufs)
|
||||
TEST_ENTRY (fs_write_alotof_bufs)
|
||||
TEST_ENTRY (fs_write_alotof_bufs_with_offset)
|
||||
- TEST_ENTRY (fs_partial_read)
|
||||
- TEST_ENTRY (fs_partial_write)
|
||||
TEST_ENTRY (fs_read_write_null_arguments)
|
||||
TEST_ENTRY (fs_file_pos_after_op_with_offset)
|
||||
TEST_ENTRY (fs_null_req)
|
||||
diff --git a/uv.gyp b/uv.gyp
|
||||
index 19008dfa..46606c5b 100644
|
||||
--- a/uv.gyp
|
||||
+++ b/uv.gyp
|
||||
@@ -371,6 +371,7 @@
|
||||
'test/test-cwd-and-chdir.c',
|
||||
'test/test-default-loop-close.c',
|
||||
'test/test-delayed-accept.c',
|
||||
+ 'test/test-eintr-handling.c',
|
||||
'test/test-error.c',
|
||||
'test/test-embed.c',
|
||||
'test/test-emfile.c',
|
||||
--
|
||||
2.15.1
|
||||
|
@ -1,99 +0,0 @@
|
||||
From c9ebff2c73a6130587534527386a7d398be94d58 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Noordhuis <info@bnoordhuis.nl>
|
||||
Date: Fri, 19 Jan 2018 01:24:43 +0100
|
||||
Subject: [PATCH 3/3] Revert "win: use RemoveDirectoryW() instead of
|
||||
_wmrmdir()"
|
||||
|
||||
Reverted for breaking `test/parallel/test-child-process-cwd.js` from the
|
||||
Node.js test suite. Instead of ENOENT when trying to remove a directory
|
||||
that does not exist, it started failing with ENOTDIR.
|
||||
|
||||
This reverts commit 15f29dc08fe72cd189002f1b8ae22fd82264deef.
|
||||
---
|
||||
src/win/error.c | 2 +-
|
||||
src/win/fs.c | 7 ++-----
|
||||
test/test-fs.c | 22 ++++------------------
|
||||
3 files changed, 7 insertions(+), 24 deletions(-)
|
||||
|
||||
diff --git a/src/win/error.c b/src/win/error.c
|
||||
index 1ec3d6e2..9b03bfef 100644
|
||||
--- a/src/win/error.c
|
||||
+++ b/src/win/error.c
|
||||
@@ -131,7 +131,7 @@ int uv_translate_sys_error(int sys_errno) {
|
||||
case WSAENETUNREACH: return UV_ENETUNREACH;
|
||||
case WSAENOBUFS: return UV_ENOBUFS;
|
||||
case ERROR_BAD_PATHNAME: return UV_ENOENT;
|
||||
- case ERROR_DIRECTORY: return UV_ENOTDIR;
|
||||
+ case ERROR_DIRECTORY: return UV_ENOENT;
|
||||
case ERROR_FILE_NOT_FOUND: return UV_ENOENT;
|
||||
case ERROR_INVALID_NAME: return UV_ENOENT;
|
||||
case ERROR_INVALID_DRIVE: return UV_ENOENT;
|
||||
diff --git a/src/win/fs.c b/src/win/fs.c
|
||||
index 0905a24e..097b00e0 100644
|
||||
--- a/src/win/fs.c
|
||||
+++ b/src/win/fs.c
|
||||
@@ -723,11 +723,8 @@ void fs__write(uv_fs_t* req) {
|
||||
|
||||
|
||||
void fs__rmdir(uv_fs_t* req) {
|
||||
- if (RemoveDirectoryW(req->file.pathw)) {
|
||||
- SET_REQ_SUCCESS(req);
|
||||
- } else {
|
||||
- SET_REQ_WIN32_ERROR(req, GetLastError());
|
||||
- }
|
||||
+ int result = _wrmdir(req->file.pathw);
|
||||
+ SET_REQ_RESULT(req, result);
|
||||
}
|
||||
|
||||
|
||||
diff --git a/test/test-fs.c b/test/test-fs.c
|
||||
index 241416bc..7c481f07 100644
|
||||
--- a/test/test-fs.c
|
||||
+++ b/test/test-fs.c
|
||||
@@ -469,19 +469,10 @@ static void mkdtemp_cb(uv_fs_t* req) {
|
||||
static void rmdir_cb(uv_fs_t* req) {
|
||||
ASSERT(req == &rmdir_req);
|
||||
ASSERT(req->fs_type == UV_FS_RMDIR);
|
||||
+ ASSERT(req->result == 0);
|
||||
+ rmdir_cb_count++;
|
||||
ASSERT(req->path);
|
||||
- switch (rmdir_cb_count++) {
|
||||
- default:
|
||||
- ASSERT(0);
|
||||
- case 0:
|
||||
- ASSERT(req->result == UV_ENOTDIR);
|
||||
- ASSERT(memcmp(req->path, "test_dir/file1\0", 15) == 0);
|
||||
- break;
|
||||
- case 1:
|
||||
- ASSERT(req->result == 0);
|
||||
- ASSERT(memcmp(req->path, "test_dir\0", 9) == 0);
|
||||
- break;
|
||||
- }
|
||||
+ ASSERT(memcmp(req->path, "test_dir\0", 9) == 0);
|
||||
uv_fs_req_cleanup(req);
|
||||
}
|
||||
|
||||
@@ -995,11 +986,6 @@ TEST_IMPL(fs_async_dir) {
|
||||
|
||||
ASSERT(stat_cb_count == 4);
|
||||
|
||||
- r = uv_fs_rmdir(loop, &rmdir_req, "test_dir/file1", rmdir_cb);
|
||||
- ASSERT(r == 0);
|
||||
- uv_run(loop, UV_RUN_DEFAULT);
|
||||
- ASSERT(rmdir_cb_count == 1);
|
||||
-
|
||||
r = uv_fs_unlink(loop, &unlink_req, "test_dir/file1", unlink_cb);
|
||||
ASSERT(r == 0);
|
||||
uv_run(loop, UV_RUN_DEFAULT);
|
||||
@@ -1013,7 +999,7 @@ TEST_IMPL(fs_async_dir) {
|
||||
r = uv_fs_rmdir(loop, &rmdir_req, "test_dir", rmdir_cb);
|
||||
ASSERT(r == 0);
|
||||
uv_run(loop, UV_RUN_DEFAULT);
|
||||
- ASSERT(rmdir_cb_count == 2);
|
||||
+ ASSERT(rmdir_cb_count == 1);
|
||||
|
||||
/* Cleanup */
|
||||
unlink("test_dir/file1");
|
||||
--
|
||||
2.15.1
|
||||
|
11
libuv.spec
11
libuv.spec
@ -1,7 +1,7 @@
|
||||
Name: libuv
|
||||
Epoch: 1
|
||||
Version: 1.19.0
|
||||
Release: 2%{?dist}
|
||||
Version: 1.19.1
|
||||
Release: 1%{?dist}
|
||||
Summary: Platform layer for node.js
|
||||
|
||||
# the licensing breakdown is described in detail in the LICENSE file
|
||||
@ -9,10 +9,6 @@ License: MIT and BSD and ISC
|
||||
URL: http://libuv.org/
|
||||
Source0: http://dist.libuv.org/dist/v%{version}/libuv-v%{version}.tar.gz
|
||||
Source2: %{name}.pc.in
|
||||
# https://github.com/libuv/libuv/pull/1717
|
||||
Patch0001: 0001-Revert-unix-tcp-avoid-marking-server-sockets-connect.patch
|
||||
Patch0002: 0002-Revert-unix-fs-fix-for-potential-partial-reads-write.patch
|
||||
Patch0003: 0003-Revert-win-use-RemoveDirectoryW-instead-of-_wmrmdir.patch
|
||||
|
||||
BuildRequires: autoconf automake libtool
|
||||
BuildRequires: gcc
|
||||
@ -72,6 +68,9 @@ rm -f %{buildroot}%{_libdir}/libuv.la
|
||||
%{_libdir}/%{name}.a
|
||||
|
||||
%changelog
|
||||
* Sat Jan 20 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:1.19.1-1
|
||||
- Update to 1.19.1
|
||||
|
||||
* Fri Jan 19 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 1:1.19.0-2
|
||||
- Revert few commits which cause regression for nodejs
|
||||
|
||||
|
2
sources
2
sources
@ -1 +1 @@
|
||||
SHA512 (libuv-v1.19.0.tar.gz) = 189f76e7808b8f228a91f1b1722d2325652358aab838f78c1ded44e44158fea68b77a981cbb6e2a385d5915a6db59d433bd4c9232170976139145bece1482cdb
|
||||
SHA512 (libuv-v1.19.1.tar.gz) = 516b17afe5ea12f5c53abe68ea5fac9853f20c89fff754c054c041bb9d88a55e5a691842e509348617444f6080311c963707dd272c91c7ff7baf2c4d516b2d7f
|
||||
|
Loading…
Reference in New Issue
Block a user