diff --git a/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt b/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt index 402d6ee368..571c97b82c 100644 --- a/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt +++ b/node/src/main/kotlin/net/corda/node/internal/CordaRPCOpsImpl.kt @@ -167,7 +167,7 @@ internal class CordaRPCOpsImpl( return snapshot } - override fun killFlow(id: StateMachineRunId): Boolean = if (smm.killFlow(id)) true else smm.flowHospital.dropSessionInit(id) + override fun killFlow(id: StateMachineRunId): Boolean = smm.killFlow(id) override fun stateMachinesFeed(): DataFeed, StateMachineUpdate> { diff --git a/node/src/main/kotlin/net/corda/node/services/statemachine/SingleThreadedStateMachineManager.kt b/node/src/main/kotlin/net/corda/node/services/statemachine/SingleThreadedStateMachineManager.kt index 34c9b77582..637400b128 100644 --- a/node/src/main/kotlin/net/corda/node/services/statemachine/SingleThreadedStateMachineManager.kt +++ b/node/src/main/kotlin/net/corda/node/services/statemachine/SingleThreadedStateMachineManager.kt @@ -229,7 +229,7 @@ class SingleThreadedStateMachineManager( } override fun killFlow(id: StateMachineRunId): Boolean { - return mutex.locked { + val killFlowResult = mutex.locked { cancelTimeoutIfScheduled(id) val flow = flows.remove(id) if (flow != null) { @@ -257,6 +257,11 @@ class SingleThreadedStateMachineManager( } } } + return if(killFlowResult) { + true + } else { + flowHospital.dropSessionInit(id) + } } override fun addSessionBinding(flowId: StateMachineRunId, sessionId: SessionId) {