openbase / bco.device

Other
0 stars 0 forks source link

Fix Shutdown Deadlock #6

Closed DivineThreepwood closed 7 years ago

DivineThreepwood commented 7 years ago

The following deadlock occurred during shutdown of the bco binary.

Found one Java-level deadlock:
=============================
"ShutdownDeamon[AgentManagerLauncher[]]":
  waiting to lock monitor 0x0000000001faf4a8 (object 0x00000000c2e702c8, a org.openbase.jul.schedule.SyncObject),
  which is held by "pool-1-thread-3"
"pool-1-thread-3":
  waiting for ownable synchronizer 0x00000000c3280570, (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync),
  which is held by "ShutdownDeamon[SynchronizedRemoteRegistry[?]]"
"ShutdownDeamon[SynchronizedRemoteRegistry[?]]": 
  waiting to lock monitor 0x00000000023dac68 (object 0x00000000c32803e8, a java.lang.Object),
  which is held by "Thread-13"
"Thread-13":
  waiting to lock monitor 0x0000000002921d08 (object 0x00000000c3340490, a org.openbase.bco.manager.agent.core.AgentManagerController$1),
  which is held by "pool-1-thread-3"

Java stack information for the threads listed above:
===================================================
"ShutdownDeamon[AgentManagerLauncher[]]":
        at org.openbase.bco.registry.lib.launch.AbstractLauncher.stop(AbstractLauncher.java:205)
        - waiting to lock <0x00000000c2e702c8> (a org.openbase.jul.schedule.SyncObject)
        at org.openbase.bco.registry.lib.launch.AbstractLauncher.shutdown(AbstractLauncher.java:215)
        at org.openbase.jul.iface.Shutdownable$ShutdownDeamon.run(Shutdownable.java:67)
"pool-1-thread-3":
        at sun.misc.Unsafe.park(Native Method)   
        - parking to wait for  <0x00000000c3280570> (a java.util.concurrent.locks.ReentrantReadWriteLock$NonfairSync)
        at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:836)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireShared(AbstractQueuedSynchronizer.java:967)
        at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireShared(AbstractQueuedSynchronizer.java:1283)
        at java.util.concurrent.locks.ReentrantReadWriteLock$ReadLock.lock(ReentrantReadWriteLock.java:727)
        at org.openbase.jul.storage.registry.AbstractRegistry.get(AbstractRegistry.java:295)
        at org.openbase.jul.storage.registry.RegistrySynchronizer.internalSync(RegistrySynchronizer.java:175)
        - locked <0x00000000c3340490> (a org.openbase.bco.manager.agent.core.AgentManagerController$1)
        at org.openbase.jul.storage.registry.RegistrySynchronizer.activate(RegistrySynchronizer.java:98)
        at org.openbase.bco.manager.agent.core.AgentManagerController.activate(AgentManagerController.java:98)
        at org.openbase.bco.registry.lib.launch.AbstractLauncher.launch(AbstractLauncher.java:176)
        - locked <0x00000000c2e702c8> (a org.openbase.jul.schedule.SyncObject)
        at org.openbase.bco.registry.lib.launch.AbstractLauncher$1.call(AbstractLauncher.java:273)
        at org.openbase.bco.registry.lib.launch.AbstractLauncher$1.call(AbstractLauncher.java:269)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
"ShutdownDeamon[SynchronizedRemoteRegistry[?]]":
        at org.openbase.jul.pattern.AbstractObservable.shutdown(AbstractObservable.java:122)
        - waiting to lock <0x00000000c32803e8> (a java.lang.Object)
        at org.openbase.jul.storage.registry.AbstractRegistry.shutdown(AbstractRegistry.java:819)
        at org.openbase.jul.iface.Shutdownable$ShutdownDeamon.run(Shutdownable.java:67)
"Thread-13":
        at org.openbase.jul.storage.registry.RegistrySynchronizer.internalSync(RegistrySynchronizer.java:130)
        - waiting to lock <0x00000000c3340490> (a org.openbase.bco.manager.agent.core.AgentManagerController$1)
        at org.openbase.jul.storage.registry.RegistrySynchronizer.access$100(RegistrySynchronizer.java:54)
        at org.openbase.jul.storage.registry.RegistrySynchronizer$1.relay(RegistrySynchronizer.java:76)
        at org.openbase.jul.schedule.RecurrenceEventFilter.callRelay(RecurrenceEventFilter.java:109)
        at org.openbase.jul.schedule.RecurrenceEventFilter.trigger(RecurrenceEventFilter.java:95)
        - locked <0x00000000c33404d0> (a org.openbase.jul.storage.registry.RegistrySynchronizer$1)
        at org.openbase.jul.storage.registry.RegistrySynchronizer.lambda$new$0(RegistrySynchronizer.java:82)
        at org.openbase.jul.storage.registry.RegistrySynchronizer$$Lambda$4/108077476.update(Unknown Source)
        at org.openbase.jul.pattern.ObservableImpl.notifyObservers(ObservableImpl.java:163)
        - locked <0x00000000c32803e8> (a java.lang.Object)
        at org.openbase.jul.pattern.AbstractObservable.notifyObservers(AbstractObservable.java:136)
        at org.openbase.jul.storage.registry.AbstractRegistry.notifyObservers(AbstractRegistry.java:578)
        at org.openbase.jul.storage.registry.AbstractRegistry.replaceInternalMap(AbstractRegistry.java:453)
        at org.openbase.jul.storage.registry.AbstractRegistry.replaceInternalMap(AbstractRegistry.java:423)
        at org.openbase.jul.storage.registry.RemoteRegistry.notifyRegistryUpdate(RemoteRegistry.java:65)
        - locked <0x00000000c3280380> (a org.openbase.bco.registry.lib.com.SynchronizedRemoteRegistry)
        at org.openbase.bco.registry.agent.remote.AgentRegistryRemote.notifyDataUpdate(AgentRegistryRemote.java:81)
        at org.openbase.bco.registry.agent.remote.AgentRegistryRemote.notifyDataUpdate(AgentRegistryRemote.java:51)
        at org.openbase.jul.extension.rsb.com.RSBRemoteService.applyDataUpdate(RSBRemoteService.java:987)
        at org.openbase.jul.extension.rsb.com.RSBRemoteService.access$700(RSBRemoteService.java:73)
        at org.openbase.jul.extension.rsb.com.RSBRemoteService$InternalUpdateHandler.internalNotify(RSBRemoteService.java:953)
        at rsb.eventprocessing.SingleThreadEventReceivingStrategy$DispatchThread.run(SingleThreadEventReceivingStrategy.java:98)
        - locked <0x00000000c33e3ab0> (a java.util.Collections$SynchronizedSet)

Found 1 deadlock.
pLeminoq commented 7 years ago

Should be fixed by commit openbase/jul@84c8f98629f81bf1cc0015ea41db601c74817f15 in jul.