From f2a13d46ffed7a11cfb8e6b8b0e52058f61e216b Mon Sep 17 00:00:00 2001 From: "Egor.Ushakov" Date: Mon, 27 Mar 2017 14:36:53 +0300 Subject: [PATCH] IDEA-168766 Debugged process hangs during hot-swapping with yourkit agent - workaround, disabled by default --- .../com/intellij/debugger/impl/ReloadClassesWorker.java | 8 ++++++++ platform/util/resources/misc/registry.properties | 1 + 2 files changed, 9 insertions(+) diff --git a/java/debugger/impl/src/com/intellij/debugger/impl/ReloadClassesWorker.java b/java/debugger/impl/src/com/intellij/debugger/impl/ReloadClassesWorker.java index 30c36592d990..79a522993afa 100644 --- a/java/debugger/impl/src/com/intellij/debugger/impl/ReloadClassesWorker.java +++ b/java/debugger/impl/src/com/intellij/debugger/impl/ReloadClassesWorker.java @@ -27,6 +27,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.registry.Registry; import com.intellij.util.StringBuilderSpinAllocator; import com.intellij.util.concurrency.Semaphore; import com.intellij.util.ui.MessageCategory; @@ -42,6 +43,7 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.IntStream; /** * @author lex @@ -113,6 +115,12 @@ class ReloadClassesWorker { //virtualMachineProxy.suspend(); + if (Registry.is("debugger.resume.yourkit.threads")) { + virtualMachineProxy.allThreads().stream() + .filter(t -> t.isSuspended() && t.name().startsWith("YJPAgent-")) + .forEach(t -> IntStream.range(0, t.getSuspendCount()).forEach(i -> t.resume())); + } + try { RedefineProcessor redefineProcessor = new RedefineProcessor(virtualMachineProxy); diff --git a/platform/util/resources/misc/registry.properties b/platform/util/resources/misc/registry.properties index 1d408d94750d..44c4f78debf6 100644 --- a/platform/util/resources/misc/registry.properties +++ b/platform/util/resources/misc/registry.properties @@ -261,6 +261,7 @@ debugger.intern.string.literals=false debugger.intern.string.literals.description=Make string literal refer to the same instance of class String debugger.capture.points=true debugger.capture.points.annotations=false +debugger.resume.yourkit.threads=false analyze.exceptions.on.the.fly=false analyze.exceptions.on.the.fly.description=Automatically analyze clipboard on frame activation,\