treopen plumber, build mail - plan9port - [fork] Plan 9 from user space
git clone git://src.adamsgaard.dk/plan9port
Log
Files
Refs
README
LICENSE
---
commit ced6fd340e1a93fe87eac906d749a1989729e1ce
parent 98df7c80d83005ec6e4403a13014451c5dbfae3e
Author: rsc 
Date:   Sun, 25 Jun 2006 23:51:10 +0000

reopen plumber, build mail

Diffstat:
  M src/cmd/acme/look.c                 |      56 +++++++++++++++++++++++--------
  M src/cmd/acme/mkfile                 |       4 ++--

2 files changed, 44 insertions(+), 16 deletions(-)
---
diff --git a/src/cmd/acme/look.c b/src/cmd/acme/look.c
t@@ -21,32 +21,60 @@ Window*        openfile(Text*, Expand*, int);
 int        nuntitled;
 
 void
-plumbproc(void *v)
+plumbthread(void *v)
 {
+        CFid *fid;
         Plumbmsg *m;
+        Timer *t;
 
         USED(v);
         threadsetname("plumbproc");
+        
+        /*
+         * Loop so that if plumber is restarted, acme need not be.
+         */
         for(;;){
-                m = plumbrecvfid(plumbeditfid);
-                if(m == nil)
-                        threadexits(nil);
-                sendp(cplumb, m);
+                /*
+                 * Connect to plumber.
+                 */
+                plumbunmount();
+                while((fid = plumbopenfid("edit", OREAD|OCEXEC)) == nil){
+                        t = timerstart(2000);
+                        recv(t->c, nil);
+                        timerstop(t);
+                }
+                plumbeditfid = fid;
+                plumbsendfid = plumbopenfid("send", OWRITE|OCEXEC);
+        
+                /*
+                 * Relay messages.
+                 */
+                for(;;){
+                        m = plumbrecvfid(plumbeditfid);
+                        if(m == nil)
+                                break;
+                        sendp(cplumb, m);
+                }
+
+                /*
+                 * Lost connection.
+                 */
+                fid = plumbsendfid;
+                plumbsendfid = nil;
+                fsclose(fid);
+
+                fid = plumbeditfid;
+                plumbeditfid = nil;
+                fsclose(fid);
         }
 }
 
 void
 startplumbing(void)
 {
-        plumbeditfid = plumbopenfid("edit", OREAD|OCEXEC);
-        if(plumbeditfid == nil)
-                fprint(2, "acme: can't initialize plumber: %r\n");
-        else{
-                cplumb = chancreate(sizeof(Plumbmsg*), 0);
-                chansetname(cplumb, "cplumb");
-                threadcreate(plumbproc, nil, STACK);
-        }
-        plumbsendfid = plumbopenfid("send", OWRITE|OCEXEC);
+        cplumb = chancreate(sizeof(Plumbmsg*), 0);
+        chansetname(cplumb, "cplumb");
+        threadcreate(plumbthread, nil, STACK);
 }
 
 
diff --git a/src/cmd/acme/mkfile b/src/cmd/acme/mkfile
t@@ -1,7 +1,7 @@
 <$PLAN9/src/mkhdr
 
 TARG=acme
-# DIRS=mail
+DIRS=mail
 
 OFILES=\
         acme.$O\
t@@ -30,6 +30,6 @@ HFILES=dat.h\
         fns.h\
 
 <$PLAN9/src/mkone
-# <$PLAN9/src/mkdirs
+<$PLAN9/src/mkdirs
 
 edit.$O ecmd.$O elog.$O:        edit.h