|
|
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: int pid;
1.1.1.2 ! root 17: struct sentry *sptr;
1.1 root 18:
1.1.1.2 ! root 19: disable();
1.1 root 20: if (isbadsem(sem) || semaph[sem].sstate==SFREE) {
1.1.1.2 ! root 21: restore();
1.1 root 22: return(SYSERR);
23: }
24: sptr = &semaph[sem];
25: sptr->sstate = SFREE;
1.1.1.2 ! root 26: if (nonempty(sptr->sqhead)) {
1.1 root 27: while( (pid=getfirst(sptr->sqhead)) != EMPTY)
28: ready(pid,RESCHNO);
29: resched();
30: }
1.1.1.2 ! root 31: restore();
1.1 root 32: return(OK);
33: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.