From 76360468535d5e879a56c626018176068b166d00 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Wed, 8 Jul 2009 18:56:06 +0400 Subject: [PATCH] fix java.lang.IllegalThreadStateException --- .../intellij/debugger/jdi/ThreadReferenceProxyImpl.java | 11 +++++++++-- .../intellij/debugger/jdi/VirtualMachineProxyImpl.java | 16 +++++----------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/debugger/impl/com/intellij/debugger/jdi/ThreadReferenceProxyImpl.java b/debugger/impl/com/intellij/debugger/jdi/ThreadReferenceProxyImpl.java index 5ac79aa42d..1335eb993c 100644 --- a/debugger/impl/com/intellij/debugger/jdi/ThreadReferenceProxyImpl.java +++ b/debugger/impl/com/intellij/debugger/jdi/ThreadReferenceProxyImpl.java @@ -254,7 +254,14 @@ public final class ThreadReferenceProxyImpl extends ObjectReferenceProxyImpl imp } public boolean isSuspended() throws ObjectCollectedException { - DebuggerManagerThreadImpl.assertIsManagerThread(); - return getThreadReference().isSuspended(); + try { + DebuggerManagerThreadImpl.assertIsManagerThread(); + return getThreadReference().isSuspended(); + } + catch (IllegalThreadStateException e) { + // must be zombie thread + LOG.info(e); + return false; + } } } diff --git a/debugger/impl/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java b/debugger/impl/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java index 09c3803a93..e621558ecd 100644 --- a/debugger/impl/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java +++ b/debugger/impl/com/intellij/debugger/jdi/VirtualMachineProxyImpl.java @@ -110,19 +110,13 @@ public class VirtualMachineProxyImpl implements JdiTimer, VirtualMachineProxy { public Collection allThreads() { if(myAllThreadsDirty) { myAllThreadsDirty = false; - - List threads = myVirtualMachine.allThreads(); - Map result = new HashMap(); - - for (final ThreadReference threadReference : threads) { - ThreadReferenceProxyImpl threadReferenceProxy = getThreadReferenceProxy(threadReference); - LOG.assertTrue(threadReferenceProxy != null); - - result.put(threadReference, threadReferenceProxy); + final List list = myVirtualMachine.allThreads(); + myAllThreads = new java.util.HashMap(list.size()); + // the following will populate the map from scratch + for (final ThreadReference threadReference : list) { + getThreadReferenceProxy(threadReference); } - myAllThreads = result; } - return myAllThreads.values(); } -- 2.11.4.GIT