Fix a deadlock in acquiring vehicle from coordinator
Some checks failed
Release / call-build-workflow (push) Has been cancelled
Release / Publish Docker :release (push) Has been cancelled
Release / Github & APT (push) Has been cancelled
Release / Demo (push) Has been cancelled
Release / Hassio Addon (push) Has been cancelled

This commit is contained in:
andig 2023-09-23 17:21:19 +02:00
parent 4756ac8f32
commit 3b1d615239

View file

@ -65,12 +65,17 @@ func (c *Coordinator) Delete(vehicle api.Vehicle) {
func (c *Coordinator) acquire(owner loadpoint.API, vehicle api.Vehicle) {
c.mu.Lock()
defer c.mu.Unlock()
if o, ok := c.tracked[vehicle]; ok && o != owner {
o.SetVehicle(nil)
// defer call to SetVehicle to avoid deadlock on c.mu
defer func(o loadpoint.API) {
o.SetVehicle(nil)
}(o)
}
c.tracked[vehicle] = owner
// unlock before deferred SetVehicle executes a this will round-trip back here
c.mu.Unlock()
}
func (c *Coordinator) release(vehicle api.Vehicle) {