From f03ac7c67a7204b215b6c6248872cb5b10fbc572 Mon Sep 17 00:00:00 2001 From: "Brian S. O'Neill" Date: Sat, 1 Feb 2025 11:40:58 -0800 Subject: [PATCH] Fix spurious IllegalStateException. --- src/main/java/org/cojen/dirmi/core/AutoDisposer.java | 2 +- .../java/org/cojen/dirmi/core/DisposedStubSupport.java | 5 +++++ src/main/java/org/cojen/dirmi/core/StubSupport.java | 7 +++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/cojen/dirmi/core/AutoDisposer.java b/src/main/java/org/cojen/dirmi/core/AutoDisposer.java index 209c1b63..de314daa 100644 --- a/src/main/java/org/cojen/dirmi/core/AutoDisposer.java +++ b/src/main/java/org/cojen/dirmi/core/AutoDisposer.java @@ -114,7 +114,7 @@ public BasicRef(StubWrapper wrapper, StubInvoker invoker) { } void removed() { - if (mInvoker.support().session() instanceof CoreSession session) { + if (mInvoker.support().trySession() instanceof CoreSession session) { // Note: Although the pipe isn't flushed immediately, this operation might // still block. If it does, then no dispose messages will be sent for any // sessions until the blocked one automatically disconnects. This can be diff --git a/src/main/java/org/cojen/dirmi/core/DisposedStubSupport.java b/src/main/java/org/cojen/dirmi/core/DisposedStubSupport.java index abdcec8e..eadf248c 100644 --- a/src/main/java/org/cojen/dirmi/core/DisposedStubSupport.java +++ b/src/main/java/org/cojen/dirmi/core/DisposedStubSupport.java @@ -81,6 +81,11 @@ public CoreSession session() { return mSession; } + @Override + public CoreSession trySession() { + return mSession; + } + @Override public boolean isLenientRestorable() { return mSession != null && mRestorable; diff --git a/src/main/java/org/cojen/dirmi/core/StubSupport.java b/src/main/java/org/cojen/dirmi/core/StubSupport.java index 41c678d2..f1b9aeff 100644 --- a/src/main/java/org/cojen/dirmi/core/StubSupport.java +++ b/src/main/java/org/cojen/dirmi/core/StubSupport.java @@ -30,6 +30,13 @@ public interface StubSupport { Session session(); + /** + * @return null if disposed + */ + default Session trySession() { + return session(); + } + public default boolean isLenientRestorable() { return false; }