tplumber: add -f (foreground) option (#288) - plan9port - [fork] Plan 9 from user space
(HTM) git clone git://src.adamsgaard.dk/plan9port
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit b0aecb4ba5c3d7df6589c01f5a7c0427f5a75305
(DIR) parent 1309450668aa571dee97f4373f9555b4fddcf1aa
(HTM) Author: Jason Felice <jason.m.felice@gmail.com>
Date: Tue, 29 Oct 2019 10:07:10 -0400
plumber: add -f (foreground) option (#288)
In MacOS, services run by launchd must run in the foreground, since
launchd manages forking and other resources.
Diffstat:
M man/man4/plumber.4 | 9 ++++++++-
M src/cmd/plumb/fsys.c | 7 +++++--
M src/cmd/plumb/plumber.c | 6 +++++-
M src/cmd/plumb/plumber.h | 2 +-
4 files changed, 19 insertions(+), 5 deletions(-)
---
(DIR) diff --git a/man/man4/plumber.4 b/man/man4/plumber.4
t@@ -4,6 +4,9 @@ plumber \- file system for interprocess messaging
.SH SYNOPSIS
.B plumber
[
+.B -f
+]
+[
.B -p
.I plumbing
]
t@@ -23,7 +26,7 @@ in the format of
Its services are posted via
.IR 9pserve (4)
as
-.BR plumb .
+.BR plumb ,
and consist of two
pre-defined files,
.B plumb/send
t@@ -95,6 +98,10 @@ Thus the rule set may be edited dynamically with a traditional text editor.
However, ports are never deleted dynamically; if a new set of rules does not
include a port that was defined in earlier rules, that port will still exist (although
no new messages will be delivered there).
+.PP
+The
+.B -f
+option causes the process to run in the foreground.
.SH FILES
.TF $HOME/lib/plumbing
.TP
(DIR) diff --git a/src/cmd/plumb/fsys.c b/src/cmd/plumb/fsys.c
t@@ -186,7 +186,7 @@ getclock(void)
}
void
-startfsys(void)
+startfsys(int foreground)
{
int p[2];
t@@ -199,7 +199,10 @@ startfsys(void)
if(post9pservice(p[1], "plumb", nil) < 0)
sysfatal("post9pservice plumb: %r");
close(p[1]);
- proccreate(fsysproc, nil, Stack);
+ if(foreground)
+ fsysproc(nil);
+ else
+ proccreate(fsysproc, nil, Stack);
}
static void
(DIR) diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c
t@@ -7,6 +7,7 @@
#include "plumber.h"
int debug;
+int foreground=0;
char *plumbfile;
char *user;
char *home;
t@@ -37,6 +38,9 @@ threadmain(int argc, char *argv[])
case 'd':
debug = 1;
break;
+ case 'f':
+ foreground = 1;
+ break;
case 'p':
plumbfile = ARGF();
break;
t@@ -69,7 +73,7 @@ threadmain(int argc, char *argv[])
*/
printerrors = 0;
makeports(rules);
- startfsys();
+ startfsys(foreground);
threadexits(nil);
}
(DIR) diff --git a/src/cmd/plumb/plumber.h b/src/cmd/plumb/plumber.h
t@@ -72,7 +72,7 @@ void* emalloc(long);
void* erealloc(void*, long);
char* estrdup(char*);
Ruleset** readrules(char*, int);
-void startfsys(void);
+void startfsys(int);
Exec* matchruleset(Plumbmsg*, Ruleset*);
void freeexec(Exec*);
char* startup(Ruleset*, Exec*);