|
|
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.