commit 38c10d1abcab399ce3735ccf54672a5b6787165e from: rsc date: Mon Jan 17 21:29:00 2005 UTC do not call exits in threaded programs commit - e33c70bc72fa4af9d2261ed6d864bd13b8af9be5 commit + 38c10d1abcab399ce3735ccf54672a5b6787165e blob - c6dc5930b3f53cb925fd1ad304242ab0de49922c blob + 0ba726a4db9fce68352e2f3abdeae12de9700386 --- include/thread.h +++ include/thread.h @@ -24,6 +24,14 @@ _Thread *_threadwakeup(Rendez*); #define yield threadyield /* + * I am tired of making this mistake. + */ +#define exits do_not_call_exits_in_threaded_programs +#define _exits do_not_call__exits_in_threaded_programs + + + +/* * signals */ void threadnotify(int(*f)(void*,char*), int); blob - 0f0a1a6622eb96bebb3a84d07c054bb3b0ac338e blob + cc4336b373b578984604234a4711f34ddb99c3ea --- src/cmd/9p.c +++ src/cmd/9p.c @@ -19,7 +19,7 @@ usage(void) fprint(2, " stat name\n"); // fprint(2, " ls name\n"); fprint(2, "without -a, name elem/path means /path on server unix!$ns/elem\n"); - exits("usage"); + threadexitsall("usage"); } void xread(int, char**); @@ -142,7 +142,7 @@ xread(int argc, char **argv) write(1, buf, n); if(n < 0) sysfatal("read error: %r"); - exits(0); + threadexitsall(0); } void @@ -165,7 +165,7 @@ xreadfd(int argc, char **argv) write(1, buf, n); if(n < 0) sysfatal("read error: %r"); - exits(0); + threadexitsall(0); } void @@ -196,7 +196,7 @@ xwrite(int argc, char **argv) } if(n < 0) sysfatal("read error: %r"); - exits(0); + threadexitsall(0); } void @@ -220,7 +220,7 @@ xwritefd(int argc, char **argv) sysfatal("write error: %r"); if(n < 0) sysfatal("read error: %r"); - exits(0); + threadexitsall(0); } void @@ -245,5 +245,5 @@ xstat(int argc, char **argv) fmtinstall('D', dirfmt); fmtinstall('M', dirmodefmt); print("%D\n", d); - exits(0); + threadexitsall(0); } blob - 7ff30ef8aa6b57ca693394b50797cc3b49a0c336 blob + c15c1560455da4b426c228490727fd562811e510 --- src/cmd/9pserve.c +++ src/cmd/9pserve.c @@ -119,7 +119,7 @@ usage(void) { fprint(2, "usage: 9pserve [-lv] address\n"); fprint(2, "\treads/writes 9P messages on stdin/stdout\n"); - exits("usage"); + threadexitsall("usage"); } uchar vbuf[128]; blob - 257b87ba9d2d8bc393b63af3954326fce89fb2f2 blob + 31c9f28900c07d1b16f8bb8e0db3846139c5ba3f --- src/cmd/9term/9term.c +++ src/cmd/9term/9term.c @@ -1064,7 +1064,7 @@ consread(void) */ s = setecho(sfd, 0); if(write(rcfd, buf, n) < 0) - exits(0); + threadexitsall(0); if(s) setecho(sfd, s); } blob - 917aefc1e9c6a2eeaef686fb74daf95098612c98 blob + b969180c19ab2f429ce719805efe92e30e863bfa --- src/cmd/acme/acme.c +++ src/cmd/acme/acme.c @@ -114,7 +114,7 @@ threadmain(int argc, char *argv[]) default: Usage: fprint(2, "usage: acme -a -c ncol -f fontname -F fixedwidthfontname -l loadfile -W winsize\n"); - exits("usage"); + threadexitsall("usage"); }ARGEND fontnames[0] = estrdup(fontnames[0]); @@ -147,12 +147,12 @@ threadmain(int argc, char *argv[]) /* if(geninitdraw(nil, derror, fontnames[0], "acme", nil, Refnone) < 0){ fprint(2, "acme: can't open display: %r\n"); - exits("geninitdraw"); + threadexitsall("geninitdraw"); } */ if(initdraw(derror, fontnames[0], "acme") < 0){ fprint(2, "acme: can't open display: %r\n"); - exits("initdraw"); + threadexitsall("initdraw"); } d = display; @@ -192,19 +192,19 @@ threadmain(int argc, char *argv[]) chansetname(cwarn, "cwarn"); if(cwait==nil || ccommand==nil || ckill==nil || cxfidalloc==nil || cxfidfree==nil || cerr==nil || cexit==nil || cwarn==nil){ fprint(2, "acme: can't create initial channels: %r\n"); - exits("channels"); + threadexitsall("channels"); } mousectl = initmouse(nil, screen); if(mousectl == nil){ fprint(2, "acme: can't initialize mouse: %r\n"); - exits("mouse"); + threadexitsall("mouse"); } mouse = &mousectl->m; keyboardctl = initkeyboard(nil); if(keyboardctl == nil){ fprint(2, "acme: can't initialize keyboard: %r\n"); - exits("keyboard"); + threadexitsall("keyboard"); } mainpid = getpid(); startplumbing(); blob - 456f663dca1bd4b083134ab912fb880649a80aaf blob + 428cf90f397f529455c3e6a4be72b4634c156239 --- src/cmd/import.c +++ src/cmd/import.c @@ -33,7 +33,7 @@ void usage(void) { fprint(2, "usage: %s [-df] [-s service] [-n remote-ns] [-p remote-prog] remote-system\n", argv0); - exits("usage"); + threadexitsall("usage"); } void blob - 761310b9429dc648495523a5c0cb246c143060e2 blob + 8065e9abf8d4675d800fa678b12350ed94f43b42 --- src/cmd/vac/vac.c +++ src/cmd/vac/vac.c @@ -105,7 +105,7 @@ static void usage(void) { fprint(2, "usage: %s [-amqsv] [-h host] [-d vacfile] [-b blocksize] [-i name] [-e exclude] [-f vacfile] file ... \n", argv0); - exits("usage"); + threadexitsall("usage"); } void blob - bd36de8ed2e295711ade0ce305a4bbbf3b3ea050 blob + 51050345c0e144ef6d59749be1449198ba47fd21 --- src/cmd/vac/vacfs.c +++ src/cmd/vac/vacfs.c @@ -206,7 +206,7 @@ void usage(void) { fprint(2, "usage: %s [-sd] [-h host] [-c ncache] [-m mountpoint] vacfile\n", argv0); - exits("usage"); + threadexitsall("usage"); } char*