diff options
Diffstat (limited to 'emu')
| -rw-r--r-- | emu/DragonFly/os.c | 7 | ||||
| -rw-r--r-- | emu/FreeBSD/os.c | 7 | ||||
| -rw-r--r-- | emu/Hp/os.c | 12 | ||||
| -rw-r--r-- | emu/Irix/os.c | 6 | ||||
| -rw-r--r-- | emu/Linux/os.c | 4 | ||||
| -rw-r--r-- | emu/MacOSX/os.c | 11 | ||||
| -rw-r--r-- | emu/NetBSD/os.c | 10 | ||||
| -rw-r--r-- | emu/Nt/ie-os.c | 16 | ||||
| -rw-r--r-- | emu/Nt/os.c | 23 | ||||
| -rw-r--r-- | emu/OpenBSD/os.c | 7 | ||||
| -rw-r--r-- | emu/Plan9/os.c | 8 | ||||
| -rw-r--r-- | emu/Plan9/win.c | 6 | ||||
| -rw-r--r-- | emu/Solaris/os.c | 3 | ||||
| -rw-r--r-- | emu/Unixware/os.c | 3 | ||||
| -rw-r--r-- | emu/port/fns.h | 3 |
15 files changed, 44 insertions, 82 deletions
diff --git a/emu/DragonFly/os.c b/emu/DragonFly/os.c index 269eed08..c6b5a50c 100644 --- a/emu/DragonFly/os.c +++ b/emu/DragonFly/os.c @@ -189,7 +189,7 @@ tramp(void *arg) _exit(0); } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { Proc *p; @@ -245,10 +245,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) p->kstack = stackalloc(p, &tos); pid = rfork_thread(RFPROC|RFMEM|RFNOWAIT, tos, tramp, p); if(pid < 0) - panic("ourfork"); - - return pid; - + panic("rfork"); } void diff --git a/emu/FreeBSD/os.c b/emu/FreeBSD/os.c index fd09e968..bc68265b 100644 --- a/emu/FreeBSD/os.c +++ b/emu/FreeBSD/os.c @@ -190,7 +190,7 @@ tramp(void *arg) _exit(0); } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { Proc *p; @@ -246,10 +246,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) p->kstack = stackalloc(p, &tos); pid = rfork_thread(RFPROC|RFMEM|RFNOWAIT, tos, tramp, p); if(pid < 0) - panic("ourfork"); - - return pid; - + panic("rfork"); } void diff --git a/emu/Hp/os.c b/emu/Hp/os.c index a371ac50..b51b4a8c 100644 --- a/emu/Hp/os.c +++ b/emu/Hp/os.c @@ -189,7 +189,7 @@ tramp(void *v) pthread_t active_threads[BUNCHES]; /* this should be more than enuf */ -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { pthread_t thread; @@ -221,8 +221,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) p->env->uid = up->env->uid; p->env->gid = up->env->gid; - kstrdup(&p->env->user, up->env->user); -; + kstrdup(&p->env->user, up->env->user); strcpy(p->text, name); @@ -243,12 +242,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if((pthread_attr_create(&attr))== -1) panic("pthread_attr_create failed"); - errno=0; pthread_attr_setsched(&attr,SCHED_OTHER); - if(errno) - panic("pthread_attr_setsched failed"); - - if(pthread_create(&thread, attr, tramp, p)) + if(pthread_create(&thread, &attr, tramp, p)) panic("thr_create failed\n"); if(sigaction(SIGBUS, nil, &oldact)) panic("sigaction failed"); @@ -258,7 +253,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if((id=cma_thread_get_unique(&thread))>=BUNCHES) panic("id too big"); active_threads[id]=thread; - return id; } void diff --git a/emu/Irix/os.c b/emu/Irix/os.c index 42bcf99b..8a8c3cbe 100644 --- a/emu/Irix/os.c +++ b/emu/Irix/os.c @@ -83,7 +83,7 @@ tramp(void *p, size_t stacksz) pexit("", 0); } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { Proc *p; @@ -147,12 +147,10 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) pid = sprocsp(tramp, PR_SALL, p, 0, KSTACK); - if(-1 < pid) + if(pid >= 0) sproctbl[i] = pid; else sproctbl[i] = -1; - - return pid; } void diff --git a/emu/Linux/os.c b/emu/Linux/os.c index df4bb997..7a3daaaa 100644 --- a/emu/Linux/os.c +++ b/emu/Linux/os.c @@ -104,7 +104,7 @@ tramp(void *arg) return 0; /* not reached */ } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { Proc *p; @@ -171,8 +171,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if(clone(tramp, tos, CLONE_PTRACE|CLONE_VM|CLONE_FS|CLONE_FILES|SIGCHLD, p, nil, nil, nil) <= 0) panic("kproc: clone failed"); - - return 0; } static void diff --git a/emu/MacOSX/os.c b/emu/MacOSX/os.c index 0b161e50..ddb7559c 100644 --- a/emu/MacOSX/os.c +++ b/emu/MacOSX/os.c @@ -233,7 +233,7 @@ tramp(void *arg) return NULL; } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { pthread_t thread; @@ -291,24 +291,16 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) procs.tail = p; unlock(&procs.l); - up->kid = p; - if(pthread_attr_init(&attr) == -1) panic("pthread_attr_init failed"); - errno = 0; pthread_attr_setschedpolicy(&attr, SCHED_OTHER); - if(errno) - panic("pthread_attr_setschedpolicy failed"); - pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); if(pthread_create(&thread, &attr, tramp, p)) panic("thr_create failed\n"); pthread_attr_destroy(&attr); - - return (int)thread; } int @@ -330,7 +322,6 @@ segflush(void *va, ulong len) void oshostintr(Proc *p) { -fprint(2, "oshostintr %p\n", p); pthread_kill((pthread_t)p->sigid, SIGUSR1); } diff --git a/emu/NetBSD/os.c b/emu/NetBSD/os.c index 68bb0a3c..11ef0647 100644 --- a/emu/NetBSD/os.c +++ b/emu/NetBSD/os.c @@ -80,7 +80,7 @@ tramp(void *arg) return 0; } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { int pid; @@ -96,7 +96,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if(p == nil) { print("kproc(%s): no memory", name); panic("kproc: no memory"); - return -1; } if(flags & KPDUPPG) { @@ -146,8 +145,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) fprint(2, "emu: clone failed: %s\n", strerror(errno)); panic("kproc: clone failed"); } - - return 0; } /* @@ -192,9 +189,10 @@ trapSEGV(int signo) static void trapFPE(int signo) { + char buf[64]; USED(signo); - print("FPU status=0x%.4lux", getfsr()); - disfault(nil, "Floating exception"); + snprint(buf, sizeof(buf), "sys: fp: exception status=%.4lux", getfsr()); + disfault(nil, buf); } static void diff --git a/emu/Nt/ie-os.c b/emu/Nt/ie-os.c index ddf09b57..ee38f2ac 100644 --- a/emu/Nt/ie-os.c +++ b/emu/Nt/ie-os.c @@ -127,7 +127,7 @@ tramp(LPVOID p) return 0; } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { DWORD h; @@ -137,10 +137,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) Egrp *eg; p = newproc(); - if(p == nil){ - print("out of kernel processes\n"); - return -1; - } + if(p == nil) + panic("out of kernel processes"); if(flags & KPDUPPG) { pg = up->env->pgrp; @@ -178,12 +176,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) unlock(&procs.l); p->pid = (int)CreateThread(0, 16384, tramp, p, 0, &h); - if(p->pid <= 0){ - pfree(p); - print("ran out of kernel processes\n"); - return -1; - } - return p->pid; + if(p->pid <= 0) + panic("ran out of kernel processes"); } #if(_WIN32_WINNT >= 0x0400) diff --git a/emu/Nt/os.c b/emu/Nt/os.c index ad6943be..c489d9e0 100644 --- a/emu/Nt/os.c +++ b/emu/Nt/os.c @@ -116,7 +116,7 @@ tramp(LPVOID p) return 0; } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { DWORD h; @@ -126,16 +126,11 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) Egrp *eg; p = newproc(); - if(p == nil){ - print("out of kernel processes\n"); - return -1; - } + if(p == nil) + panic("out of kernel processes"); p->os = CreateEvent(NULL, FALSE, FALSE, NULL); - if(p->os == NULL){ - pfree(p); - print("can't allocate os event\n"); - return -1; - } + if(p->os == NULL) + panic("can't allocate os event"); if(flags & KPDUPPG) { pg = up->env->pgrp; @@ -173,12 +168,8 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) unlock(&procs.l); p->pid = (int)CreateThread(0, 16384, tramp, p, 0, &h); - if(p->pid <= 0){ - pfree(p); - print("ran out of kernel processes\n"); - return -1; - } - return p->pid; + if(p->pid <= 0) + panic("ran out of kernel processes"); } #if(_WIN32_WINNT >= 0x0400) diff --git a/emu/OpenBSD/os.c b/emu/OpenBSD/os.c index 0715ec2a..52025839 100644 --- a/emu/OpenBSD/os.c +++ b/emu/OpenBSD/os.c @@ -194,7 +194,7 @@ tramp(void *arg) _exit(0); } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { Proc *p; @@ -250,10 +250,7 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) p->kstack = stackalloc(p, &tos); pid = rfork_thread(RFPROC|RFMEM|RFNOWAIT, tos, tramp, p); if(pid < 0) - panic("ourfork"); - - return pid; - + panic("rfork"); } void diff --git a/emu/Plan9/os.c b/emu/Plan9/os.c index d681ec67..97b9b7e0 100644 --- a/emu/Plan9/os.c +++ b/emu/Plan9/os.c @@ -67,7 +67,7 @@ pexit(char *msg, int) } int -kproc(char *name, void (*func)(void*), void *arg, int flags) +kproc1(char *name, void (*func)(void*), void *arg, int flags) { int pid; Proc *p; @@ -132,6 +132,12 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) } void +kproc(char *name, void (*func)(void*), void *arg, int flags) +{ + kproc1(name, func, arg, flags); +} + +void traphandler(void *reg, char *msg) { int intwait; diff --git a/emu/Plan9/win.c b/emu/Plan9/win.c index 2f280853..e588cd79 100644 --- a/emu/Plan9/win.c +++ b/emu/Plan9/win.c @@ -16,6 +16,8 @@ enum extern Memimage *screenimage; +extern int kproc1(char*, void (*)(void*), void*, int); + static ulong* attachwindow(Rectangle*, ulong*, int*, int*); static void plan9readmouse(void*); @@ -150,8 +152,8 @@ attachscreen(Rectangle *r, ulong *chan, int *d, int *width, int *softscreen) return nil; } - mousepid = kproc("readmouse", plan9readmouse, nil, 0); - keybdpid = kproc("readkbd", plan9readkeybd, nil, 0); + mousepid = kproc1("readmouse", plan9readmouse, nil, 0); + keybdpid = kproc1("readkbd", plan9readkeybd, nil, 0); fd = open("/dev/label", OWRITE); if(fd >= 0){ diff --git a/emu/Solaris/os.c b/emu/Solaris/os.c index 02862220..47ba15da 100644 --- a/emu/Solaris/os.c +++ b/emu/Solaris/os.c @@ -81,7 +81,7 @@ tramp(void *v) pexit("", 0); } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { thread_t thread; @@ -139,7 +139,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if(thr_create(0, 0, &tramp, p, THR_BOUND|THR_DETACHED, &thread)) panic("thr_create failed\n"); thr_yield(); - return(thread); } /* to get pc on trap use siginfo.si_pc field and define all trap handlers diff --git a/emu/Unixware/os.c b/emu/Unixware/os.c index 6493aa87..cf410c01 100644 --- a/emu/Unixware/os.c +++ b/emu/Unixware/os.c @@ -81,7 +81,7 @@ tramp(void *v) pexit("", 0); } -int +void kproc(char *name, void (*func)(void*), void *arg, int flags) { thread_t thread; @@ -139,7 +139,6 @@ kproc(char *name, void (*func)(void*), void *arg, int flags) if(thr_create(0, 0, &tramp, p, THR_BOUND|THR_DETACHED, &thread)) panic("thr_create failed\n"); thr_yield(); - return(thread); } /* to get pc on trap use siginfo.si_pc field and define all trap handlers diff --git a/emu/port/fns.h b/emu/port/fns.h index 86162d2e..be825d17 100644 --- a/emu/port/fns.h +++ b/emu/port/fns.h @@ -88,7 +88,8 @@ int isdotdot(char*); int iseve(void); int kannounce(char*, char*); int kdial(char*, char*, char*, int*); -int kproc(char*, void (*)(void*), void*, int); +void kproc(char*, void (*)(void*), void*, int); +void kprocinit(Proc*); int kfgrpclose(Fgrp*, int); void ksetenv(char*, char*, int); void kstrcpy(char*, char*, int); |
