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:
| M | server.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)