diff options
author | Keith M Wesolowski <wesolows@foobazco.org> | 2014-07-25 18:15:19 +0000 |
---|---|---|
committer | Keith M Wesolowski <wesolows@foobazco.org> | 2014-07-25 18:15:19 +0000 |
commit | 3ccf87ddeef0352eef6e3ff1e038aae41910d6e5 (patch) | |
tree | 93942c3854b80bd52f9eddbfec129ccea5ef185f /usr/src | |
parent | 84afacb322b8f59b7e7bd8f849a9382603894443 (diff) | |
parent | d690b62cf13675007342e6bb43d4816ec57a46dd (diff) | |
download | illumos-joyent-3ccf87ddeef0352eef6e3ff1e038aae41910d6e5.tar.gz |
[illumos-gate merge]
commit d690b62cf13675007342e6bb43d4816ec57a46dd
5026 intra-node/inter-zone networking doesn't always deliver SIGPOLL
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/uts/common/fs/sockfs/sockcommon_subr.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/usr/src/uts/common/fs/sockfs/sockcommon_subr.c b/usr/src/uts/common/fs/sockfs/sockcommon_subr.c index 00ab44e44c..957c8f93b4 100644 --- a/usr/src/uts/common/fs/sockfs/sockcommon_subr.c +++ b/usr/src/uts/common/fs/sockfs/sockcommon_subr.c @@ -22,6 +22,9 @@ /* * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved. */ +/* + * Copyright 2014, OmniTI Computer Consulting, Inc. All rights reserved. + */ #include <sys/types.h> #include <sys/param.h> @@ -396,7 +399,12 @@ socket_sendsig(struct sonode *so, int event) * the proc is active. */ mutex_enter(&pidlock); - proc = prfind(so->so_pgrp); + /* + * Even if the thread started in another zone, we're receiving + * on behalf of this socket's zone, so find the proc using the + * socket's zone ID. + */ + proc = prfind_zone(so->so_pgrp, so->so_zoneid); if (proc == NULL) { mutex_exit(&pidlock); return; @@ -413,7 +421,12 @@ socket_sendsig(struct sonode *so, int event) pid_t pgrp = -so->so_pgrp; mutex_enter(&pidlock); - proc = pgfind(pgrp); + /* + * Even if the thread started in another zone, we're receiving + * on behalf of this socket's zone, so find the pgrp using the + * socket's zone ID. + */ + proc = pgfind_zone(pgrp, so->so_zoneid); while (proc != NULL) { mutex_enter(&proc->p_lock); socket_sigproc(proc, event); |