aboutsummaryrefslogtreecommitdiff
path: root/src/libthread
diff options
context:
space:
mode:
authorRuss Cox <rsc@swtch.com>2020-12-30 00:10:11 -0500
committerRuss Cox <rsc@swtch.com>2020-12-30 00:12:14 -0500
commitb3a20a96eb2b91a5b0b8a8fb506e20a2fb50ebe8 (patch)
tree0cebec89bb62594af9c5310e1ba99a4dee65b51b /src/libthread
parent5b37d9126474864b5299426e27b2af37fcc96dd0 (diff)
downloadplan9port-b3a20a96eb2b91a5b0b8a8fb506e20a2fb50ebe8.tar.gz
plan9port-b3a20a96eb2b91a5b0b8a8fb506e20a2fb50ebe8.tar.bz2
plan9port-b3a20a96eb2b91a5b0b8a8fb506e20a2fb50ebe8.zip
libthread: add threadmaybackground
Programs that want to background themselves now need to define threadmaybackground returning 1. This avoids a confusing (to people and debuggers) extra parent process for all the threaded programs that will never want to background themselves.
Diffstat (limited to 'src/libthread')
-rw-r--r--src/libthread/bg.c7
-rw-r--r--src/libthread/daemonize.c12
-rw-r--r--src/libthread/mkfile1
-rw-r--r--src/libthread/thread.c2
4 files changed, 15 insertions, 7 deletions
diff --git a/src/libthread/bg.c b/src/libthread/bg.c
new file mode 100644
index 00000000..2edbc0e4
--- /dev/null
+++ b/src/libthread/bg.c
@@ -0,0 +1,7 @@
+#include "threadimpl.h"
+
+int
+threadmaybackground(void)
+{
+ return 0;
+}
diff --git a/src/libthread/daemonize.c b/src/libthread/daemonize.c
index 387d1527..f994ffe1 100644
--- a/src/libthread/daemonize.c
+++ b/src/libthread/daemonize.c
@@ -8,7 +8,7 @@
#undef wait
static int sigpid;
-static int threadpassfd;
+static int threadpassfd = -1;
static int gotsigchld;
static void
@@ -163,9 +163,9 @@ _threadsetupdaemonize(void)
void
_threaddaemonize(void)
{
- if(threadpassfd >= 0){
- write(threadpassfd, "0", 1);
- close(threadpassfd);
- threadpassfd = -1;
- }
+ if(threadpassfd < 0)
+ sysfatal("threads in main proc exited w/o threadmaybackground");
+ write(threadpassfd, "0", 1);
+ close(threadpassfd);
+ threadpassfd = -1;
}
diff --git a/src/libthread/mkfile b/src/libthread/mkfile
index 8a77a316..eca4f4df 100644
--- a/src/libthread/mkfile
+++ b/src/libthread/mkfile
@@ -4,6 +4,7 @@ SYSOFILES=`{sh ./sysofiles.sh}
LIB=libthread.a
OFILES=\
$SYSOFILES\
+ bg.$O\
channel.$O\
daemonize.$O\
exec.$O\
diff --git a/src/libthread/thread.c b/src/libthread/thread.c
index 65e65194..7151e875 100644
--- a/src/libthread/thread.c
+++ b/src/libthread/thread.c
@@ -844,7 +844,7 @@ main(int argc, char **argv)
// Easier to just run in pthread-per-thread mode.
pthreadperthread = 1;
#endif
- if(strstr(opts, "nodaemon") == nil && getenv("NOLIBTHREADDAEMONIZE") == nil)
+ if(threadmaybackground() && strstr(opts, "nodaemon") == nil && getenv("NOLIBTHREADDAEMONIZE") == nil)
_threadsetupdaemonize();
threadargc = argc;