cs.c: Add an option to participate in the daemonize protocol.
authorDan Cross <crossd@gmail.com>
Thu, 6 Oct 2016 19:12:20 +0000 (15:12 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 6 Oct 2016 19:39:23 +0000 (15:39 -0400)
Add an option to make cs.c participate in the `daemonize` protocol:
it will signal completion by sending an event to it's parent; this
instead of busy-waiting on the creation of a srv file.

Change-Id: Ibd44c7352ca3e71621255db0dac9069178b1f845
Signed-off-by: Dan Cross <crossd@gmail.com>
Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
tests/cs.c

index 4f1c37d..454afa0 100644 (file)
@@ -93,6 +93,7 @@ int mfd[2];
 int debug;
 int paranoia;
 int ipv6lookups = 1;
+int server;
 char *dbfile = "lib/ndb/local";
 struct ndb *db, *netdb;
 
@@ -183,11 +184,27 @@ struct network *last;
 
 char *argv0;
 
+static void evnotify(int rc)
+{
+       struct event_msg msg = { 0 };
+
+       msg.ev_type = EV_USER_IPI;
+       msg.ev_arg1 = rc;
+       sys_notify(getppid(), EV_USER_IPI, &msg);
+}
+
+static void evexit(int rc)
+{
+       if (server)
+               evnotify(rc);
+       exit(rc);
+}
+
 static void usage(void)
 {
        fprintf(stderr, "CS:usage: %s [-dn] [-f ndb-file] [-x netmtpt]\n", argv0);
        fprintf(stderr, "CS:usage");
-       exit(1);
+       evexit(1);
 }
 
 /*
@@ -231,7 +248,7 @@ int main(int argc, char *argv[])
        justsetname = 0;
        setnetmtpt(mntpt, sizeof(mntpt), NULL);
        ext[0] = 0;
-       while ((ch = getopt(argc, argv, "4df:nx:")) != -1) {
+       while ((ch = getopt(argc, argv, "4df:nSx:")) != -1) {
                switch (ch) {
                case '4':
                        ipv6lookups = 0;
@@ -245,6 +262,9 @@ int main(int argc, char *argv[])
                case 'n':
                        justsetname = 1;
                        break;
+               case 'S':
+                       server = 1;
+                       break;
                case 'x':
                        setnetmtpt(mntpt, sizeof(mntpt), optarg);
                        setext(ext, sizeof(ext), mntpt);
@@ -265,10 +285,12 @@ int main(int argc, char *argv[])
 
        if (!justsetname) {
                mountinit(servefile, mntpt);
+               if (server)
+                       evnotify(0);
                io();
        }
 
-       return 0;
+       evexit(0);
 }
 
 /*
@@ -301,7 +323,7 @@ static void mountinit(char *service, char *mntpt)
        ret = pipe(p);
        if (ret < 0) {
                error(1, 0, "pipe: %r");
-               exit(1);
+               evexit(1);
        }
 
        /*