|
|
1.1 ! root 1: /* unsleep.c - unsleep */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: #include <q.h> ! 7: #include <sleep.h> ! 8: ! 9: /*------------------------------------------------------------------------ ! 10: * unsleep -- remove process from the sleep queue prematurely ! 11: *------------------------------------------------------------------------ ! 12: */ ! 13: SYSCALL unsleep(pid) ! 14: int pid; ! 15: { ! 16: struct pentry *pptr; ! 17: struct qent *qptr; ! 18: int remain; ! 19: int next; ! 20: PStype ps; ! 21: ! 22: disable(ps); ! 23: if (isbadpid(pid) || ! 24: ( (pptr = &proctab[pid])->pstate != PRSLEEP && ! 25: pptr->pstate != PRTRECV) ) { ! 26: restore(ps); ! 27: return(SYSERR); ! 28: } ! 29: qptr = &q[pid]; ! 30: remain = qptr->qkey; ! 31: if ( (next=qptr->qnext) < NPROC) ! 32: q[next].qkey += remain; ! 33: dequeue(pid); ! 34: if ( (next=q[clockq].qnext) < NPROC) ! 35: sltop = (short *) & q[next].qkey; ! 36: else ! 37: slnempty = FALSE; ! 38: restore(ps); ! 39: return(OK); ! 40: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.