mirror of
https://github.com/garethgeorge/backrest.git
synced 2025-12-16 18:45:36 +00:00
fix: possible race condition leading to rare panic in GetOperationEvents
This commit is contained in:
@@ -229,27 +229,17 @@ func (s *BackrestHandler) GetOperationEvents(ctx context.Context, req *connect.R
|
|||||||
s.oplog.Subscribe(&callback)
|
s.oplog.Subscribe(&callback)
|
||||||
defer s.oplog.Unsubscribe(&callback)
|
defer s.oplog.Unsubscribe(&callback)
|
||||||
|
|
||||||
go func() {
|
for {
|
||||||
for {
|
select {
|
||||||
select {
|
case err := <-errChan:
|
||||||
case <-ctx.Done():
|
return err
|
||||||
return
|
case <-ctx.Done():
|
||||||
case event := <-events:
|
return nil
|
||||||
if err := resp.Send(event); err != nil {
|
case event := <-events:
|
||||||
select {
|
if err := resp.Send(event); err != nil {
|
||||||
case errChan <- errors.New("failed to send event"):
|
return err
|
||||||
default:
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
|
||||||
|
|
||||||
select {
|
|
||||||
case err := <-errChan:
|
|
||||||
return err
|
|
||||||
case <-ctx.Done():
|
|
||||||
return nil
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user