tbe like plan 9 plumber - 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 df49b303431ef0b62c4f6fc4d790a1fd2d2f7e77
 (DIR) parent ddd8916a0e04baee417c2f71f73e45df9acf7c72
 (HTM) Author: rsc <devnull@localhost>
       Date:   Tue, 28 Dec 2004 23:20:54 +0000
       
       be like plan 9 plumber
       
       Diffstat:
         M src/cmd/plumb/plumber.c             |      25 ++++++++++++++++++++++---
       
       1 file changed, 22 insertions(+), 3 deletions(-)
       ---
 (DIR) diff --git a/src/cmd/plumb/plumber.c b/src/cmd/plumb/plumber.c
       t@@ -26,11 +26,24 @@ makeports(Ruleset *rules[])
        }
        
        void
       +mainproc(void *v)
       +{
       +        Channel *c;
       +
       +        c = v;
       +        printerrors = 0;
       +        makeports(rules);
       +        startfsys();
       +        sendp(c, nil);
       +}
       +
       +void
        threadmain(int argc, char *argv[])
        {
                char buf[512];
                int fd;
                int volatile dofork;
       +        Channel *c;
        
                progname = "plumber";
                dofork = 1;
       t@@ -73,9 +86,15 @@ threadmain(int argc, char *argv[])
                if(dofork)
                        threaddaemonize();
        
       -        printerrors = 0;
       -        makeports(rules);
       -        startfsys();
       +        /*
       +         * Start all processes and threads from other proc
       +         * so we (main pid) can return to user.
       +         */
       +        c = chancreate(sizeof(void*), 0);
       +        proccreate(mainproc, c, 8192);
       +        recvp(c);
       +        chanfree(c);
       +        threadexits(nil);
        }
        
        void