server: Move director interrupt handler to method

This commit is contained in:
Christian Provenzano 2022-05-11 20:41:10 -04:00
parent 655d171eca
commit b5b466088d
2 changed files with 11 additions and 9 deletions

View File

@ -45,9 +45,7 @@ func newDirector(lg *zap.Logger, urlsFunc GetProxyURLs, failureWait time.Duratio
stopc: make(chan struct{}), stopc: make(chan struct{}),
donec: make(chan struct{}), donec: make(chan struct{}),
} }
osutil.RegisterInterruptHandler(func() { osutil.RegisterInterruptHandler(d.stop)
close(d.stopc)
})
d.refresh() d.refresh()
go func() { go func() {
defer close(d.donec) defer close(d.donec)
@ -129,6 +127,15 @@ func (d *director) endpoints() []*endpoint {
return filtered return filtered
} }
func (d *director) stop() {
close(d.stopc)
select {
case <-d.donec:
case <-time.After(time.Second):
d.lg.Warn("timed out waiting for director to stop")
}
}
func newEndpoint(lg *zap.Logger, u url.URL, failureWait time.Duration) *endpoint { func newEndpoint(lg *zap.Logger, u url.URL, failureWait time.Duration) *endpoint {
ep := endpoint{ ep := endpoint{
lg: lg, lg: lg,

View File

@ -67,12 +67,7 @@ func TestNewDirectorScheme(t *testing.T) {
t.Errorf("#%d: want endpoints = %#v, got = %#v", i, tt.want, gep) t.Errorf("#%d: want endpoints = %#v, got = %#v", i, tt.want, gep)
} }
close(got.stopc) got.stop()
select {
case <-got.donec:
case <-time.After(time.Second):
t.Fatalf("done took too long")
}
} }
} }