diff --git a/sys/src/9/port/alarm.c b/sys/src/9/port/alarm.c index d500a68e4..b78088665 100644 --- a/sys/src/9/port/alarm.c +++ b/sys/src/9/port/alarm.c @@ -13,6 +13,9 @@ alarmkproc(void*) Proc *rp; ulong now; + while(waserror()) + ; + for(;;){ now = MACHP(0)->ticks; qlock(&alarms); diff --git a/sys/src/9/port/devaoe.c b/sys/src/9/port/devaoe.c index 0512f7016..a583ed4f3 100644 --- a/sys/src/9/port/devaoe.c +++ b/sys/src/9/port/devaoe.c @@ -701,8 +701,10 @@ loop: } runlock(&devs); i = Nms - TK2MS(Ticks - starttick); - if(i > 0) + if(i > 0 && !waserror()){ tsleep(&up->sleep, return0, 0, i); + poperror(); + } goto loop; } diff --git a/sys/src/9/port/devsdp.c b/sys/src/9/port/devsdp.c index a205be87a..2be928d66 100644 --- a/sys/src/9/port/devsdp.c +++ b/sys/src/9/port/devsdp.c @@ -908,6 +908,8 @@ sdpackproc(void *a) int i; Conv *c; + while(waserror()) + ; for(;;) { tsleep(&up->sleep, return0, 0, 1000); sec = TK2SEC(m->ticks); diff --git a/sys/src/9/port/devsegment.c b/sys/src/9/port/devsegment.c index 2606cb8ac..e9806e933 100644 --- a/sys/src/9/port/devsegment.c +++ b/sys/src/9/port/devsegment.c @@ -530,6 +530,8 @@ segmentkproc(void *arg) incref(g->s); up->seg[sno] = g->s; + while(waserror()) + ; for(done = 0; !done;){ sleep(&g->cmdwait, cmdready, g); if(waserror()){ @@ -554,6 +556,8 @@ segmentkproc(void *arg) g->cmd = Cnone; wakeup(&g->replywait); } + + pexit("done", 1); } Dev segmentdevtab = { diff --git a/sys/src/9/port/random.c b/sys/src/9/port/random.c index 3a697827a..f578d68cc 100644 --- a/sys/src/9/port/random.c +++ b/sys/src/9/port/random.c @@ -42,10 +42,11 @@ genrandom(void*) up->basepri = PriNormal; up->priority = up->basepri; + while(waserror()) + ; for(;;){ - for(;;) - if(++rb.randomcount > 100000) - break; + if(++rb.randomcount <= 100000) + continue; if(anyhigher()) sched(); if(!rbnotfull(0)) diff --git a/sys/src/9/port/swap.c b/sys/src/9/port/swap.c index 5c1d449bb..0340d566b 100644 --- a/sys/src/9/port/swap.c +++ b/sys/src/9/port/swap.c @@ -147,12 +147,11 @@ pager(void *junk) Segment *s; Proc *p, *ep; - if(waserror()) - panic("pager: os error"); - p = proctab(0); ep = &p[conf.nproc]; + while(waserror()) + ; loop: up->psstate = "Idle"; wakeup(&palloc.r); diff --git a/sys/src/9/port/usbehci.c b/sys/src/9/port/usbehci.c index 0cdffb750..66546675c 100644 --- a/sys/src/9/port/usbehci.c +++ b/sys/src/9/port/usbehci.c @@ -2225,6 +2225,8 @@ ehcipoll(void* a) hp = a; ctlr = hp->aux; poll = &ctlr->poll; + while(waserror()) + ; for(;;){ if(ctlr->nreqs == 0){ if(0)ddprint("ehcipoll %#p sleep\n", ctlr->capio);