Open pLeminoq opened 3 years ago
This is the critical part:
20:44:59.545 [pool-1-thread-59] WARN o.o.b.d.c.a.ActionImpl Thread[pool-1-thread-3] state[WAITING] === Stacktrace === java.base@11.0.8/jdk.internal.misc.Unsafe.park(Native Method) java.base@11.0.8/java.util.concurrent.locks.LockSupport.park(LockSupport.java:194) java.base@11.0.8/java.util.concurrent.locks.AbstractQueuedSynchronizer.parkAndCheckInterrupt(AbstractQueuedSynchronizer.java:885) java.base@11.0.8/java.util.concurrent.locks.AbstractQueuedSynchronizer.doAcquireInterruptibly(AbstractQueuedSynchronizer.java:943) java.base@11.0.8/java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireInterruptibly(AbstractQueuedSynchronizer.java:1263) java.base@11.0.8/java.util.concurrent.locks.ReentrantReadWriteLock$WriteLock.lockInterruptibly(ReentrantReadWriteLock.java:1014) app//org.openbase.jul.extension.protobuf.BuilderSyncSetup.lockWriteInterruptibly(BuilderSyncSetup.java:153) app//org.openbase.jul.extension.protobuf.ClosableInterruptibleDataBuilderImpl.(ClosableInterruptibleDataBuilderImpl.java:50) app//org.openbase.jul.extension.protobuf.ClosableInterruptibleDataBuilderImpl. (ClosableInterruptibleDataBuilderImpl.java:38) app//org.openbase.jul.communication.controller.AbstractControllerServer.getDataBuilderInterruptible(AbstractControllerServer.java:587) app//org.openbase.bco.dal.control.action.ActionImpl.setRequestedState(ActionImpl.java:364) app//org.openbase.bco.dal.control.action.ActionImpl.lambda$execute$0(ActionImpl.java:278) app//org.openbase.bco.dal.control.action.ActionImpl$$Lambda$295/0x00000008004ac840.call(Unknown Source) java.base@11.0.8/java.util.concurrent.FutureTask.run(FutureTask.java:264) java.base@11.0.8/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.base@11.0.8/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) java.base@11.0.8/java.lang.Thread.run(Thread.java:834) ================== 20:44:59.546 [pool-1-thread-59] WARN o.o.b.d.c.a.ActionImpl Thread[pool-1-thread-59] state[RUNNABLE] === Stacktrace === java.base@11.0.8/java.lang.Thread.dumpThreads(Native Method) java.base@11.0.8/java.lang.Thread.getAllStackTraces(Thread.java:1658) app//org.openbase.jul.exception.StackTracePrinter.printAllStackTraces(StackTracePrinter.java:167) app//org.openbase.jul.exception.StackTracePrinter.printAllStackTraces(StackTracePrinter.java:156) app//org.openbase.bco.dal.control.action.ActionImpl.cancelActionTask(ActionImpl.java:670) app//org.openbase.bco.dal.control.action.ActionImpl.lambda$abort$2(ActionImpl.java:513) app//org.openbase.bco.dal.control.action.ActionImpl$$Lambda$294/0x00000008004ab040.call(Unknown Source) java.base@11.0.8/java.util.concurrent.FutureTask.run(FutureTask.java:264) java.base@11.0.8/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.base@11.0.8/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) java.base@11.0.8/java.lang.Thread.run(Thread.java:834) ================== 20:44:59.547 [pool-1-thread-59] WARN o.o.b.d.c.a.ActionImpl Thread[pool-1-thread-93] state[TIMED_WAITING] === Stacktrace === java.base@11.0.8/java.lang.Object.wait(Native Method) app//org.openbase.bco.dal.control.action.ActionImpl.waitForActionTaskFinalization(ActionImpl.java:358) app//org.openbase.bco.dal.control.action.ActionImpl.cancelActionTask(ActionImpl.java:659) app//org.openbase.bco.dal.control.action.ActionImpl.reject(ActionImpl.java:580) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController.reschedule(AbstractUnitController.java:939) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController.scheduleAction(AbstractUnitController.java:833) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController.applyAction(AbstractUnitController.java:658) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController.internalApplyActionAuthenticated(AbstractUnitController.java:1248) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController.lambda$applyActionAuthenticated$6(AbstractUnitController.java:1196) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController$$Lambda$292/0x00000008004a9840.process(Unknown Source) app//org.openbase.bco.authentication.lib.AuthenticatedServiceProcessor.authenticatedAction(AuthenticatedServiceProcessor.java:135) app//org.openbase.bco.authentication.lib.AuthenticatedServiceProcessor.authenticatedAction(AuthenticatedServiceProcessor.java:90) app//org.openbase.bco.authentication.lib.AuthenticatedServiceProcessor.authenticatedAction(AuthenticatedServiceProcessor.java:69) app//org.openbase.bco.dal.control.layer.unit.AbstractUnitController.applyActionAuthenticated(AbstractUnitController.java:1214) jdk.internal.reflect.GeneratedMethodAccessor312.invoke(Unknown Source) java.base@11.0.8/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) java.base@11.0.8/java.lang.reflect.Method.invoke(Method.java:566) app//org.openbase.jul.communication.controller.RPCHelper.lambda$registerMethod$0(RPCHelper.java:130) app//org.openbase.jul.communication.controller.RPCHelper$$Lambda$282/0x0000000800480440.call(Unknown Source) java.base@11.0.8/java.util.concurrent.FutureTask.run(FutureTask.java:264) java.base@11.0.8/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) java.base@11.0.8/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) java.base@11.0.8/java.lang.Thread.run(Thread.java:834) ==================
The cancelation is triggered by the scheduling while the scheduling thread holds the builder write lock which is totally fine.
During that time the action is submitted and before it gets executed the requested state is set. This operation needs the builder lock which is still busy because of the scheduling. Actually the cancelation should interrupt the task and therefore, the lock acquiring should be interrupted as well, however its not :( even when the lockInterruptibly
is called.