From 663017560218b62119022f9f4360cf6eb05a36e2 Mon Sep 17 00:00:00 2001 From: rsc Date: Fri, 5 May 2006 04:55:14 +0000 Subject: fix edit pipe bug --- src/cmd/acme/xfid.c | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'src/cmd/acme/xfid.c') diff --git a/src/cmd/acme/xfid.c b/src/cmd/acme/xfid.c index 15b411ce..65ae2d99 100644 --- a/src/cmd/acme/xfid.c +++ b/src/cmd/acme/xfid.c @@ -98,9 +98,9 @@ xfidopen(Xfid *x) w = x->f->w; t = &w->body; + q = FILE(x->f->qid); if(w){ winlock(w, 'E'); - q = FILE(x->f->qid); switch(q){ case QWaddr: if(w->nopen[q]++ == 0){ @@ -174,11 +174,26 @@ xfidopen(Xfid *x) respond(x, &fc, Eperm); return; } + if(!canqlock(&w->editoutlk)){ + winunlock(w); + respond(x, &fc, Einuse); + return; + } w->wrselrange = range(t->q1, t->q1); break; } winunlock(w); } + else{ + switch(q){ + case Qeditout: + if(!canqlock(&editoutlk)){ + respond(x, &fc, Einuse); + return; + } + break; + } + } fc.qid = x->f->qid; fc.iounit = messagesize-IOHDRSZ; x->f->open = TRUE; @@ -203,10 +218,10 @@ xfidclose(Xfid *x) return; } + q = FILE(x->f->qid); x->f->open = FALSE; if(w){ winlock(w, 'E'); - q = FILE(x->f->qid); switch(q){ case QWctl: if(w->ctlfid!=~0 && w->ctlfid==x->f->fid){ @@ -247,10 +262,20 @@ xfidclose(Xfid *x) min(w->wrselrange.q1, t->file->b.nc), 1); textscrdraw(t); break; + case QWeditout: + qunlock(&w->editoutlk); + break; } winunlock(w); winclose(w); } + else{ + switch(q){ + case Qeditout: + qunlock(&editoutlk); + break; + } + } respond(x, &fc, nil); } -- cgit v1.2.3