do not return from sigsuspend prematurely
authorKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 26 Feb 1993 08:29:48 +0000 (00:29 -0800)
committerKirk McKusick <mckusick@ucbvax.Berkeley.EDU>
Fri, 26 Feb 1993 08:29:48 +0000 (00:29 -0800)
SCCS-vsn: sys/kern/kern_sig.c 7.54

usr/src/sys/kern/kern_sig.c

index ed416bd..d63e41e 100644 (file)
@@ -4,7 +4,7 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)kern_sig.c  7.53 (Berkeley) %G%
+ *     @(#)kern_sig.c  7.54 (Berkeley) %G%
  */
 
 #define        SIGPROP         /* include signal properties table */
  */
 
 #define        SIGPROP         /* include signal properties table */
@@ -371,7 +371,8 @@ sigsuspend(p, uap, retval)
        ps->ps_oldmask = p->p_sigmask;
        ps->ps_flags |= SAS_OLDMASK;
        p->p_sigmask = uap->mask &~ sigcantmask;
        ps->ps_oldmask = p->p_sigmask;
        ps->ps_flags |= SAS_OLDMASK;
        p->p_sigmask = uap->mask &~ sigcantmask;
-       (void) tsleep((caddr_t) ps, PPAUSE|PCATCH, "pause", 0);
+       while (tsleep((caddr_t) ps, PPAUSE|PCATCH, "pause", 0) == 0)
+               /* void */;
        /* always return EINTR rather than ERESTART... */
        return (EINTR);
 }
        /* always return EINTR rather than ERESTART... */
        return (EINTR);
 }