Signals may be delivered to process as well as to the thread. Check the

thread-delivered signals in addition to the process one.

Reviewed by:	mohan
MFC after:	1 month
Approved by:	kan (mentor)
This commit is contained in:
Konstantin Belousov 2006-07-08 15:39:11 +00:00
parent 201599c3af
commit c915bcbad2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=160182

View File

@ -1701,11 +1701,13 @@ nfs_sigintr(struct nfsmount *nmp, struct nfsreq *rep, struct thread *td)
p = td->td_proc;
PROC_LOCK(p);
tmpset = p->p_siglist;
SIGSETOR(tmpset, td->td_siglist);
SIGSETNAND(tmpset, td->td_sigmask);
mtx_lock(&p->p_sigacts->ps_mtx);
SIGSETNAND(tmpset, p->p_sigacts->ps_sigignore);
mtx_unlock(&p->p_sigacts->ps_mtx);
if (SIGNOTEMPTY(p->p_siglist) && nfs_sig_pending(tmpset)) {
if ((SIGNOTEMPTY(p->p_siglist) || SIGNOTEMPTY(td->td_siglist))
&& nfs_sig_pending(tmpset)) {
PROC_UNLOCK(p);
return (EINTR);
}