lib9p

Go 9P library.
Log | Files | Refs

commit fdd86832f13940ed0a179d5c83d13ec59fa54f94
parent 5972869a67b1f2b564bc5a59fd84823bb03a41e2
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Sun, 17 Sep 2023 07:39:07 +0900

add changeMSize()

Diffstat:
Mserver.go | 42++++++++++++++++++++++++++++++------------
1 file changed, 30 insertions(+), 12 deletions(-)

diff --git a/server.go b/server.go @@ -26,6 +26,13 @@ var ( ErrNotFound = fmt.Errorf("not found") ) +func setError(r *Req, err error) { + r.ofcall = &RError{ + tag: r.ifcall.Tag(), + ename: err, + } +} + type Server struct { fs FS mSize uint32 @@ -50,6 +57,17 @@ func NewServer(fsys FS, mSize uint32, r io.Reader, w io.Writer) *Server { } } +func (s *Server) changeMSize(mSize uint32) { + if (s.mSize == mSize) { + return + } + s.rlock.Lock() + s.wlock.Lock() + s.mSize = mSize + s.rlock.Unlock() + s.wlock.Unlock() +} + func (s *Server) getReq() (*Req, error) { s.rlock.Lock() buf, err := read9PMsg(s.reader) @@ -106,9 +124,7 @@ func sVersion(s *Server, r *Req) { // TODO: In plan9, s.mSize is changed in rversion(). msize := ifcall.MSize() - if msize < s.mSize { - s.mSize = msize - } else { + if msize > s.mSize { msize = s.mSize } @@ -121,7 +137,12 @@ func sVersion(s *Server, r *Req) { respond(r, nil) } -func rVersion(r *Req, err error) {} +func rVersion(r *Req, err error) { + if err != nil { + panic(fmt.Errorf("rVersion err: %w", err)) + } + r.srv.changeMSize(r.ofcall.(*RVersion).MSize()) +} func sAuth(s *Server, r *Req) { respond(r, fmt.Errorf("authentication not implemented")) @@ -164,12 +185,9 @@ func sAttach(s *Server, r *Req) { respond(r, nil) } -func rAttach(r *Req, err error) {} - -func rError(r *Req, err error) { - r.ofcall = &RError{ - tag: r.ifcall.Tag(), - ename: err, +func rAttach(r *Req, err error) { + if err != nil { + r.srv.fPool.delete(r.ifcall.(*TAttach).Fid()) } } @@ -247,7 +265,7 @@ func rWalk(r *Req, err error) { } if len(ofcall.Qid()) == 0 { if err == nil && ifcall.NWName() != 0 { - rError(r, ErrNotFound) + setError(r, ErrNotFound) return } } @@ -744,7 +762,7 @@ func respond(r *Req, err error) { if err == nil { panic("neither ofcall nor err is set.") } - rError(r, err) + setError(r, err) } else { panic(fmt.Errorf("unknown message type %v", r.ofcall.Type())) }