|
|
1.1 root 1: /* pcreate.c - pcreate */
2:
3: #include <conf.h>
4: #include <kernel.h>
5: #include <mark.h>
6: #include <ports.h>
7:
8: /*------------------------------------------------------------------------
9: * pcreate -- create a port that allows "count" outstanding messages
10: *------------------------------------------------------------------------
11: */
12: SYSCALL pcreate(count)
13: int count;
14: {
15: PStype ps;
16: int i, p;
17: struct pt *ptptr;
18:
19: if (count < 0)
20: return(SYSERR);
21: disable(ps);
22: #ifdef MEMMARK
23: if (mark(ptmark) == OK)
24: pinit(MAXMSGS);
25: #endif
26: for (i=0 ; i<NPORTS ; i++) {
27: if ( (p=ptnextp--) <= 0)
28: ptnextp = NPORTS - 1;
29: if ( (ptptr= &ports[p])->ptstate == PTFREE) {
30: ptptr->ptstate = PTALLOC;
31: ptptr->ptssem = screate(count);
32: ptptr->ptrsem = screate(0);
33: ptptr->pthead = ptptr->pttail
34: = (struct ptnode *)NULL;
35: ptptr->ptseq++;
36: ptptr->ptmaxcnt = count;
37: restore(ps);
38: return(p);
39: }
40: }
41: restore(ps);
42: return(SYSERR);
43: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.