8284165: Add pid to process reaper thread name

Reviewed-by: rriggs
This commit is contained in:
Thomas Stuefe 2022-04-05 03:39:39 +00:00
parent 36b3bbc53d
commit 9561b5e041
3 changed files with 32 additions and 25 deletions

View file

@ -140,6 +140,9 @@ final class ProcessHandleImpl implements ProcessHandle {
processReaperExecutor.execute(new Runnable() { processReaperExecutor.execute(new Runnable() {
// Use inner class to avoid lambda stack overhead // Use inner class to avoid lambda stack overhead
public void run() { public void run() {
String threadName = Thread.currentThread().getName();
Thread.currentThread().setName("process reaper (pid " + pid + ")");
try {
int exitValue = waitForProcessExit0(pid, shouldReap); int exitValue = waitForProcessExit0(pid, shouldReap);
if (exitValue == NOT_A_CHILD) { if (exitValue == NOT_A_CHILD) {
// pid not alive or not a child of this process // pid not alive or not a child of this process
@ -167,6 +170,10 @@ final class ProcessHandleImpl implements ProcessHandle {
newCompletion.complete(exitValue); newCompletion.complete(exitValue);
// remove from cache afterwards // remove from cache afterwards
completions.remove(pid, newCompletion); completions.remove(pid, newCompletion);
} finally {
// Restore thread name
Thread.currentThread().setName(threadName);
}
} }
}); });
} }

View file

@ -57,7 +57,7 @@ public class ProcessReaperCCL {
// Verify all "Process Reaper" threads have a null CCL // Verify all "Process Reaper" threads have a null CCL
for (Thread th : Thread.getAllStackTraces().keySet()) { for (Thread th : Thread.getAllStackTraces().keySet()) {
if ("process reaper".equals(th.getName())) { if (th.getName().startsWith("process reaper")) {
Assert.assertEquals(th.getContextClassLoader(), null, "CCL not null"); Assert.assertEquals(th.getContextClassLoader(), null, "CCL not null");
} }
} }

View file

@ -440,7 +440,7 @@ public class Basic {
if ("Finalizer".equals(name) if ("Finalizer".equals(name)
&& info.getLockName().startsWith("java.lang.ref.ReferenceQueue$Lock")) && info.getLockName().startsWith("java.lang.ref.ReferenceQueue$Lock"))
continue; continue;
if ("process reaper".equals(name)) if (name.startsWith("process reaper"))
continue; continue;
if (name != null && name.startsWith("ForkJoinPool.commonPool-worker")) if (name != null && name.startsWith("ForkJoinPool.commonPool-worker"))
continue; continue;