|
|
1.1 ! root 1: /* sdelete.c - sdelete */ ! 2: ! 3: #include <conf.h> ! 4: #include <kernel.h> ! 5: #include <proc.h> ! 6: #include <q.h> ! 7: #include <sem.h> ! 8: ! 9: /*------------------------------------------------------------------------ ! 10: * sdelete -- delete a semaphore by releasing its table entry ! 11: *------------------------------------------------------------------------ ! 12: */ ! 13: SYSCALL sdelete(sem) ! 14: int sem; ! 15: { ! 16: PStype ps; ! 17: int pid; ! 18: struct sentry *sptr; /* address of sem to free */ ! 19: ! 20: disable(ps); ! 21: if (isbadsem(sem) || semaph[sem].sstate==SFREE) { ! 22: restore(ps); ! 23: return(SYSERR); ! 24: } ! 25: sptr = &semaph[sem]; ! 26: sptr->sstate = SFREE; ! 27: if (nonempty(sptr->sqhead)) { /* free waiting processes */ ! 28: while( (pid=getfirst(sptr->sqhead)) != EMPTY) ! 29: ready(pid,RESCHNO); ! 30: resched(); ! 31: } ! 32: restore(ps); ! 33: return(OK); ! 34: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.