# HG changeset patch # User Mechiel Lukkien # Date 1187193752 -7200 # Node ID bd9330e95ebbac098de161f9ffa4529a324da745 # Parent c6c061169cb7a9f6f3ca8d9cc27c40c2b73a9db2 minor changes. do not kill processes, just send nil over channel. do not pctl pgrp. diff -r c6c061169cb7 -r bd9330e95ebb appl/cmd/vacfs.b --- a/appl/cmd/vacfs.b Wed Aug 15 16:02:22 2007 +0200 +++ b/appl/cmd/vacfs.b Wed Aug 15 18:02:32 2007 +0200 @@ -32,7 +32,7 @@ dflag := pflag := 0; session: ref Session; -ss: ref Styxserver; +srv: ref Styxserver; Elem: adt { qid: int; @@ -227,7 +227,6 @@ styxservers = load Styxservers Styxservers->PATH; vac = load Vac Vac->PATH; - sys->pctl(sys->NEWPGRP, nil); venti->init(); vac->init(); styx->init(); @@ -290,23 +289,25 @@ spawn navigator(navchan); msgc: chan of ref Tmsg; - (msgc, ss) = Styxserver.new(sys->fildes(0), nav, big rqid); + (msgc, srv) = Styxserver.new(sys->fildes(0), nav, big rqid); - for(;;) { - pick m := <- msgc { +serve: + while((mm := <-msgc) != nil) + pick m := mm { Readerror => - say("read error: "+m.error); + fprint(fildes(2), "styx read: %s\n", m.error); + break serve; Read => say(sprint("have read, offset=%ubd count=%d", m.offset, m.count)); - (c, err) := ss.canread(m); + (c, err) := srv.canread(m); if(c == nil){ - ss.reply(ref Rmsg.Error(m.tag, err)); - break; + srv.reply(ref Rmsg.Error(m.tag, err)); + continue; } if(c.qtype & Sys->QTDIR){ - ss.default(m); - break; + srv.default(m); + continue; } ef := getfile(int c.path); @@ -314,22 +315,22 @@ a := array[n] of byte; have := ef.vf.pread(a, n, m.offset); if(have < 0) { - ss.reply(ref Rmsg.Error(m.tag, sprint("%r"))); - break; + srv.reply(ref Rmsg.Error(m.tag, sprint("%r"))); + continue; } - ss.reply(ref Rmsg.Read(m.tag, a[:have])); + srv.reply(ref Rmsg.Read(m.tag, a[:have])); Open => (c, mode, f, err) := canopen(m); if(c == nil){ - ss.reply(ref Rmsg.Error(m.tag, err)); - break; + srv.reply(ref Rmsg.Error(m.tag, err)); + continue; } c.open(mode, f.qid); - ss.reply(ref Rmsg.Open(m.tag, f.qid, ss.iounit())); + srv.reply(ref Rmsg.Open(m.tag, f.qid, srv.iounit())); Clunk => - f := ss.getfid(m.fid); + f := srv.getfid(m.fid); if(f != nil) { pick e := get(int f.path) { Dir => @@ -340,22 +341,23 @@ del(e); } } - ss.default(m); + srv.default(m); * => - ss.default(m); + srv.default(m); } - } + navchan <-= nil; } +# from appl/lib/styxservers.b canopen(m: ref Tmsg.Open): (ref Fid, int, ref Sys->Dir, string) { - c := ss.getfid(m.fid); + c := srv.getfid(m.fid); if(c == nil) return (nil, 0, nil, Styxservers->Ebadfid); if(c.isopen) return (nil, 0, nil, Styxservers->Eopen); - (f, err) := ss.t.stat(c.path); + (f, err) := srv.t.stat(c.path); if(f == nil) return (nil, 0, nil, err); mode := styxservers->openmode(m.mode); @@ -372,9 +374,7 @@ navigator(c: chan of ref Navop) { -loop: - for(;;) { - navop := <- c; + while((navop := <-c) != nil) pick n := navop { Stat => n.reply <-= (get(int n.path).stat(), nil); @@ -384,7 +384,7 @@ (ne, err) := walk(ed, n.name); if(err != nil) { n.reply <-= (nil, err); - break; + continue; } ed.nused--; ne.nused++; @@ -394,7 +394,7 @@ if(dflag) say(sprint("have readdir path=%bd offset=%d count=%d", n.path, n.offset, n.count)); if(n.path == big 0) { n.reply <-= (nil, nil); - break; + continue; } ed := getdir(int n.path); if(n.offset == 0) { @@ -408,7 +408,7 @@ if(ok < 0) { say(sprint("readdir error: %r")); n.reply <-= (nil, sprint("reading directory: %r")); - continue loop; + continue; } if(de != nil) { cqid := childget(ed.qid, de.qid); @@ -428,12 +428,10 @@ n.reply <-= (d, nil); n.reply <-= (nil, nil); } - } } error(s: string) { - killgrp(); fprint(fildes(2), "%s\n", s); raise "fail:"+s; } @@ -443,10 +441,3 @@ if(dflag) fprint(fildes(2), "%s\n", s); } - -killgrp() -{ - fd := sys->open("/prog/"+string sys->pctl(0, nil)+"/ctl", sys->OWRITE); - if(fd != nil) - sys->fprint(fd, "killgrp\n"); -}