Skip to content

Commit 6d2b232

Browse files
authored
Merge pull request #18739 from veshij/leak_fix
etcdserver: terminate recvLoop on serverWatchStream.close()
2 parents 38c27a4 + 7760735 commit 6d2b232

File tree

1 file changed

+7
-1
lines changed

1 file changed

+7
-1
lines changed

server/etcdserver/api/v3rpc/watch.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -347,11 +347,17 @@ func (sws *serverWatchStream) recvLoop() error {
347347
id := uv.CancelRequest.WatchId
348348
err := sws.watchStream.Cancel(mvcc.WatchID(id))
349349
if err == nil {
350-
sws.ctrlStream <- &pb.WatchResponse{
350+
wr := &pb.WatchResponse{
351351
Header: sws.newResponseHeader(sws.watchStream.Rev()),
352352
WatchId: id,
353353
Canceled: true,
354354
}
355+
select {
356+
case sws.ctrlStream <- wr:
357+
case <-sws.closec:
358+
return nil
359+
}
360+
355361
sws.mu.Lock()
356362
delete(sws.progress, mvcc.WatchID(id))
357363
delete(sws.prevKV, mvcc.WatchID(id))

0 commit comments

Comments
 (0)