|
|
1.1 ! root 1: /* pcreate.c - pcreate */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <mark.h> ! 6: #include <ports.h> ! 7: ! 8: /*------------------------------------------------------------------------ ! 9: * pcreate -- create a port that allows "count" outstanding messages ! 10: *------------------------------------------------------------------------ ! 11: */ ! 12: SYSCALL pcreate(count) ! 13: int count; ! 14: { ! 15: PStype ps; ! 16: int i, p; ! 17: struct pt *ptptr; ! 18: ! 19: if (count < 0) ! 20: return(SYSERR); ! 21: disable(ps); ! 22: #ifdef MEMMARK ! 23: if (mark(ptmark) == OK) ! 24: pinit(MAXMSGS); ! 25: #endif ! 26: for (i=0 ; i<NPORTS ; i++) { ! 27: if ( (p=ptnextp--) <= 0) ! 28: ptnextp = NPORTS - 1; ! 29: if ( (ptptr= &ports[p])->ptstate == PTFREE) { ! 30: ptptr->ptstate = PTALLOC; ! 31: ptptr->ptssem = screate(count); ! 32: ptptr->ptrsem = screate(0); ! 33: ptptr->pthead = ptptr->pttail ! 34: = (struct ptnode *)NULL; ! 35: ptptr->ptseq++; ! 36: ptptr->ptmaxcnt = count; ! 37: restore(ps); ! 38: return(p); ! 39: } ! 40: } ! 41: restore(ps); ! 42: return(SYSERR); ! 43: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.