summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sig.c
diff options
context:
space:
mode:
authorkib <kib@FreeBSD.org>2012-04-12 10:48:43 +0000
committerkib <kib@FreeBSD.org>2012-04-12 10:48:43 +0000
commit319ab382ef5fd326d3fab25c60ffe55702438a37 (patch)
treeb11cc6ba65a78e38d9da1d9122832b5385fa56c5 /sys/kern/kern_sig.c
parentaed1b833cf616d6a716d2a947c77fe99d6f3f925 (diff)
downloadFreeBSD-src-319ab382ef5fd326d3fab25c60ffe55702438a37.zip
FreeBSD-src-319ab382ef5fd326d3fab25c60ffe55702438a37.tar.gz
Add thread-private flag to indicate that error value is already placed
in td_errno. Flag is supposed to be used by syscalls returning EJUSTRETURN because errno was already placed into the usermode frame by a call to set_syscall_retval(9). Both ktrace and dtrace get errno value from td_errno if the flag is set. Use the flag to fix sigsuspend(2) error return ktrace records. Requested by: bde MFC after: 1 week
Diffstat (limited to 'sys/kern/kern_sig.c')
-rw-r--r--sys/kern/kern_sig.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 5460ffd..52a0c40 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1465,6 +1465,8 @@ kern_sigsuspend(struct thread *td, sigset_t mask)
mtx_unlock(&p->p_sigacts->ps_mtx);
}
PROC_UNLOCK(p);
+ td->td_errno = EINTR;
+ td->td_pflags |= TDP_NERRNO;
return (EJUSTRETURN);
}
OpenPOWER on IntegriCloud