lib9p

Go 9P library.
Log | Files | Refs | LICENSE

commit 959c37c0c1bbd6f5734cdd08a8f67f835deb6efb
parent 6c43650a2ca9263e514b7d5b383efd1fde36d759
Author: Matsuda Kenji <info@mtkn.jp>
Date:   Mon, 25 Dec 2023 16:23:32 +0900

delete rattach using goto.
	I dont know this is good design

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

diff --git a/server.go b/server.go @@ -267,14 +267,12 @@ func sAuth(ctx context.Context, s *Server, c <-chan *Req) { } func sAttach(ctx context.Context, s *Server, c <-chan *Req) { - rc := make(chan *Req) - defer close(rc) - go rAttach(ctx, rc) for { select { case <-ctx.Done(): return case r, ok := <-c: + var st fs.FileInfo if !ok { return } @@ -282,65 +280,45 @@ func sAttach(ctx context.Context, s *Server, c <-chan *Req) { fid, err := s.fPool.add(ifcall.Fid) if err != nil { r.err = ErrDupFid - rc <- r - continue + goto resp } switch { case s.Auth == nil && ifcall.Afid == NOFID: case s.Auth == nil && ifcall.Afid != NOFID: r.err = ErrBotch - rc <- r - continue + goto resp case s.Auth != nil && ifcall.Afid == NOFID: r.err = fmt.Errorf("authentication required") - rc <- r - continue + goto resp case s.Auth != nil && ifcall.Afid != NOFID: afid, ok := s.fPool.lookup(ifcall.Afid) if !ok { r.err = ErrUnknownFid - rc <- r - continue + goto resp } af, ok := afid.File.(*AuthFile) if !ok { log.Printf("afile: %[1]T, %[1]v", afid.File) r.err = fmt.Errorf("not auth file") - rc <- r - continue + goto resp } if !af.AuthOK { r.err = fmt.Errorf("not authenticated") - rc <- r - continue + goto resp } } fid.OMode = -1 fid.path = "." fid.Uid = ifcall.Uname - st, err := fs.Stat(ExportFS{s.fs}, ".") + st, err = fs.Stat(ExportFS{s.fs}, ".") if err != nil { r.err = fmt.Errorf("stat root: %v", err) - rc <- r - continue + goto resp } r.Ofcall = &RAttach{ Qid: st.Sys().(*Stat).Qid, } - rc <- r - } - } -} - -func rAttach(ctx context.Context, c <-chan *Req) { - for { - select { - case <-ctx.Done(): - return - case r, ok := <-c: - if !ok { - return - } +resp: if r.err != nil { r.Srv.fPool.delete(r.Ifcall.(*TAttach).Fid) setError(r, r.err)