summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/sunos.c
diff options
context:
space:
mode:
authorSaúl Ibarra Corretgé <saghul@gmail.com>2014-12-09 21:01:35 +0100
committerTrevor Norris <trev.norris@gmail.com>2014-12-09 17:03:50 -0800
commit20a7088d9c62c43fedf9ab077fbbeae92c7e6617 (patch)
treecd62507bde03fff1e59de67338f2b406d2221bdd /deps/uv/src/unix/sunos.c
parent4dc660e164417e0a1bc86eadd825b41d7abb053f (diff)
downloadandroid-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.c29
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.
*/