Skip to content

Commit 29d69be

Browse files
committed
Fix a race in recorder Start()/Stop()
If a recorder is Stop()ed before he finished Start()ing, he may not have created the channels used by Stop(). Those should be initialized at instanciation time, really.
1 parent 9a64ab0 commit 29d69be

File tree

2 files changed

+4
-2
lines changed

2 files changed

+4
-2
lines changed

pkg/recorder/recorder.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ func New(config *config.KfConfig, events event.Notifier) *Listener {
4444
config: config,
4545
events: events,
4646
actives: activeFiles{},
47+
stopch: make(chan struct{}),
48+
donech: make(chan struct{}),
4749
}
4850
}
4951

@@ -58,8 +60,6 @@ func (w *Listener) Start() *Listener {
5860
go func() {
5961
evCh := w.events.ReadChan()
6062
gcTick := time.NewTicker(w.config.ResyncIntv * 2)
61-
w.stopch = make(chan struct{})
62-
w.donech = make(chan struct{})
6363
defer gcTick.Stop()
6464
defer close(w.donech)
6565

pkg/recorder/recorder_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ func TestFailingFSRecorder(t *testing.T) {
142142
// back to normal operations
143143
rec.Stop() // just to flush ongoing ops before switch filesystem
144144
appFs = afero.NewMemMapFs()
145+
rec.stopch = make(chan struct{})
146+
rec.donech = make(chan struct{})
145147
rec.Start()
146148
evt.Send(newNotif(event.Upsert, "foo2"))
147149
rec.Stop() // flush ongoing ops

0 commit comments

Comments
 (0)