state: explicitly free resources on Close()
This commit is contained in:
@@ -238,7 +238,7 @@ func main() {
|
|||||||
acmeCache = path.Join(*cachePath, "acme")
|
acmeCache = path.Join(*cachePath, "acme")
|
||||||
}
|
}
|
||||||
|
|
||||||
loadPolicyState := func() (http.Handler, error) {
|
loadPolicyState := func() (*lib.State, error) {
|
||||||
policyData, err := os.ReadFile(*policyFile)
|
policyData, err := os.ReadFile(*policyFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to read policy file: %w", err)
|
return nil, fmt.Errorf("failed to read policy file: %w", err)
|
||||||
@@ -309,6 +309,7 @@ func main() {
|
|||||||
if sig != syscall.SIGHUP {
|
if sig != syscall.SIGHUP {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
oldHandler := handler
|
||||||
handler, err = loadPolicyState()
|
handler, err = loadPolicyState()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
slog.Error("handler configuration reload error", "err", err)
|
slog.Error("handler configuration reload error", "err", err)
|
||||||
@@ -317,6 +318,9 @@ func main() {
|
|||||||
|
|
||||||
swap(handler)
|
swap(handler)
|
||||||
slog.Warn("handler configuration reloaded")
|
slog.Warn("handler configuration reloaded")
|
||||||
|
if oldHandler != nil {
|
||||||
|
_ = oldHandler.Close()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
23
lib/state.go
23
lib/state.go
@@ -54,9 +54,8 @@ type State struct {
|
|||||||
Mux *http.ServeMux
|
Mux *http.ServeMux
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewState(p policy.Policy, opt settings.Settings, settings policy.StateSettings) (handler http.Handler, err error) {
|
func NewState(p policy.Policy, opt settings.Settings, settings policy.StateSettings) (state *State, err error) {
|
||||||
|
state = new(State)
|
||||||
state := new(State)
|
|
||||||
state.close = make(chan struct{})
|
state.close = make(chan struct{})
|
||||||
state.settings = settings
|
state.settings = settings
|
||||||
state.opt = opt
|
state.opt = opt
|
||||||
@@ -273,3 +272,21 @@ func NewState(p policy.Policy, opt settings.Settings, settings policy.StateSetti
|
|||||||
|
|
||||||
return state, nil
|
return state, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (state *State) Close() error {
|
||||||
|
select {
|
||||||
|
case <-state.close:
|
||||||
|
default:
|
||||||
|
close(state.close)
|
||||||
|
for _, c := range state.challenges {
|
||||||
|
if c.Object != nil {
|
||||||
|
err := c.Object.Close()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user