commit a9b45b66283b83ecb64577a8fc1be549375c12e8
parent c3c5e2ace48d2d47c310c7824e730369d2bd344a
Author: Matsuda Kenji <info@mtkn.jp>
Date: Fri, 29 Dec 2023 08:32:10 +0900
delete respond
Diffstat:
2 files changed, 14 insertions(+), 42 deletions(-)
diff --git a/server.go b/server.go
@@ -128,22 +128,26 @@ func (s *Server) runListener(ctx context.Context, rp *ReqPool) {
// and marshalls each of them into 9P messages and writes it to s.w.
func (s *Server) runSpeaker(ctx context.Context, rp *ReqPool) {
rc := make(chan *Req)
- s.speakChan = rc
+ s.respChan = rc
go func() {
for {
select {
- case r := <-rc:
+ case r, ok := <-rc:
+ if !ok {
+ return
+ }
+ r.Ofcall.SetTag(r.Tag)
// free tag.
rp.delete(r.Tag)
_, err := s.w.Write(r.Ofcall.marshal())
if err != nil {
- select {
- case r.speakErrChan <- err:
- case <-ctx.Done():
- return
- }
+ // TODO: handle error.
+ log.Printf("speak: %v", err)
+ continue
+ }
+ if s.chatty9P {
+ fmt.Fprintf(os.Stderr, "--> %s\n", r.Ofcall)
}
- close(r.speakErrChan)
case <-ctx.Done():
return
}
@@ -1190,7 +1194,6 @@ func (s *Server) Serve(ctx context.Context) {
go sRemove(ctx, s, removeChan)
go sStat(ctx, s, statChan)
go sWStat(ctx, s, wstatChan)
- go respond(ctx, s)
L:
for {
select {
@@ -1245,34 +1248,3 @@ L:
}
}
}
-
-func respond(ctx context.Context, s *Server) {
- for {
- select {
- case <-ctx.Done():
- return
- case r, ok := <-s.respChan:
- if !ok {
- return
- }
- r.Ofcall.SetTag(r.Tag)
- select {
- case s.speakChan <- r:
- if s.chatty9P {
- fmt.Fprintf(os.Stderr, "--> %s\n", r.Ofcall)
- }
- case <-ctx.Done():
- return
- }
- select {
- case err := <-r.speakErrChan:
- // TODO: handle errors.
- if err != nil {
- log.Printf("speak: %v", err)
- }
- case <-ctx.Done():
- return
- }
- }
- }
-}
diff --git a/server2_test.go b/server2_test.go
@@ -79,9 +79,9 @@ func TestRunSpeaker(t *testing.T) {
if err != nil {
t.Fatalf("unmarshal %v", err)
}
- s.speakChan <- &Req{
+ s.respChan <- &Req{
+ Tag: msg.GetTag(),
Ofcall: msg,
- speakErrChan: make(chan error),
}
got := make([]byte, len(want))
_, err = io.ReadFull(r, got)