diff options
author | jmallett <jmallett@FreeBSD.org> | 2002-10-01 02:49:28 +0000 |
---|---|---|
committer | jmallett <jmallett@FreeBSD.org> | 2002-10-01 02:49:28 +0000 |
commit | 588e26e5807de462fc0a42e10dc64aac725a1a55 (patch) | |
tree | adc4890ec34b358e58188997d220ffe786db1845 | |
parent | 40b01ec7437df0d735a813560653e3248d114411 (diff) | |
download | FreeBSD-src-588e26e5807de462fc0a42e10dc64aac725a1a55.zip FreeBSD-src-588e26e5807de462fc0a42e10dc64aac725a1a55.tar.gz |
When working with sigset_t's, and needing to perform masking operations based
on a process's pending signals, use the signal queue flattener,
ksiginfo_to_sigset_t, on the process, and on a local sigset_t, and then work
with that as needed.
-rw-r--r-- | sys/coda/coda_psdev.c | 18 | ||||
-rw-r--r-- | sys/fs/coda/coda_psdev.c | 18 | ||||
-rw-r--r-- | sys/i386/ibcs2/ibcs2_signal.c | 2 |
3 files changed, 23 insertions, 15 deletions
diff --git a/sys/coda/coda_psdev.c b/sys/coda/coda_psdev.c index 392012b..19d4703 100644 --- a/sys/coda/coda_psdev.c +++ b/sys/coda/coda_psdev.c @@ -63,6 +63,7 @@ extern int coda_nc_initialized; /* Set if cache has been initialized */ #include <sys/lock.h> #include <sys/malloc.h> #include <sys/file.h> /* must come after sys/malloc.h */ +#include <sys/ksiginfo.h> #include <sys/mount.h> #include <sys/mutex.h> #include <sys/poll.h> @@ -491,6 +492,7 @@ coda_call(mntinfo, inSize, outSize, buffer) #ifdef CTL_C struct thread *td = curthread; struct proc *p = td->td_proc; + sigset_t pending_set; sigset_t psig_omask; sigset_t tempset; int i; @@ -561,18 +563,20 @@ coda_call(mntinfo, inSize, outSize, buffer) #endif } else { + ksiginfo_to_sigset_t(p, &pending_set); SIGEMPTYSET(tempset); SIGADDSET(tempset, SIGIO); - if (SIGSETEQ(p->p_siglist, tempset)) { + if (SIGSETEQ(pending_set, tempset)) { SIGADDSET(p->p_sigmask, SIGIO); #ifdef CODA_VERBOSE printf("coda_call: tsleep returns %d SIGIO, cnt %d\n", error, i); #endif } else { + ksiginfo_to_sigset_t(p, &pending_set); SIGDELSET(tempset, SIGIO); SIGADDSET(tempset, SIGALRM); - if (SIGSETEQ(p->p_siglist, tempset)) { + if (SIGSETEQ(pending_set, tempset)) { SIGADDSET(p->p_sigmask, SIGALRM); #ifdef CODA_VERBOSE printf("coda_call: tsleep returns %d SIGALRM, cnt %d\n", @@ -584,17 +588,17 @@ coda_call(mntinfo, inSize, outSize, buffer) error, i); #if notyet - tempset = p->p_siglist; + tempset = pending_set; SIGSETNAND(tempset, p->p_sigmask); printf("coda_call: siglist = %p, sigmask = %p, mask %p\n", - p->p_siglist, p->p_sigmask, + pending_set, p->p_sigmask, tempset); break; - SIGSETOR(p->p_sigmask, p->p_siglist); - tempset = p->p_siglist; + SIGSETOR(p->p_sigmask, pending_set); + tempset = pending_set; SIGSETNAND(tempset, p->p_sigmask); printf("coda_call: new mask, siglist = %p, sigmask = %p, mask %p\n", - p->p_siglist, p->p_sigmask, + pending_set, p->p_sigmask, tempset); #endif } diff --git a/sys/fs/coda/coda_psdev.c b/sys/fs/coda/coda_psdev.c index 392012b..19d4703 100644 --- a/sys/fs/coda/coda_psdev.c +++ b/sys/fs/coda/coda_psdev.c @@ -63,6 +63,7 @@ extern int coda_nc_initialized; /* Set if cache has been initialized */ #include <sys/lock.h> #include <sys/malloc.h> #include <sys/file.h> /* must come after sys/malloc.h */ +#include <sys/ksiginfo.h> #include <sys/mount.h> #include <sys/mutex.h> #include <sys/poll.h> @@ -491,6 +492,7 @@ coda_call(mntinfo, inSize, outSize, buffer) #ifdef CTL_C struct thread *td = curthread; struct proc *p = td->td_proc; + sigset_t pending_set; sigset_t psig_omask; sigset_t tempset; int i; @@ -561,18 +563,20 @@ coda_call(mntinfo, inSize, outSize, buffer) #endif } else { + ksiginfo_to_sigset_t(p, &pending_set); SIGEMPTYSET(tempset); SIGADDSET(tempset, SIGIO); - if (SIGSETEQ(p->p_siglist, tempset)) { + if (SIGSETEQ(pending_set, tempset)) { SIGADDSET(p->p_sigmask, SIGIO); #ifdef CODA_VERBOSE printf("coda_call: tsleep returns %d SIGIO, cnt %d\n", error, i); #endif } else { + ksiginfo_to_sigset_t(p, &pending_set); SIGDELSET(tempset, SIGIO); SIGADDSET(tempset, SIGALRM); - if (SIGSETEQ(p->p_siglist, tempset)) { + if (SIGSETEQ(pending_set, tempset)) { SIGADDSET(p->p_sigmask, SIGALRM); #ifdef CODA_VERBOSE printf("coda_call: tsleep returns %d SIGALRM, cnt %d\n", @@ -584,17 +588,17 @@ coda_call(mntinfo, inSize, outSize, buffer) error, i); #if notyet - tempset = p->p_siglist; + tempset = pending_set; SIGSETNAND(tempset, p->p_sigmask); printf("coda_call: siglist = %p, sigmask = %p, mask %p\n", - p->p_siglist, p->p_sigmask, + pending_set, p->p_sigmask, tempset); break; - SIGSETOR(p->p_sigmask, p->p_siglist); - tempset = p->p_siglist; + SIGSETOR(p->p_sigmask, pending_set); + tempset = pending_set; SIGSETNAND(tempset, p->p_sigmask); printf("coda_call: new mask, siglist = %p, sigmask = %p, mask %p\n", - p->p_siglist, p->p_sigmask, + pending_set, p->p_sigmask, tempset); #endif } diff --git a/sys/i386/ibcs2/ibcs2_signal.c b/sys/i386/ibcs2/ibcs2_signal.c index 0084cbe..1734994 100644 --- a/sys/i386/ibcs2/ibcs2_signal.c +++ b/sys/i386/ibcs2/ibcs2_signal.c @@ -456,7 +456,7 @@ ibcs2_sigpending(td, uap) ibcs2_sigset_t iss; PROC_LOCK(p); - bss = p->p_siglist; + ksiginfo_to_sigset_t(p, &bss); SIGSETAND(bss, p->p_sigmask); PROC_UNLOCK(p); bsd_to_ibcs2_sigset(&bss, &iss); |