more tests

This commit is contained in:
rsc 2005-01-04 22:15:53 +00:00
parent ed01060152
commit f6127ed209
5 changed files with 130 additions and 3 deletions

View file

@ -0,0 +1,96 @@
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/wait.h>
#include <pthread.h>
#undef waitpid
#undef pipe
#undef wait
static int sigpid;
static void
sigenable(int sig, int enabled)
{
sigset_t mask;
sigemptyset(&mask);
sigaddset(&mask, sig);
sigprocmask(enabled ? SIG_UNBLOCK : SIG_BLOCK, &mask, 0);
}
static void
child(void)
{
int status, pid;
printf("wait %d in %d\n", sigpid, getpid());
pid = waitpid(sigpid, &status, __WALL);
if(pid < 0)
perror("wait");
else if(WIFEXITED(status))
_exit(WEXITSTATUS(status));
printf("pid %d if %d %d\n", pid, WIFEXITED(status), WEXITSTATUS(status));
_exit(97);
}
static void
sigpass(int sig)
{
if(sig == SIGCHLD){
print("sig\n");
child();
}else
kill(sigpid, sig);
}
void
_threadsetupdaemonize(void)
{
int i, n, pid;
int p[2];
char buf[20];
sigpid = 1;
if(pipe(p) < 0)
abort();
signal(SIGCHLD, sigpass);
switch(pid = fork()){
case -1:
abort();
default:
close(p[1]);
break;
case 0:
close(p[0]);
return;
}
sigpid = pid;
read(p[0], buf, sizeof buf-1);
print("pipe\n");
child();
}
void*
sleeper(void *v)
{
pthread_mutex_t m;
pthread_cond_t c;
pthread_mutex_init(&m, 0);
pthread_cond_init(&c, 0);
pthread_cond_wait(&c, &m);
return 0;
}
void
main(int argc, char **argv)
{
pthread_t pid;
_threadsetupdaemonize();
pthread_create(&pid, 0, sleeper, 0);
exit(1);
}

View file

@ -3,9 +3,14 @@
#include <thread.h> #include <thread.h>
void void
threadmain(int argc, char **argv) proc(void *v)
{ {
threaddaemonize();
sleep(5*1000); sleep(5*1000);
print("still running\n"); print("still running\n");
} }
void
threadmain(int argc, char **argv)
{
proccreate(proc, nil, 32768);
}

View file

@ -0,0 +1,18 @@
#include <u.h>
#include <libc.h>
#include <thread.h>
void
f(void *v)
{
USED(v);
recvp(chancreate(sizeof(void*), 0));
}
void
threadmain(int argc, char **argv)
{
proccreate(f, nil, 32000);
exit(1);
}

View file

@ -9,6 +9,7 @@ enum
int max = 10000; int max = 10000;
int (*mk)(void (*fn)(void*), void *arg, uint stack); int (*mk)(void (*fn)(void*), void *arg, uint stack);
void printmsg(void*, char*);
void void
countthread(void *v) countthread(void *v)
@ -55,6 +56,7 @@ threadmain(int argc, char **argv)
Channel *c; Channel *c;
int nbuf; int nbuf;
notify(printmsg);
nbuf = 0; nbuf = 0;
mk = threadcreate; mk = threadcreate;
ARGBEGIN{ ARGBEGIN{
@ -79,3 +81,9 @@ threadmain(int argc, char **argv)
mk(filterthread, c, STACK); mk(filterthread, c, STACK);
recvp(chancreate(sizeof(void*), 0)); recvp(chancreate(sizeof(void*), 0));
} }
void
printmsg(void *v, char *msg)
{
print("note: %s\n", msg);
}

View file

@ -18,7 +18,7 @@ execproc(void *v)
args[2] = nil; args[2] = nil;
threadexec(nil, fd, args[0], args); threadexec(nil, fd, args[0], args);
} }
void void
threadmain(int argc, char **argv) threadmain(int argc, char **argv)
{ {