--- xinu/sys/send.c 2018/04/24 17:39:04 1.1.1.1 +++ xinu/sys/send.c 2018/04/24 17:40:04 1.1.1.2 @@ -10,25 +10,19 @@ */ SYSCALL send(pid, msg) int pid; -int msg; +WORD msg; { - struct pentry *pptr; /* receiver's proc. table addr. */ - PStype ps; + struct pentry *pptr; - disable(ps); + disable(); if (isbadpid(pid) || ( (pptr= &proctab[pid])->pstate == PRFREE) - || pptr->phasmsg) { - restore(ps); + || pptr->phasmsg != 0) { + restore(); return(SYSERR); } - pptr->pmsg = msg; /* deposit message */ - pptr->phasmsg = TRUE; - if (pptr->pstate == PRRECV) /* if receiver waits, start it */ + pptr->pmsg = msg; + pptr->phasmsg++; + if (pptr->pstate == PRRECV) ready(pid, RESCHYES); - else if (pptr->pstate == PRTRECV) { - unsleep(pid); - ready(pid, RESCHYES); - } - restore(ps); return(OK); }