Xinu7/src/serve11/sys/receive.c
/* receive.c - receive */
#include <conf.h>
#include <kernel.h>
#include <proc.h>
/*------------------------------------------------------------------------
* receive - wait for a message and return it
*------------------------------------------------------------------------
*/
SYSCALL receive()
{
struct pentry *pptr;
int msg;
char ps;
disable(ps);
pptr = &proctab[currpid];
if ( !pptr->phasmsg ) { /* if no message, wait for one */
pptr->pstate = PRRECV;
resched();
}
msg = pptr->pmsg; /* retrieve message */
pptr->phasmsg = FALSE;
restore(ps);
return(msg);
}