Skip to content

Commit 87b5c50

Browse files
djdvguseggert
authored andcommitted
fix: chanResponseEmitter cancel being ineffective
1 parent d89651f commit 87b5c50

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

chan.go

+8
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ func (r *chanResponse) Next() (interface{}, error) {
9696
ctx = context.Background()
9797
}
9898

99+
if err := ctx.Err(); err != nil {
100+
return nil, err
101+
}
102+
99103
select {
100104
case v, ok := <-r.ch:
101105
if !ok {
@@ -145,6 +149,10 @@ func (re *chanResponseEmitter) Emit(v interface{}) error {
145149

146150
ctx := re.req.Context
147151

152+
if err := ctx.Err(); err != nil {
153+
return err
154+
}
155+
148156
select {
149157
case re.ch <- v:
150158
if _, ok := v.(Single); ok {

command_test.go

+1-2
Original file line numberDiff line numberDiff line change
@@ -316,6 +316,7 @@ func TestCancel(t *testing.T) {
316316
}
317317

318318
re, res := NewChanResponsePair(req)
319+
cancel()
319320

320321
go func() {
321322
err := re.Emit("abc")
@@ -328,8 +329,6 @@ func TestCancel(t *testing.T) {
328329
close(wait)
329330
}()
330331

331-
cancel()
332-
333332
_, err = res.Next()
334333
if err != context.Canceled {
335334
t.Errorf("res: expected context.Canceled but got %v", err)

0 commit comments

Comments
 (0)