From 46bbd72f3eeaff9386b2a90af88f3d46b458a0e8 Mon Sep 17 00:00:00 2001 From: rtm Date: Sat, 15 Jul 2006 12:03:57 +0000 Subject: no more recursive locks wakeup1() assumes you hold proc_table_lock sleep(chan, lock) provides atomic sleep-and-release to wait for condition ugly code in swtch/scheduler to implement new sleep fix lots of bugs in pipes, wait, and exit fix bugs if timer interrupt goes off in schedule() console locks per line, not per byte --- usertests.c | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) (limited to 'usertests.c') diff --git a/usertests.c b/usertests.c index 2f688ca..e277839 100644 --- a/usertests.c +++ b/usertests.c @@ -16,7 +16,7 @@ pipe1() for(i = 0; i < 1033; i++) buf[i] = seq++; if(write(fds[1], buf, 1033) != 1033){ - puts("pipe1 oops 1\n"); + panic("pipe1 oops 1\n"); exit(1); } } @@ -31,7 +31,7 @@ pipe1() break; for(i = 0; i < n; i++){ if((buf[i] & 0xff) != (seq++ & 0xff)){ - puts("pipe1 oops 2\n"); + panic("pipe1 oops 2\n"); return; } } @@ -41,8 +41,9 @@ pipe1() cc = sizeof(buf); } if(total != 5 * 1033) - puts("pipe1 oops 3\n"); + panic("pipe1 oops 3\n"); close(fds[0]); + wait(); } puts("pipe1 ok\n"); } @@ -69,7 +70,7 @@ preempt() if(pid3 == 0){ close(pfds[0]); if(write(pfds[1], "x", 1) != 1) - puts("preempt write error"); + panic("preempt write error"); close(pfds[1]); while(1) ; @@ -77,7 +78,7 @@ preempt() close(pfds[1]); if(read(pfds[0], buf, sizeof(buf)) != 1){ - puts("preempt read error"); + panic("preempt read error"); return; } close(pfds[0]); @@ -90,12 +91,37 @@ preempt() puts("preempt ok\n"); } +// try to find any races between exit and wait +void +exitwait() +{ + int i, pid; + + for(i = 0; i < 100; i++){ + pid = fork(); + if(pid < 0){ + panic("fork failed\n"); + return; + } + if(pid){ + if(wait() != pid){ + panic("wait wrong pid\n"); + return; + } + } else { + exit(0); + } + } + puts("exitwait ok\n"); +} + main() { puts("usertests starting\n"); + pipe1(); - //preempt(); + preempt(); + exitwait(); - while(1) - ; + panic("usertests finished successfuly"); } -- cgit v1.2.3