diff --git a/deps/uv/include/uv.h b/deps/uv/include/uv.h index 9b0e76b980..600d512331 100644 --- a/deps/uv/include/uv.h +++ b/deps/uv/include/uv.h @@ -316,8 +316,8 @@ typedef void (*uv_fs_event_cb)(uv_fs_event_t* handle, const char* filename, typedef void (*uv_fs_poll_cb)(uv_fs_poll_t* handle, int status, - uv_statbuf_t* prev, - uv_statbuf_t* curr); + const uv_statbuf_t* prev, + const uv_statbuf_t* curr); typedef enum { UV_LEAVE_GROUP = 0, diff --git a/deps/uv/src/fs-poll.c b/deps/uv/src/fs-poll.c index 61438f916f..99d3bcfae9 100644 --- a/deps/uv/src/fs-poll.c +++ b/deps/uv/src/fs-poll.c @@ -30,6 +30,8 @@ static int statbuf_eq(const uv_statbuf_t* a, const uv_statbuf_t* b); static void timer_cb(uv_timer_t* timer, int status); static void poll_cb(uv_fs_t* req); +static uv_statbuf_t zero_statbuf; + int uv_fs_poll_init(uv_loop_t* loop, uv_fs_poll_t* handle) { /* TODO(bnoordhuis) Mark fs_req internal. */ @@ -141,7 +143,7 @@ static void poll_cb(uv_fs_t* req) { if (req->result != 0) { if (handle->busy_polling != -req->errorno) { uv__set_artificial_error(handle->loop, req->errorno); - handle->poll_cb(handle, -1, NULL, NULL); + handle->poll_cb(handle, -1, &handle->statbuf, &zero_statbuf); handle->busy_polling = -req->errorno; } goto out; diff --git a/deps/uv/src/win/fs.c b/deps/uv/src/win/fs.c index b6b9739396..e2a328d8ad 100644 --- a/deps/uv/src/win/fs.c +++ b/deps/uv/src/win/fs.c @@ -56,7 +56,7 @@ #define QUEUE_FS_TP_JOB(loop, req) \ if (!QueueUserWorkItem(&uv_fs_thread_proc, \ req, \ - WT_EXECUTELONGFUNCTION)) { \ + WT_EXECUTEDEFAULT)) { \ uv__set_sys_error((loop), GetLastError()); \ return -1; \ } \ diff --git a/deps/uv/test/test-fs-poll.c b/deps/uv/test/test-fs-poll.c index d1c90e2ce2..00a73b6c99 100644 --- a/deps/uv/test/test-fs-poll.c +++ b/deps/uv/test/test-fs-poll.c @@ -30,8 +30,8 @@ static void timer_cb(uv_timer_t* handle, int status); static void close_cb(uv_handle_t* handle); static void poll_cb(uv_fs_poll_t* handle, int status, - uv_statbuf_t* prev, - uv_statbuf_t* curr); + const uv_statbuf_t* prev, + const uv_statbuf_t* curr); static uv_fs_poll_t poll_handle; static uv_timer_t timer_handle; @@ -74,50 +74,49 @@ static void timer_cb(uv_timer_t* handle, int status) { static void poll_cb(uv_fs_poll_t* handle, int status, - uv_statbuf_t* prev, - uv_statbuf_t* curr) { + const uv_statbuf_t* prev, + const uv_statbuf_t* curr) { + const static uv_statbuf_t zero_statbuf; + ASSERT(handle == &poll_handle); ASSERT(uv_is_active((uv_handle_t*)handle)); + ASSERT(prev != NULL); + ASSERT(curr != NULL); switch (poll_cb_called++) { case 0: ASSERT(status == -1); - ASSERT(prev == NULL); - ASSERT(curr == NULL); ASSERT(uv_last_error(loop).code == UV_ENOENT); + ASSERT(0 == memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); + ASSERT(0 == memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); touch_file(FIXTURE); break; case 1: ASSERT(status == 0); - ASSERT(prev != NULL); - ASSERT(curr != NULL); - { - uv_statbuf_t buf; - memset(&buf, 0, sizeof(buf)); - ASSERT(0 == memcmp(&buf, prev, sizeof(buf))); - } + ASSERT(0 == memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); + ASSERT(0 != memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 20, 0)); break; case 2: ASSERT(status == 0); - ASSERT(prev != NULL); - ASSERT(curr != NULL); + ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); + ASSERT(0 != memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); ASSERT(0 == uv_timer_start(&timer_handle, timer_cb, 200, 0)); break; case 3: ASSERT(status == 0); - ASSERT(prev != NULL); - ASSERT(curr != NULL); + ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); + ASSERT(0 != memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); remove(FIXTURE); break; case 4: ASSERT(status == -1); - ASSERT(prev == NULL); - ASSERT(curr == NULL); + ASSERT(0 != memcmp(prev, &zero_statbuf, sizeof(zero_statbuf))); + ASSERT(0 == memcmp(curr, &zero_statbuf, sizeof(zero_statbuf))); ASSERT(uv_last_error(loop).code == UV_ENOENT); uv_close((uv_handle_t*)handle, close_cb); break;