Annotation of xinu/sys/kill.c, revision 1.1.1.1

1.1       root        1: /* kill.c - kill */
                      2: 
                      3: #include <conf.h>
                      4: #include <kernel.h>
                      5: #include <proc.h>
                      6: #include <sem.h>
                      7: #include <mem.h>
                      8: #include <io.h>
                      9: 
                     10: /*------------------------------------------------------------------------
                     11:  * kill  --  kill a process and remove it from the system
                     12:  *------------------------------------------------------------------------
                     13:  */
                     14: SYSCALL kill(pid)
                     15:        int     pid;                    /* process to kill              */
                     16: {
                     17:        struct  pentry  *pptr;          /* points to proc. table for pid*/
                     18:        int     dev;
                     19:        PStype  ps;
                     20: 
                     21:        disable(ps);
                     22:        if (isbadpid(pid) || (pptr= &proctab[pid])->pstate==PRFREE) {
                     23:                restore(ps);
                     24:                return(SYSERR);
                     25:        }
                     26:        if (--numproc == 0)
                     27:                xdone();
                     28:        dev = pptr->pdevs[0];
                     29:        if (! isbaddev(dev) )
                     30:                close(dev);
                     31:        dev = pptr->pdevs[1];
                     32:        if (! isbaddev(dev) )
                     33:                close(dev);
                     34:        send(pptr->pnxtkin, pid);
                     35:        freestk(pptr->pbase, pptr->pstklen);
                     36:        switch (pptr->pstate) {
                     37: 
                     38:          case PRCURR:  pptr->pstate = PRFREE;  /* suicide */
                     39:                        resched();
                     40: 
                     41:          case PRWAIT:  semaph[pptr->psem].semcnt++;
                     42:                                                /* fall through */
                     43:          case PRREADY: dequeue(pid);
                     44:                        pptr->pstate = PRFREE;
                     45:                        break;
                     46: 
                     47: #ifdef RTCLOCK
                     48:          case PRSLEEP:
                     49:          case PRTRECV: unsleep(pid);
                     50: #endif
                     51:                                                /* fall through */
                     52:          default:      pptr->pstate = PRFREE;
                     53:        }
                     54:        restore(ps);
                     55:        return(OK);
                     56: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.