mirror of
https://github.com/NationalSecurityAgency/ghidra.git
synced 2024-11-26 14:12:17 +00:00
GP-0: Another attempt to resolve CI hangs.
This commit is contained in:
parent
f33d94d421
commit
ceedbe6c9f
@ -20,6 +20,7 @@ import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import ghidra.async.AsyncUtils.TemperamentalRunnable;
|
||||
import ghidra.dbg.target.TargetEnvironment;
|
||||
import ghidra.dbg.target.TargetMethod.TargetParameterMap;
|
||||
import ghidra.dbg.test.AbstractDebuggerModelAttacherTest;
|
||||
@ -49,4 +50,35 @@ public abstract class AbstractModelForGdbAttacherTest extends AbstractDebuggerMo
|
||||
assertEquals("little", environment.getEndian());
|
||||
assertTrue(environment.getDebugger().toLowerCase().contains("gdb"));
|
||||
}
|
||||
|
||||
// NB. Gradle/Java hangs on process clean-up if target is still attached
|
||||
protected void withDetachAndForcefulDummyDestruction(TemperamentalRunnable test)
|
||||
throws Throwable {
|
||||
try {
|
||||
test.run();
|
||||
runTestDetach(getAttachSpecimen());
|
||||
}
|
||||
finally {
|
||||
if (dummy == null) {
|
||||
return;
|
||||
}
|
||||
dummy.process.destroy();
|
||||
dummy.process.destroyForcibly();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testAttachByObj() throws Throwable {
|
||||
withDetachAndForcefulDummyDestruction(() -> super.testAttachByObj());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testAttachByPid() throws Throwable {
|
||||
withDetachAndForcefulDummyDestruction(() -> super.testAttachByPid());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void testAttachByPidThenResumeInterrupt() throws Throwable {
|
||||
withDetachAndForcefulDummyDestruction(() -> super.testAttachByPidThenResumeInterrupt());
|
||||
}
|
||||
}
|
||||
|
@ -16,10 +16,12 @@
|
||||
package ghidra.dbg.testutil;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.TimeoutException;
|
||||
|
||||
import ghidra.framework.Application;
|
||||
import ghidra.util.Msg;
|
||||
|
||||
public class DummyProc implements AutoCloseable {
|
||||
public final Process process;
|
||||
@ -65,11 +67,13 @@ public class DummyProc implements AutoCloseable {
|
||||
.start();
|
||||
|
||||
pid = process.pid();
|
||||
Msg.info(this, "Started dummy process pid = " + pid + ": " + List.of(args));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void close() throws Exception {
|
||||
if (!process.destroyForcibly().waitFor(1000, TimeUnit.MILLISECONDS)) {
|
||||
Msg.error(this, "Could not terminate process " + pid);
|
||||
throw new TimeoutException("Could not terminate process " + pid);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user