reopen plumber, build mail

This commit is contained in:
rsc 2006-06-25 23:51:10 +00:00
parent 98df7c80d8
commit ced6fd340e
2 changed files with 44 additions and 16 deletions

View file

@ -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);
}

View file

@ -1,7 +1,7 @@
<$PLAN9/src/mkhdr
TARG=acme
# DIRS=mail
DIRS=mail
OFILES=\
acme.$O\
@ -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