diff options
-rw-r--r-- | sys/include/ape/lib9.h | 6 | ||||
-rw-r--r-- | sys/src/ape/lib/9/rendezvous.c | 6 | ||||
-rw-r--r-- | sys/src/ape/lib/9/segattach.c | 4 | ||||
-rw-r--r-- | sys/src/ape/lib/9/segbrk.c | 4 | ||||
-rw-r--r-- | sys/src/ape/lib/ap/mips/lock.c | 3 | ||||
-rw-r--r-- | sys/src/ape/lib/ap/plan9/_buf.c | 41 | ||||
-rw-r--r-- | sys/src/ape/lib/ap/plan9/qlock.c | 18 | ||||
-rw-r--r-- | sys/src/ape/lib/ap/plan9/sys9.h | 6 | ||||
-rw-r--r-- | sys/src/ape/lib/bsd/listen.c | 18 | ||||
-rw-r--r-- | sys/src/ape/lib/draw/libc.h | 6 |
10 files changed, 60 insertions, 52 deletions
diff --git a/sys/include/ape/lib9.h b/sys/include/ape/lib9.h index 84b7c3253..1d788ea04 100644 --- a/sys/include/ape/lib9.h +++ b/sys/include/ape/lib9.h @@ -64,12 +64,12 @@ extern int bind(char*, char*, int); extern int mount(int, int, char*, int, char*); extern int unmount(char*, char*); extern int rfork(int); -extern int segattach(int, char*, void*, unsigned long); -extern int segbrk(void*, void*); +extern void* segattach(int, char*, void*, unsigned long); +extern void* segbrk(void*, void*); extern int segdetach(void*); extern int segflush(void*, unsigned long); extern int segfree(void*, unsigned long); -extern unsigned long rendezvous(unsigned long, unsigned long); +extern void* rendezvous(void*, void*); extern unsigned long getfcr(void); extern unsigned long getfsr(void); extern void setfcr(unsigned long); diff --git a/sys/src/ape/lib/9/rendezvous.c b/sys/src/ape/lib/9/rendezvous.c index 0e184c2f6..ab788cd55 100644 --- a/sys/src/ape/lib/9/rendezvous.c +++ b/sys/src/ape/lib/9/rendezvous.c @@ -1,9 +1,9 @@ #include <lib9.h> -extern unsigned long _RENDEZVOUS(unsigned long, unsigned long); +extern void* _RENDEZVOUS(void*, void*); -unsigned long -rendezvous(unsigned long tag, unsigned long value) +void* +rendezvous(void *tag, void *value) { return _RENDEZVOUS(tag, value); } diff --git a/sys/src/ape/lib/9/segattach.c b/sys/src/ape/lib/9/segattach.c index f99f4877d..98178550e 100644 --- a/sys/src/ape/lib/9/segattach.c +++ b/sys/src/ape/lib/9/segattach.c @@ -1,8 +1,8 @@ #include <lib9.h> -extern int _SEGATTACH(int, char*, void*, unsigned long); +extern void* _SEGATTACH(int, char*, void*, unsigned long); -int +void* segattach(int attr, char *class, void *va, unsigned long len) { return _SEGATTACH(attr, class, va, len); diff --git a/sys/src/ape/lib/9/segbrk.c b/sys/src/ape/lib/9/segbrk.c index 9e8d10eae..2b664aced 100644 --- a/sys/src/ape/lib/9/segbrk.c +++ b/sys/src/ape/lib/9/segbrk.c @@ -1,8 +1,8 @@ #include <lib9.h> -extern int _SEGBRK(void*, void*); +extern void* _SEGBRK(void*, void*); -int +void* segbrk(void *saddr, void *addr) { return _SEGBRK(saddr, addr); diff --git a/sys/src/ape/lib/ap/mips/lock.c b/sys/src/ape/lib/ap/mips/lock.c index f0ecbe22a..866d074e9 100644 --- a/sys/src/ape/lib/ap/mips/lock.c +++ b/sys/src/ape/lib/ap/mips/lock.c @@ -31,8 +31,7 @@ lockinit(void) arch = C_fcr0(); switch(arch) { case POWER: - n = _SEGATTACH(0, "lock", (void*)Lockaddr, Pagesize); - if(n < 0) { + if(_SEGATTACH(0, "lock", (void*)Lockaddr, Pagesize) == (void*)-1) { arch = MAGNUM; break; } diff --git a/sys/src/ape/lib/ap/plan9/_buf.c b/sys/src/ape/lib/ap/plan9/_buf.c index 9836886d7..906c2335d 100644 --- a/sys/src/ape/lib/ap/plan9/_buf.c +++ b/sys/src/ape/lib/ap/plan9/_buf.c @@ -52,6 +52,7 @@ _startbuf(int fd) int i, pid; Fdinfo *f; Muxbuf *b; + void *v; if(mux == 0){ _RFORK(RFREND); @@ -111,16 +112,20 @@ Found: for(i=0; i<OPEN_MAX; i++) if(i!=fd && (_fdinfo[i].flags&FD_ISOPEN)) _CLOSE(i); - _RENDEZVOUS(0, _muxsid); + while(_RENDEZVOUS(&b->copypid, (void*)_muxsid) == (void*)~0) + ; _copyproc(fd, b); } - /* parent process continues ... */ b->copypid = pid; f->buf = b; f->flags |= FD_BUFFERED; unlock(&mux->lock); - _muxsid = _RENDEZVOUS(0, 0); + + while((v = _RENDEZVOUS(&b->copypid, 0)) == (void*)~0) + ; + _muxsid = (int)v; + /* leave fd open in parent so system doesn't reuse it */ return 0; } @@ -168,7 +173,7 @@ _copyproc(int fd, Muxbuf *b) /* sleep until there's room */ b->roomwait = 1; unlock(&mux->lock); - _RENDEZVOUS((unsigned long)&b->roomwait, 0); + _RENDEZVOUS(&b->roomwait, 0); } } else unlock(&mux->lock); @@ -193,15 +198,15 @@ _copyproc(int fd, Muxbuf *b) if(mux->selwait && FD_ISSET(fd, &mux->ewant)) { mux->selwait = 0; unlock(&mux->lock); - _RENDEZVOUS((unsigned long)&mux->selwait, fd); + _RENDEZVOUS(&mux->selwait, (void*)fd); } else if(b->datawait) { b->datawait = 0; unlock(&mux->lock); - _RENDEZVOUS((unsigned long)&b->datawait, 0); + _RENDEZVOUS(&b->datawait, 0); } else if(mux->selwait && FD_ISSET(fd, &mux->rwant)) { mux->selwait = 0; unlock(&mux->lock); - _RENDEZVOUS((unsigned long)&mux->selwait, fd); + _RENDEZVOUS(&mux->selwait, (void*)fd); } else unlock(&mux->lock); _exit(0); @@ -214,12 +219,12 @@ _copyproc(int fd, Muxbuf *b) b->datawait = 0; unlock(&mux->lock); /* wake up _bufreading process */ - _RENDEZVOUS((unsigned long)&b->datawait, 0); + _RENDEZVOUS(&b->datawait, 0); } else if(mux->selwait && FD_ISSET(fd, &mux->rwant)) { mux->selwait = 0; unlock(&mux->lock); /* wake up selecting process */ - _RENDEZVOUS((unsigned long)&mux->selwait, fd); + _RENDEZVOUS(&mux->selwait, (void*)fd); } else unlock(&mux->lock); } else @@ -265,7 +270,7 @@ goteof: /* sleep until there's data */ b->datawait = 1; unlock(&mux->lock); - _RENDEZVOUS((unsigned long)&b->datawait, 0); + _RENDEZVOUS(&b->datawait, 0); lock(&mux->lock); if(b->fd != fd){ unlock(&mux->lock); @@ -287,7 +292,7 @@ goteof: b->roomwait = 0; unlock(&mux->lock); /* wake up copy process */ - _RENDEZVOUS((unsigned long)&b->roomwait, 0); + _RENDEZVOUS(&b->roomwait, 0); } else unlock(&mux->lock); return ngot; @@ -390,7 +395,7 @@ select(int nfds, fd_set *rfds, fd_set *wfds, fd_set *efds, struct timeval *timeo } mux->selwait = 1; unlock(&mux->lock); - fd = _RENDEZVOUS((unsigned long)&mux->selwait, 0); + fd = (int)_RENDEZVOUS(&mux->selwait, 0); if(fd >= 0 && fd < nfds) { b = _fdinfo[fd].buf; if(b == 0 || b->fd != fd) { @@ -435,7 +440,8 @@ _timerproc(void) signal(SIGALRM, alarmed); for(i=0; i<OPEN_MAX; i++) _CLOSE(i); - _RENDEZVOUS(1, 0); + while(_RENDEZVOUS(&timerpid, 0) == (void*)~0) + ; for(;;) { _SLEEP(mux->waittime); if(timerreset) { @@ -446,7 +452,7 @@ _timerproc(void) mux->selwait = 0; mux->waittime = LONGWAIT; unlock(&mux->lock); - _RENDEZVOUS((unsigned long)&mux->selwait, -2); + _RENDEZVOUS(&mux->selwait, (void*)-2); } else { mux->waittime = LONGWAIT; unlock(&mux->lock); @@ -454,9 +460,12 @@ _timerproc(void) } } } - atexit(_killtimerproc); /* parent process continues */ - _RENDEZVOUS(1, 0); + if(timerpid > 0){ + atexit(_killtimerproc); + while(_RENDEZVOUS(&timerpid, 0) == (void*)~0) + ; + } } static void diff --git a/sys/src/ape/lib/ap/plan9/qlock.c b/sys/src/ape/lib/ap/plan9/qlock.c index b0882f789..3be8dae25 100644 --- a/sys/src/ape/lib/ap/plan9/qlock.c +++ b/sys/src/ape/lib/ap/plan9/qlock.c @@ -73,7 +73,7 @@ qlock(QLock *q) unlock(&q->lock); /* wait */ - while((*_rendezvousp)((ulong)mp, 1) == ~0) + while((*_rendezvousp)(mp, (void*)1) == (void*)~0) ; mp->inuse = 0; } @@ -91,7 +91,7 @@ qunlock(QLock *q) if(q->head == nil) q->tail = nil; unlock(&q->lock); - while((*_rendezvousp)((ulong)p, 0x12345) == ~0) + while((*_rendezvousp)(p, (void*)0x12345) == (void*)~0) ; return; } @@ -140,7 +140,7 @@ rlock(RWLock *q) unlock(&q->lock); /* wait in kernel */ - while((*_rendezvousp)((ulong)mp, 1) == ~0) + while((*_rendezvousp)(mp, (void*)1) == (void*)~0) ; mp->inuse = 0; } @@ -183,7 +183,7 @@ runlock(RWLock *q) unlock(&q->lock); /* wakeup waiter */ - while((*_rendezvousp)((ulong)p, 0) == ~0) + while((*_rendezvousp)(p, (void*)0) == (void*)~0) ; } @@ -213,7 +213,7 @@ wlock(RWLock *q) unlock(&q->lock); /* wait in kernel */ - while((*_rendezvousp)((ulong)mp, 1) == ~0) + while((*_rendezvousp)(mp, (void*)1) == (void*)~0) ; mp->inuse = 0; } @@ -252,7 +252,7 @@ wunlock(RWLock *q) if(q->head == nil) q->tail = nil; unlock(&q->lock); - while((*_rendezvousp)((ulong)p, 0) == ~0) + while((*_rendezvousp)(p, (void*)0) == (void*)~0) ; return; } @@ -265,7 +265,7 @@ wunlock(RWLock *q) p = q->head; q->head = p->next; q->readers++; - while((*_rendezvousp)((ulong)p, 0) == ~0) + while((*_rendezvousp)(p, (void*)0) == (void*)~0) ; } if(q->head == nil) @@ -303,7 +303,7 @@ rsleep(Rendez *r) if(r->l->head == nil) r->l->tail = nil; unlock(&r->l->lock); - while((*_rendezvousp)((ulong)t, 0x12345) == ~0) + while((*_rendezvousp)(t, (void*)0x12345) == (void*)~0) ; }else{ r->l->locked = 0; @@ -311,7 +311,7 @@ rsleep(Rendez *r) } /* wait for a wakeup */ - while((*_rendezvousp)((ulong)me, 1) == ~0) + while((*_rendezvousp)(me, (void*)1) == (void*)~0) ; me->inuse = 0; } diff --git a/sys/src/ape/lib/ap/plan9/sys9.h b/sys/src/ape/lib/ap/plan9/sys9.h index b289273cb..b9e5bbc04 100644 --- a/sys/src/ape/lib/ap/plan9/sys9.h +++ b/sys/src/ape/lib/ap/plan9/sys9.h @@ -98,10 +98,10 @@ extern long _PREAD(int, void*, long, long long); extern long _PWRITE(int, void*, long, long long); extern long _READ(int, void*, long); extern int _REMOVE(const char*); -extern int _RENDEZVOUS(unsigned long, unsigned long); +extern void* _RENDEZVOUS(void*, void*); extern int _RFORK(int); -extern int _SEGATTACH(int, char*, void*, unsigned long); -extern int _SEGBRK(void*, void*); +extern void* _SEGATTACH(int, char*, void*, unsigned long); +extern void* _SEGBRK(void*, void*); extern int _SEGDETACH(void*); extern int _SEGFLUSH(void*, unsigned long); extern int _SEGFREE(void*, unsigned long); diff --git a/sys/src/ape/lib/bsd/listen.c b/sys/src/ape/lib/bsd/listen.c index b0408cd19..045ff3a91 100644 --- a/sys/src/ape/lib/bsd/listen.c +++ b/sys/src/ape/lib/bsd/listen.c @@ -31,14 +31,11 @@ extern void _killmuxsid(void); static int listenproc(Rock *r, int fd) { - Rock *nr; - char *net; - int cfd, nfd, dfd; - int pfd[2]; + char listen[Ctlsize], name[Ctlsize], *net, *p; + int cfd, nfd, dfd, pfd[2]; struct stat d; - char *p; - char listen[Ctlsize]; - char name[Ctlsize]; + Rock *nr; + void *v; switch(r->stype){ case SOCK_DGRAM: @@ -81,11 +78,14 @@ listenproc(Rock *r, int fd) _muxsid = getpgrp(); } else setpgid(getpid(), _muxsid); - _RENDEZVOUS(2, _muxsid); + while(_RENDEZVOUS(r, (void*)_muxsid) == (void*)~0) + ; break; default: + while((v = _RENDEZVOUS(r, 0)) == (void*)~0) + ; + _muxsid = (int)v; atexit(_killmuxsid); - _muxsid = _RENDEZVOUS(2, 0); close(pfd[1]); close(nfd); return 0; diff --git a/sys/src/ape/lib/draw/libc.h b/sys/src/ape/lib/draw/libc.h index 97e3deacb..f6c5e97a2 100644 --- a/sys/src/ape/lib/draw/libc.h +++ b/sys/src/ape/lib/draw/libc.h @@ -84,10 +84,10 @@ extern long _PREAD(int, void*, long, long long); extern long _PWRITE(int, void*, long, long long); extern long _READ(int, void*, long); extern int _REMOVE(const char*); -extern int _RENDEZVOUS(unsigned long, unsigned long); +extern void* _RENDEZVOUS(void*, void*); extern int _RFORK(int); -extern int _SEGATTACH(int, char*, void*, unsigned long); -extern int _SEGBRK(void*, void*); +extern void* _SEGATTACH(int, char*, void*, unsigned long); +extern void* _SEGBRK(void*, void*); extern int _SEGDETACH(void*); extern int _SEGFLUSH(void*, unsigned long); extern int _SEGFREE(void*, unsigned long); |