|
|
1.1 ! root 1: /* ptclear.c - _ptclear */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <mark.h> ! 6: #include <ports.h> ! 7: ! 8: /*------------------------------------------------------------------------ ! 9: * _ptclear -- used by pdelete and preset to clear a port ! 10: *------------------------------------------------------------------------ ! 11: */ ! 12: _ptclear(ptptr, newstate, dispose) ! 13: struct pt *ptptr; ! 14: int newstate; ! 15: int (*dispose)(); ! 16: { ! 17: struct ptnode *p; ! 18: ! 19: ! 20: /* put port in limbo until done freeing processes */ ! 21: ! 22: ptptr->ptstate = PTLIMBO; ! 23: ptptr->ptseq++; ! 24: if ( (p=ptptr->pthead) != (struct ptnode *)NULL ) { ! 25: for(; p != (struct ptnode *)NULL ; p=p->ptnext) ! 26: (*dispose)( p->ptmsg ); ! 27: (ptptr->pttail)->ptnext = ptfree; ! 28: ptfree = ptptr->pthead; ! 29: } ! 30: if (newstate == PTALLOC) { ! 31: ptptr->pttail = ptptr->pthead = (struct ptnode *)NULL; ! 32: sreset(ptptr->ptssem, ptptr->ptmaxcnt); ! 33: sreset(ptptr->ptrsem, 0); ! 34: } else { ! 35: sdelete(ptptr->ptssem); ! 36: sdelete(ptptr->ptrsem); ! 37: } ! 38: ptptr->ptstate = newstate; ! 39: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.