diff options
| -rw-r--r-- | sys/src/9/port/pgrp.c | 2 | ||||
| -rw-r--r-- | sys/src/9/port/portfns.h | 1 | ||||
| -rw-r--r-- | sys/src/9/port/proc.c | 12 | ||||
| -rw-r--r-- | sys/src/9/port/qlock.c | 5 |
4 files changed, 14 insertions, 6 deletions
diff --git a/sys/src/9/port/pgrp.c b/sys/src/9/port/pgrp.c index 069df11da..8fb3e1fa0 100644 --- a/sys/src/9/port/pgrp.c +++ b/sys/src/9/port/pgrp.c @@ -225,7 +225,7 @@ closefgrp(Fgrp *f) } /* - * Called from sleep because up is in the middle + * Called from interrupted() because up is in the middle * of closefgrp and just got a kill ctl message. * This usually means that up has wedged because * of some kind of deadly embrace with mntclose diff --git a/sys/src/9/port/portfns.h b/sys/src/9/port/portfns.h index 233dcaf9a..7ee6a4d02 100644 --- a/sys/src/9/port/portfns.h +++ b/sys/src/9/port/portfns.h @@ -130,6 +130,7 @@ Block* iallocb(int); void iallocsummary(void); long ibrk(uintptr, int); void ilock(Lock*); +void interrupted(void); void iunlock(Lock*); long incref(Ref*); void initseg(void); diff --git a/sys/src/9/port/proc.c b/sys/src/9/port/proc.c index fdac770fa..0d96ed5c3 100644 --- a/sys/src/9/port/proc.c +++ b/sys/src/9/port/proc.c @@ -802,14 +802,20 @@ sleep(Rendez *r, int (*f)(void*), void *arg) if(up->notepending) { up->notepending = 0; splx(s); - if(up->procctl == Proc_exitme && up->closingfgrp) - forceclosefgrp(); - error(Eintr); + interrupted(); } splx(s); } +void +interrupted(void) +{ + if(up->procctl == Proc_exitme && up->closingfgrp != nil) + forceclosefgrp(); + error(Eintr); +} + static int tfn(void *arg) { diff --git a/sys/src/9/port/qlock.c b/sys/src/9/port/qlock.c index df6848b97..57982b217 100644 --- a/sys/src/9/port/qlock.c +++ b/sys/src/9/port/qlock.c @@ -39,8 +39,9 @@ eqlock(QLock *q) if(up == 0) panic("eqlock"); if(up->notepending){ + up->notepending = 0; unlock(&q->use); - error(Eintr); + interrupted(); } rwstats.qlockq++; p = q->tail; @@ -57,7 +58,7 @@ eqlock(QLock *q) sched(); if(up->eql == 0){ up->notepending = 0; - error(Eintr); + interrupted(); } up->eql = 0; } |
