mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-29 07:03:48 +03:00
Avoid deadlock (fixes #941)
This commit is contained in:
parent
b35d19d78e
commit
1240690973
1 changed files with 9 additions and 4 deletions
13
caddy.go
13
caddy.go
|
@ -696,14 +696,19 @@ func loadServerBlocks(serverType, filename string, input io.Reader) ([]caddyfile
|
|||
// instances after stopping is completed. Do not re-use any
|
||||
// references to old instances after calling Stop.
|
||||
func Stop() error {
|
||||
instancesMu.Lock()
|
||||
for _, inst := range instances {
|
||||
// This awkward for loop is to avoid a deadlock since
|
||||
// inst.Stop() also acquires the instancesMu lock.
|
||||
for {
|
||||
instancesMu.Lock()
|
||||
if len(instances) == 0 {
|
||||
break
|
||||
}
|
||||
inst := instances[0]
|
||||
instancesMu.Unlock()
|
||||
if err := inst.Stop(); err != nil {
|
||||
log.Printf("[ERROR] Stopping %s: %v", inst.serverType, err)
|
||||
}
|
||||
}
|
||||
instances = []*Instance{}
|
||||
instancesMu.Unlock()
|
||||
return nil
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue