Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Jun 2021 01:46:07 GMT
From:      Konstantin Belousov <kib@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: 299912abf269 - stable/13 - sigwait(2) and sigtimedwait(2) must not be restarted.
Message-ID:  <202106220146.15M1k75L065945@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch stable/13 has been updated by kib:

URL: https://cgit.FreeBSD.org/src/commit/?id=299912abf26990afdc406ecd3a12f256a8080afe

commit 299912abf26990afdc406ecd3a12f256a8080afe
Author:     Konstantin Belousov <kib@FreeBSD.org>
AuthorDate: 2021-06-06 23:00:10 +0000
Commit:     Konstantin Belousov <kib@FreeBSD.org>
CommitDate: 2021-06-22 01:45:31 +0000

    sigwait(2) and sigtimedwait(2) must not be restarted.
    
    (cherry picked from commit afb36e289c1d96053b6063b0e548fc7d31dbd239)
---
 sys/kern/kern_sig.c | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index 0453d3b2702c..a2709f38c5cb 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -1168,9 +1168,7 @@ sys_sigwait(struct thread *td, struct sigwait_args *uap)
 	error = kern_sigtimedwait(td, set, &ksi, NULL);
 	if (error) {
 		if (error == EINTR && td->td_proc->p_osrel < P_OSREL_SIGWAIT)
-			error = ERESTART;
-		if (error == ERESTART)
-			return (error);
+			return (ERESTART);
 		td->td_retval[0] = error;
 		return (0);
 	}
@@ -1329,15 +1327,13 @@ kern_sigtimedwait(struct thread *td, sigset_t waitset, ksiginfo_t *ksi,
 
 		error = msleep(ps, &p->p_mtx, PPAUSE|PCATCH, "sigwait", timo);
 
-		if (timeout != NULL) {
-			if (error == ERESTART) {
-				/* Timeout can not be restarted. */
-				error = EINTR;
-			} else if (error == EAGAIN) {
-				/* We will calculate timeout by ourself. */
-				error = 0;
-			}
-		}
+		/* The syscalls can not be restarted. */
+		if (error == ERESTART)
+			error = EINTR;
+
+		/* We will calculate timeout by ourself. */
+		if (timeout != NULL && error == EAGAIN)
+			error = 0;
 
 		/*
 		 * If PTRACE_SCE or PTRACE_SCX were set after



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202106220146.15M1k75L065945>