mirror of
https://github.com/v2fly/v2ray-core.git
synced 2024-11-16 09:26:21 -05:00
fix(app/log): prevent close of closed channel
The close of `done` channel may be called many times. And the handler will be blocked when the log client exists and the closure func is still not be called. So use context to resolve those two problems.
This commit is contained in:
parent
75ece5b6f6
commit
4f2fc729ce
@ -43,18 +43,18 @@ func (s *LoggerServer) FollowLog(_ *FollowLogRequest, stream LoggerService_Follo
|
||||
if !ok {
|
||||
return newError("logger not support following")
|
||||
}
|
||||
done := make(chan struct{})
|
||||
ctx, cancel := context.WithCancel(stream.Context())
|
||||
f := func(msg cmlog.Message) {
|
||||
err := stream.Send(&FollowLogResponse{
|
||||
Message: msg.String(),
|
||||
})
|
||||
if err != nil {
|
||||
close(done)
|
||||
cancel()
|
||||
}
|
||||
}
|
||||
follower.AddFollower(f)
|
||||
defer follower.RemoveFollower(f)
|
||||
<-done
|
||||
<-ctx.Done()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user