openbase / bco.dal

Domotic Abstraction Layer
Other
1 stars 2 forks source link

Deadlock between data update and config synchronization #135

Closed pLeminoq closed 5 years ago

pLeminoq commented 5 years ago

In unit test the following deadlock appeared between a config synchronization and data publishing of a controller:

============================
"pool-1-thread-22":
  waiting to lock monitor 0x00007f21f4489208 (object 0x00000000f2f0df88, a org.openbase.bco.dal.remote.detector.PresenceDetector),
  which is held by "pool-2-thread-7"
"pool-2-thread-7":
  waiting to lock monitor 0x00007f21b400f1e8 (object 0x00000000f2f0d648, a org.openbase.jul.schedule.SyncObject),
  which is held by "pool-1-thread-7"
"pool-1-thread-7":
  waiting to lock monitor 0x00007f21ac02e778 (object 0x00000000f2f0caf0, a org.openbase.jul.schedule.SyncObject),
  which is held by "pool-2-thread-7"

Java stack information for the threads listed above:
===================================================
"pool-1-thread-22":
    at org.openbase.bco.dal.remote.detector.PresenceDetector.updateMotionState(PresenceDetector.java:180)
    - waiting to lock <0x00000000f2f0df88> (a org.openbase.bco.dal.remote.detector.PresenceDetector)
    at org.openbase.bco.dal.remote.detector.PresenceDetector.lambda$new$0(PresenceDetector.java:98)
    at org.openbase.bco.dal.remote.detector.PresenceDetector$$Lambda$192/727250772.update(Unknown Source)
    at org.openbase.jul.pattern.AbstractObservable.lambda$notifyObservers$0(AbstractObservable.java:276)
    at org.openbase.jul.pattern.AbstractObservable$$Lambda$71/1678368632.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
"pool-2-thread-7":
    at org.openbase.jul.extension.rsb.com.AbstractConfigurableController.getConfig(AbstractConfigurableController.java:178)
    - waiting to lock <0x00000000f2f0d648> (a org.openbase.jul.schedule.SyncObject)
    at org.openbase.bco.dal.control.layer.unit.AbstractUnitController.filterDataForUser(AbstractUnitController.java:1206)
    at org.openbase.bco.authentication.lib.com.AbstractAuthenticatedConfigurableController.updateDataToPublish(AbstractAuthenticatedConfigurableController.java:114)
    at org.openbase.jul.extension.rsb.com.AbstractControllerServer.notifyChange(AbstractControllerServer.java:623)
    - locked <0x00000000f2f0caf0> (a org.openbase.jul.schedule.SyncObject)
    at org.openbase.jul.extension.protobuf.BuilderSyncSetup.unlockWrite(BuilderSyncSetup.java:193)
    at org.openbase.jul.extension.protobuf.ClosableDataBuilder.close(ClosableDataBuilder.java:52)
    at org.openbase.bco.dal.control.layer.unit.location.LocationControllerImpl$1.update(LocationControllerImpl.java:109)
    at org.openbase.bco.dal.control.layer.unit.location.LocationControllerImpl$1.update(LocationControllerImpl.java:103)
    at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:257)
    - locked <0x00000000f2f0e040> (a org.openbase.jul.pattern.AbstractObservable$2)
    at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:189)
    at org.openbase.bco.dal.remote.detector.PresenceDetector.updatePresenceState(PresenceDetector.java:171)
    - locked <0x00000000f2f0df88> (a org.openbase.bco.dal.remote.detector.PresenceDetector)
    at org.openbase.bco.dal.remote.detector.PresenceDetector.access$100(PresenceDetector.java:53)
    at org.openbase.bco.dal.remote.detector.PresenceDetector$1.expired(PresenceDetector.java:90)
    at org.openbase.jul.schedule.Timeout.lambda$internal_start$0(Timeout.java:183)
    at org.openbase.jul.schedule.Timeout$$Lambda$34/264675188.call(Unknown Source)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
"pool-1-thread-7":
    at org.openbase.jul.extension.rsb.com.AbstractControllerServer.validateInitialization(AbstractControllerServer.java:801)
    - waiting to lock <0x00000000f2f0caf0> (a org.openbase.jul.schedule.SyncObject)
    at org.openbase.jul.extension.rsb.com.AbstractControllerServer.isActive(AbstractControllerServer.java:434)
    at org.openbase.jul.extension.rsb.com.AbstractConfigurableController.applyConfigUpdate(AbstractConfigurableController.java:104)
    - locked <0x00000000f2f0d648> (a org.openbase.jul.schedule.SyncObject)
    at org.openbase.bco.dal.control.layer.unit.AbstractUnitController.applyConfigUpdate(AbstractUnitController.java:375)
    at org.openbase.bco.dal.control.layer.unit.AbstractAggregatedBaseUnitController.applyConfigUpdate(AbstractAggregatedBaseUnitController.java:101)
    - locked <0x00000000f2f0c8b0> (a org.openbase.bco.dal.control.layer.unit.location.LocationControllerImpl)
    at org.openbase.bco.dal.control.layer.unit.AbstractUnitController$1.update(AbstractUnitController.java:174)
    at org.openbase.bco.dal.control.layer.unit.AbstractUnitController$1.update(AbstractUnitController.java:168)
    at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:257)
    - locked <0x00000000ff400c88> (a org.openbase.jul.pattern.AbstractObservable$2)
    at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:189)
    at org.openbase.jul.extension.rsb.com.AbstractRemoteClient.applyDataUpdate(AbstractRemoteClient.java:1484)
    at org.openbase.jul.extension.rsb.com.AbstractRemoteClient.applyEventUpdate(AbstractRemoteClient.java:1099)
    - locked <0x00000000ff400ce0> (a org.openbase.jul.schedule.SyncObject)
    at org.openbase.jul.extension.rsb.com.AbstractRemoteClient.access$1000(AbstractRemoteClient.java:73)
    at org.openbase.jul.extension.rsb.com.AbstractRemoteClient$SyncTaskCallable.call(AbstractRemoteClient.java:1817)
    at org.openbase.jul.extension.rsb.com.AbstractRemoteClient$SyncTaskCallable.call(AbstractRemoteClient.java:1681)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
DivineThreepwood commented 5 years ago

hopefully fixed, otherwise reopen.