diff --git a/temporal-sdk/src/main/java/io/temporal/internal/sync/DeterministicRunnerImpl.java b/temporal-sdk/src/main/java/io/temporal/internal/sync/DeterministicRunnerImpl.java index 150a729fda..59f4d54a26 100644 --- a/temporal-sdk/src/main/java/io/temporal/internal/sync/DeterministicRunnerImpl.java +++ b/temporal-sdk/src/main/java/io/temporal/internal/sync/DeterministicRunnerImpl.java @@ -415,7 +415,9 @@ public String stackTrace() { StringBuilder result = new StringBuilder(); lock.lock(); try { - checkClosed(); + if (closed) { + return "Workflow is closed."; + } for (WorkflowThread coroutine : threads) { if (result.length() > 0) { result.append("\n"); diff --git a/temporal-sdk/src/test/java/io/temporal/workflow/SyncTest.java b/temporal-sdk/src/test/java/io/temporal/workflow/SyncTest.java index cc2ce4859b..c127b844e0 100644 --- a/temporal-sdk/src/test/java/io/temporal/workflow/SyncTest.java +++ b/temporal-sdk/src/test/java/io/temporal/workflow/SyncTest.java @@ -91,6 +91,8 @@ public void testSyncUntypedAndStackTrace() { assertTrue(stackTrace, stackTrace.contains("activityWithDelay")); String result = workflowStub.getResult(String.class); assertEquals("activity10", result); + // No stacktrace after the workflow is closed. Assert message. + assertEquals("Workflow is closed.", workflowStub.query(QUERY_TYPE_STACK_TRACE, String.class)); } @Test