Merge pull request #29456 from cpuguy83/fix_client_events_race
Fixes a race condition in client events monitoring
This commit is contained in:
commit
8a8416ccbd
1 changed files with 5 additions and 0 deletions
|
@ -22,17 +22,20 @@ func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-c
|
|||
messages := make(chan events.Message)
|
||||
errs := make(chan error, 1)
|
||||
|
||||
started := make(chan struct{})
|
||||
go func() {
|
||||
defer close(errs)
|
||||
|
||||
query, err := buildEventsQueryParams(cli.version, options)
|
||||
if err != nil {
|
||||
close(started)
|
||||
errs <- err
|
||||
return
|
||||
}
|
||||
|
||||
resp, err := cli.get(ctx, "/events", query, nil)
|
||||
if err != nil {
|
||||
close(started)
|
||||
errs <- err
|
||||
return
|
||||
}
|
||||
|
@ -40,6 +43,7 @@ func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-c
|
|||
|
||||
decoder := json.NewDecoder(resp.body)
|
||||
|
||||
close(started)
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
|
@ -61,6 +65,7 @@ func (cli *Client) Events(ctx context.Context, options types.EventsOptions) (<-c
|
|||
}
|
||||
}
|
||||
}()
|
||||
<-started
|
||||
|
||||
return messages, errs
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue