From 09383528d89e4ef02b0679e2391aade864e8420f Mon Sep 17 00:00:00 2001 From: heliheli Date: Tue, 11 Jul 2023 18:39:16 +0300 Subject: [PATCH] Get session state after lock acquiring, release session on error --- .../jdiameter/server/impl/app/ro/ServerRoSessionImpl.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/core/jdiameter/impl/src/main/java/org/jdiameter/server/impl/app/ro/ServerRoSessionImpl.java b/core/jdiameter/impl/src/main/java/org/jdiameter/server/impl/app/ro/ServerRoSessionImpl.java index e90b0b5cd..952164e96 100644 --- a/core/jdiameter/impl/src/main/java/org/jdiameter/server/impl/app/ro/ServerRoSessionImpl.java +++ b/core/jdiameter/impl/src/main/java/org/jdiameter/server/impl/app/ro/ServerRoSessionImpl.java @@ -151,10 +151,12 @@ public E getState(Class stateType) { @Override public boolean handleEvent(StateEvent event) throws InternalException, OverloadException { ServerRoSessionState newState = null; - ServerRoSessionState state = sessionData.getServerRoSessionState(); try { sendAndStateLock.lock(); + // Get state after lock acquiring + ServerRoSessionState state = sessionData.getServerRoSessionState(); + // Can be null if there is no state transition, transition to IDLE state should terminate this app session Event localEvent = (Event) event; @@ -224,6 +226,10 @@ public boolean handleEvent(StateEvent event) throws InternalException, OverloadE case RECEIVED_TERMINATE: Answer errorAnswer = ((Request) localEvent.getRequest().getMessage()).createAnswer(ResultCode.UNKNOWN_SESSION_ID); session.send(errorAnswer); + + // release this session + release(); + logger.debug("Received an UPDATE or TERMINATE for a new session. Answering with 5002 (UNKNOWN_SESSION_ID) and terminating session."); // and let it throw exception anyway ... default: