|
|
1.1 ! root 1: /* recvtim.c - recvtim */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: #include <q.h> ! 7: #include <sleep.h> ! 8: ! 9: /*------------------------------------------------------------------------ ! 10: * recvtim - wait to receive a message or timeout and return result ! 11: *------------------------------------------------------------------------ ! 12: */ ! 13: SYSCALL recvtim(maxwait) ! 14: int maxwait; ! 15: { ! 16: struct pentry *pptr; ! 17: int msg; ! 18: PStype ps; ! 19: ! 20: if (maxwait<0 || clkruns == 0) ! 21: return(SYSERR); ! 22: disable(ps); ! 23: pptr = &proctab[currpid]; ! 24: if ( !pptr->phasmsg ) { /* if no message, wait */ ! 25: insertd(currpid, clockq, maxwait); ! 26: slnempty = TRUE; ! 27: sltop = (short *)&q[q[clockq].qnext].qkey; ! 28: pptr->pstate = PRTRECV; ! 29: resched(); ! 30: } ! 31: if ( pptr->phasmsg ) { ! 32: msg = pptr->pmsg; /* msg. arrived => retrieve it */ ! 33: pptr->phasmsg = FALSE; ! 34: } else { /* still no message => TIMEOUT */ ! 35: msg = TIMEOUT; ! 36: } ! 37: restore(ps); ! 38: return(msg); ! 39: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.