summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/include/ape/lib9.h6
-rw-r--r--sys/src/ape/lib/9/rendezvous.c6
-rw-r--r--sys/src/ape/lib/9/segattach.c4
-rw-r--r--sys/src/ape/lib/9/segbrk.c4
-rw-r--r--sys/src/ape/lib/ap/mips/lock.c3
-rw-r--r--sys/src/ape/lib/ap/plan9/_buf.c41
-rw-r--r--sys/src/ape/lib/ap/plan9/qlock.c18
-rw-r--r--sys/src/ape/lib/ap/plan9/sys9.h6
-rw-r--r--sys/src/ape/lib/bsd/listen.c18
-rw-r--r--sys/src/ape/lib/draw/libc.h6
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);