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