Print this page
5026 intra-node/inter-zone networking doesn't always deliver SIGPOLL

*** 20,29 **** --- 20,32 ---- */ /* * 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> #include <sys/signal.h> #include <sys/cmn_err.h>
*** 394,404 **** * XXX This unfortunately still generates * a signal when a fd is closed but * the proc is active. */ mutex_enter(&pidlock); ! proc = prfind(so->so_pgrp); if (proc == NULL) { mutex_exit(&pidlock); return; } mutex_enter(&proc->p_lock); --- 397,412 ---- * XXX This unfortunately still generates * a signal when a fd is closed but * the proc is active. */ mutex_enter(&pidlock); ! /* ! * 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; } mutex_enter(&proc->p_lock);
*** 411,421 **** * calls to socket_sigproc(). */ pid_t pgrp = -so->so_pgrp; mutex_enter(&pidlock); ! proc = pgfind(pgrp); while (proc != NULL) { mutex_enter(&proc->p_lock); socket_sigproc(proc, event); mutex_exit(&proc->p_lock); proc = proc->p_pglink; --- 419,434 ---- * calls to socket_sigproc(). */ pid_t pgrp = -so->so_pgrp; mutex_enter(&pidlock); ! /* ! * 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); mutex_exit(&proc->p_lock); proc = proc->p_pglink;