diff options
author | Saúl Ibarra Corretgé <saghul@gmail.com> | 2014-12-09 21:01:35 +0100 |
---|---|---|
committer | Trevor Norris <trev.norris@gmail.com> | 2014-12-09 17:03:50 -0800 |
commit | 20a7088d9c62c43fedf9ab077fbbeae92c7e6617 (patch) | |
tree | cd62507bde03fff1e59de67338f2b406d2221bdd /deps/uv/src/unix/sunos.c | |
parent | 4dc660e164417e0a1bc86eadd825b41d7abb053f (diff) | |
download | android-node-v8-20a7088d9c62c43fedf9ab077fbbeae92c7e6617.tar.gz android-node-v8-20a7088d9c62c43fedf9ab077fbbeae92c7e6617.tar.bz2 android-node-v8-20a7088d9c62c43fedf9ab077fbbeae92c7e6617.zip |
deps: update libuv to 1.0.2
PR-URL: https://github.com/joyent/node/pull/8847
Reviewed-by: Trevor Norris <trev.norris@gmail.com>
Diffstat (limited to 'deps/uv/src/unix/sunos.c')
-rw-r--r-- | deps/uv/src/unix/sunos.c | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/deps/uv/src/unix/sunos.c b/deps/uv/src/unix/sunos.c index a630dba759..d6fb7f4950 100644 --- a/deps/uv/src/unix/sunos.c +++ b/deps/uv/src/unix/sunos.c @@ -122,6 +122,8 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { struct timespec spec; QUEUE* q; uv__io_t* w; + sigset_t* pset; + sigset_t set; uint64_t base; uint64_t diff; unsigned int nfds; @@ -129,6 +131,7 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { int saved_errno; int nevents; int count; + int err; int fd; if (loop->nfds == 0) { @@ -150,6 +153,13 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { w->events = w->pevents; } + pset = NULL; + if (loop->flags & UV_LOOP_BLOCK_SIGPROF) { + pset = &set; + sigemptyset(pset); + sigaddset(pset, SIGPROF); + } + assert(timeout >= -1); base = loop->time; count = 48; /* Benchmarks suggest this gives the best throughput. */ @@ -165,11 +175,20 @@ void uv__io_poll(uv_loop_t* loop, int timeout) { nfds = 1; saved_errno = 0; - if (port_getn(loop->backend_fd, - events, - ARRAY_SIZE(events), - &nfds, - timeout == -1 ? NULL : &spec)) { + + if (pset != NULL) + pthread_sigmask(SIG_BLOCK, pset, NULL); + + err = port_getn(loop->backend_fd, + events, + ARRAY_SIZE(events), + &nfds, + timeout == -1 ? NULL : &spec); + + if (pset != NULL) + pthread_sigmask(SIG_UNBLOCK, pset, NULL); + + if (err) { /* Work around another kernel bug: port_getn() may return events even * on error. */ |