commit bf3141ec2d8a53f3a4e7988a10062e5184b442ad
parent 0b14fde3fefe9f1ce61d29b688aacaa5e9aedd4f
Author: Matsuda Kenji <info@mtkn.jp>
Date: Sat, 21 Oct 2023 09:11:29 +0900
update req_test
Diffstat:
3 files changed, 27 insertions(+), 12 deletions(-)
diff --git a/req.go b/req.go
@@ -22,8 +22,9 @@ type Req struct {
func (r *Req) flush() {
// TODO: need mutex?
r.cancel()
+ r.pool.delete(r.tag)
// wait for tag being deleted.
- <-r.tagDeleted
+ // <-r.tagDeleted
}
type ReqPool struct {
diff --git a/req_test.go b/req_test.go
@@ -57,18 +57,28 @@ func TestFlush(t *testing.T) {
if err != nil {
t.Fatalf("open: %v", err)
}
- ctx1, cancel1 := context.WithCancel(ctx)
done := make(chan string)
+ tag0, err := c.tPool.add()
+ if err != nil {
+ t.Fatalf("add tag: %v", err)
+ }
+ ctx1, cancel1 := context.WithCancel(ctx)
+ var data []byte
go func() {
- tag, err := c.tPool.add()
- if err != nil {
- t.Fatalf("add tag: %v", err)
- }
- data, err := c.Read(ctx1, tag, 1, 0, mSize-IOHDRSZ)
- c.tPool.delete(tag)
- t.Logf("read data: %v, err: %v", data, err)
- done <- "read goroutine returned"
+ data, err = c.Read(ctx1, tag0, 1, 0, mSize-IOHDRSZ)
+ c.tPool.delete(tag0)
+ close(done)
}()
+ tag, err = c.tPool.add()
+ if err != nil {
+ t.Fatalf("add tag: %v", err)
+ }
+ err = c.Flush(ctx, tag, tag0)
+ c.tPool.delete(tag)
+ if err != nil {
+ t.Errorf("flush: %v", err)
+ }
cancel1()
t.Logf("canceled: %v", <-done)
+ t.Logf("read data: %v, err: %v", data, err)
}
diff --git a/server.go b/server.go
@@ -261,7 +261,7 @@ func sFlush(ctx context.Context, s *Server, r *Req) {
func rFlush(r *Req, err error) {
if err != nil {
- panic("err in flush")
+ panic(fmt.Errorf("err in flush: %v", err))
}
if r.oldReq != nil {
r.oldReq.flush()
@@ -878,6 +878,8 @@ L:
sAuth(ctx1, s, r)
case *TAttach:
sAttach(ctx1, s, r)
+ case *TFlush:
+ sFlush(ctx1, s, r)
case *TWalk:
sWalk(ctx1, s, r)
case *TOpen:
@@ -911,13 +913,15 @@ L:
func respond(ctx context.Context, r *Req, err error) {
switch r.ifcall.(type) {
default:
- panic("bug")
+ panic(fmt.Errorf("bug: r.ifcall: %v", r.ifcall))
case *TVersion:
rVersion(r, err)
case *TAuth:
rAuth(r, err)
case *TAttach:
rAttach(r, err)
+ case *TFlush:
+ rFlush(r, err)
case *TWalk:
rWalk(r, err)
case *TOpen: