| tdo not call exits in threaded programs - plan9port - [fork] Plan 9 from user space |
| git clone git://src.adamsgaard.dk/plan9port |
| Log |
| Files |
| Refs |
| README |
| LICENSE |
| --- |
| commit 38c10d1abcab399ce3735ccf54672a5b6787165e |
| parent e33c70bc72fa4af9d2261ed6d864bd13b8af9be5 |
| Author: rsc |
| Date: Mon, 17 Jan 2005 21:29:00 +0000
do not call exits in threaded programs
Diffstat:
M include/thread.h | 8 ++++++++
M src/cmd/9p.c | 12 ++++++------
M src/cmd/9pserve.c | 2 +-
M src/cmd/9term/9term.c | 2 +-
M src/cmd/acme/acme.c | 12 ++++++------
M src/cmd/import.c | 2 +-
M src/cmd/vac/vac.c | 2 +-
M src/cmd/vac/vacfs.c | 2 +-
8 files changed, 25 insertions(+), 17 deletions(-)
--- |
| diff --git a/include/thread.h b/include/thread.h |
| t@@ -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); |
| diff --git a/src/cmd/9p.c b/src/cmd/9p.c |
| t@@ -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**);
t@@ -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
t@@ -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
t@@ -196,7 +196,7 @@ xwrite(int argc, char **argv)
}
if(n < 0)
sysfatal("read error: %r");
- exits(0);
+ threadexitsall(0);
}
void
t@@ -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
t@@ -245,5 +245,5 @@ xstat(int argc, char **argv)
fmtinstall('D', dirfmt);
fmtinstall('M', dirmodefmt);
print("%D\n", d);
- exits(0);
+ threadexitsall(0);
} |
| diff --git a/src/cmd/9pserve.c b/src/cmd/9pserve.c |
| t@@ -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]; |
| diff --git a/src/cmd/9term/9term.c b/src/cmd/9term/9term.c |
| t@@ -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);
} |
| diff --git a/src/cmd/acme/acme.c b/src/cmd/acme/acme.c |
| t@@ -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]);
t@@ -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;
t@@ -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(); |
| diff --git a/src/cmd/import.c b/src/cmd/import.c |
| t@@ -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 |
| diff --git a/src/cmd/vac/vac.c b/src/cmd/vac/vac.c |
| t@@ -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 |
| diff --git a/src/cmd/vac/vacfs.c b/src/cmd/vac/vacfs.c |
| t@@ -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* |