Date: Mon, 25 Jan 1999 16:00:01 -0800 (PST) From: Bruce Evans <bde@zeta.org.au> To: freebsd-bugs@FreeBSD.ORG Subject: Re: kern/9679: fix for uninterruptible open in portal file system Message-ID: <199901260000.QAA21836@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/9679; it has been noted by GNATS. From: Bruce Evans <bde@zeta.org.au> To: anderson@cs.duke.edu, FreeBSD-gnats-submit@FreeBSD.ORG Cc: Subject: Re: kern/9679: fix for uninterruptible open in portal file system Date: Tue, 26 Jan 1999 10:50:16 +1100 >@@ -287,7 +289,16 @@ > splx(s); > goto bad; > } >- (void) tsleep((caddr_t) &so->so_timeo, PSOCK, "portalcon", 5 * hz); >+ (void) tsleep((caddr_t) &so->so_timeo, PCATCH|PSOCK, "portalcon", 5 * hz); >+ /* >+ * check for pending signals, return EINTR if hit. >+ */ >+ if ((signo = CURSIG(curproc)) != 0) { >+ splx(s); >+ error = EINTR; >+ postsig(signo); >+ goto bad; >+ } > } > splx(s); > Why not just check the value returned by tsleep()? >@@ -301,7 +312,7 @@ > */ > so->so_rcv.sb_timeo = 0; > so->so_snd.sb_timeo = 0; >- so->so_rcv.sb_flags |= SB_NOINTR; >+ /*so->so_rcv.sb_flags |= SB_NOINTR;*/ /* we want signals for read */ > so->so_snd.sb_flags |= SB_NOINTR; > > Don't comment out wrong code; remove it. >@@ -334,6 +345,16 @@ > &m, &cm, &flags); > if (error) > goto bad; >+ /* >+ * check for pending signals, return EINTR if hit. >+ * don't need to worry about the portal daemon b/c >+ * we close the socket on our way out. >+ */ >+ if ((signo = CURSIG(curproc)) != 0) { >+ error = EINTR; >+ postsig(signo); >+ goto bad; >+ } > > /* > * Grab an error code from the mbuf. I think this should do what tsleep() would do, which is to return either EINTR or ERESTART immediately. Calling postsig() is unnecessary. I'm not sure about the ERESTART handling. Perhaps the problem should be passed to tsleep(): if (CURSIG(curproc) != 0) { error = tsleep(... PCATCH ...); if (error != 0) goto bad; } Bruce To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199901260000.QAA21836>