summaryrefslogtreecommitdiffstats
path: root/src/libthread/setproc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libthread/setproc.c')
-rw-r--r--src/libthread/setproc.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/libthread/setproc.c b/src/libthread/setproc.c
new file mode 100644
index 00000000..5f1e2a8d
--- /dev/null
+++ b/src/libthread/setproc.c
@@ -0,0 +1,36 @@
+/*
+ * Avoid using threading calls for single-proc programs.
+ */
+
+#include "threadimpl.h"
+
+static int multi;
+static Proc *theproc;
+
+void
+_threadsetproc(Proc *p)
+{
+ if(!multi)
+ theproc = p;
+ else
+ _kthreadsetproc(p);
+}
+
+Proc*
+_threadgetproc(void)
+{
+ if(!multi)
+ return theproc;
+ return _kthreadgetproc();
+}
+
+void
+_threadmultiproc(void)
+{
+ if(multi)
+ return;
+
+ multi = 1;
+ _kthreadinit();
+ _threadsetproc(theproc);
+}