Changes for Mac OS X. Most important is stack sizes in samterm,

which were completely bogus.  (Libthread used to ignore them but
not anymore.  Maybe we really should ignore them, but that breaks
Venti, which needs *really* big stacks.)
This commit is contained in:
rsc 2003-11-24 22:39:06 +00:00
parent 2db9e4821d
commit 912fba95e7
17 changed files with 46 additions and 26 deletions

View file

@ -6,7 +6,7 @@
char errbuf[ERRMAX];
int ignerr = 0;
void
static void
err(char *f)
{
if(!ignerr){

View file

@ -16,6 +16,7 @@
#define TRUE 1
#define FALSE 0
#undef INFINITY /* Darwin declares this as HUGE_VAL */
#define INFINITY 0x7FFFFFFFL
#define INCR 25
#define STRSIZE (2*BLOCKSIZE)

View file

@ -25,6 +25,6 @@ CFLAGS=$CFLAGS -I../sam
LDFLAGS=$LDFLAGS -lframe -ldraw -lthread -l9 -lregexp9 \
-lbio -lfmt -lutf -L$X11/lib -lX11 -lm
o.samterm: $PLAN9/lib/libdraw.a
o.samterm: $PLAN9/lib/libframe.a $PLAN9/lib/libdraw.a $PLAN9/lib/libthread.a
<$PLAN9/src/mkone

View file

@ -15,6 +15,8 @@
static char *exname;
#define STACK 8192
void
getscreen(int argc, char **argv)
{
@ -163,7 +165,7 @@ extstart(void)
plumbc = chancreate(sizeof(int), 0);
arg[0] = plumbc;
arg[1] = (void*)fd;
proccreate(extproc, arg, 8192);
proccreate(extproc, arg, STACK);
atexit(removeextern);
}
@ -256,7 +258,7 @@ plumbstart(void)
}
arg[0] =plumbc;
arg[1] = &fd;
proccreate(plumbproc, arg, 4096);
proccreate(plumbproc, arg, STACK);
return 1;
}
#endif
@ -293,5 +295,5 @@ void
hoststart(void)
{
hostc = chancreate(sizeof(int), 0);
proccreate(hostproc, hostc, 1024);
proccreate(hostproc, hostc, STACK);
}

View file

@ -72,7 +72,7 @@ it:V: all
<$PLAN9/src/mkmany
$SLIB: $LIBOFILES
ar rvc $SLIB $LIBOFILES
$AR rvc $SLIB $LIBOFILES
# xml.c:D: mkxml dat.h
# ./mkxml dat.h > xml.c

View file

@ -4,9 +4,9 @@
#include <signal.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/resource.h>
#include <sys/wait.h>
#include <sys/time.h>
static struct {
int sig;

View file

@ -11,12 +11,16 @@
extern int _p9dir(struct stat*, char*, Dir*, char**, char*);
#if !defined(_HAVEGETDENTS) && defined(_HAVEGETDIRENTRIES)
/* everyone has getdirentries, just use that */
static int
getdents(int fd, char *buf, int n)
mygetdents(int fd, char *buf, int n)
{
ssize_t nn;
#if _GETDIRENTRIES_TAKES_LONG
long off;
#else
off_t off;
#endif
off = seek(fd, 0, 1);
nn = getdirentries(fd, buf, n, &off);
@ -24,7 +28,6 @@ getdents(int fd, char *buf, int n)
seek(fd, off, 0);
return nn;
}
#endif
static int
countde(char *p, int n)
@ -123,7 +126,7 @@ dirread(int fd, Dir **dp)
if(buf == nil)
return -1;
n = getdents(fd, (void*)buf, st.st_blksize);
n = mygetdents(fd, (void*)buf, st.st_blksize);
if(n < 0){
free(buf);
return -1;
@ -156,7 +159,7 @@ dirreadall(int fd, Dir **d)
return -1;
}
buf = nbuf;
n = getdents(fd, (void*)(buf+ts), st.st_blksize);
n = mygetdents(fd, (void*)(buf+ts), st.st_blksize);
if(n <= 0)
break;
ts += n;

View file

@ -1,4 +1,6 @@
#include <lib9.h>
#define NOPLAN9DEFINES
#include <u.h>
#include <libc.h>
#include <pthread.h>
extern int __isthreaded;

View file

@ -38,7 +38,6 @@ OFILES=\
getuser.$O\
getwd.$O\
jmp.$O\
jmp-$SYSNAME.$O\
lock.$O\
main.$O\
malloctag.$O\

View file

@ -6,7 +6,7 @@
* r3 contains return value upon return.
*/
int
_tas(void *x)
_tas(int *x)
{
int v;
/*
@ -36,7 +36,7 @@ _tas(void *x)
switch(v) {
case 0: return 0;
case 0xdeaddead: return 1;
default: print("tas: corrupted 0x%lux\n", v);
default: fprint(2, "tas: corrupted 0x%lux\n", v);
}
return 0;
}

View file

@ -119,6 +119,6 @@ CFLAGS=$CFLAGS -I$X11/include
<$PLAN9/src/mksyslib
test: test.o $LIB
gcc -o test test.o -L$PLAN9 -ldraw -l9 -lfmt -lutf -L$X11/lib -lX11 -lm
test: test.o $PLAN9/lib/$LIB
gcc -o test test.o -L$PLAN9/lib -ldraw -l9 -lfmt -lutf -L$X11/lib -lX11 -lm

View file

@ -359,7 +359,7 @@ enqueue(Alt *a, Channel **c)
{
int i;
_threaddebug(DBGCHAN, "Queuing alt %p on channel %p", a, a->c);
_threaddebug(DBGCHAN, "Queueing alt %p on channel %p", a, a->c);
a->tag = c;
i = emptyentry(a->c);
a->c->qentry[i] = a;

View file

@ -16,6 +16,7 @@ procexec(Channel *pidc, char *prog, char *args[])
if(p->threads.head != t || p->threads.head->nextt != nil){
werrstr("not only thread in proc");
Bad:
_threaddebug(DBGEXEC, "procexec bad %r");
if(pidc)
sendul(pidc, ~0);
return;
@ -35,6 +36,8 @@ procexec(Channel *pidc, char *prog, char *args[])
*/
if(pipe(p->exec.fd) < 0)
goto Bad;
if(fcntl(p->exec.fd[0], F_SETFD, 1) < 0)
goto Bad;
if(fcntl(p->exec.fd[1], F_SETFD, 1) < 0)
goto Bad;
@ -57,6 +60,7 @@ procexec(Channel *pidc, char *prog, char *args[])
if(pidc)
sendul(pidc, t->ret);
_threaddebug(DBGEXEC, "procexec schedexecwait");
/* wait for exec'ed program, then exit */
_schedexecwait();
}
@ -105,8 +109,7 @@ efork(void *ve)
Execargs *e;
e = ve;
_threaddebug(DBGEXEC, "_schedexec %s", e->prog);
close(e->fd[0]);
_threaddebug(DBGEXEC, "_schedexec %s -- calling execv", e->prog);
execv(e->prog, e->args);
_threaddebug(DBGEXEC, "_schedexec failed: %r");
rerrstr(buf, sizeof buf);
@ -120,5 +123,12 @@ efork(void *ve)
int
_schedexec(Execargs *e)
{
return ffork(RFFDG|RFPROC|RFMEM, efork, e);
int pid;
pid = fork();
if(pid == 0){
efork(e);
_exit(1);
}
return pid;
}

View file

@ -52,12 +52,12 @@ _threadnrendez++;
t->rendval = val;
t->rendhash = *l;
*l = t;
t->nextstate = Rendezvous;
++nrendez;
if(nrendez > _threadhighnrendez)
_threadhighnrendez = nrendez;
_threaddebug(DBGREND, "Rendezvous for tag %lud", t->rendtag);
_threaddebug(DBGREND, "Rendezvous for tag %lud (m=%d)", t->rendtag, t->moribund);
unlock(&_threadrgrp.lock);
t->nextstate = Rendezvous;
_sched();
t->inrendez = 0;
_threaddebug(DBGREND, "Woke after rendezvous; val is %lud", t->rendval);

View file

@ -41,6 +41,8 @@ _schedinit(void *arg)
if((t=p->thread) != nil){
p->thread = nil;
if(t->moribund){
if(t->moribund != 1)
fprint(2, "moribund %d\n", t->moribund);
assert(t->moribund == 1);
t->state = Dead;
if(t->prevt)

View file

@ -5,6 +5,7 @@ X11=/usr/X11R6
CC=9c
LD=9l
AS=9a
AR=9ar
CFLAGS=
LDFLAGS=
AFLAGS=

View file

@ -1,10 +1,10 @@
default:V: $PLAN9/lib/$LIB
$PLAN9/lib/$LIB:V: $OFILES # force archive even when not needed
ar rvc $PLAN9/lib/$LIB $newprereq
$AR rvc $PLAN9/lib/$LIB $newprereq
&:n: &.$O
ar rvc $LIB $stem.$O
$AR rvc $PLAN9/lib/$LIB $stem.$O
all install:V: $PLAN9/lib/$LIB