Skip to content

Commit b0cff6b

Browse files
author
Viktor Klang
committed
8299419: Thread.sleep(millis) may throw OOME
Reviewed-by: alanb
1 parent 591aa7c commit b0cff6b

File tree

5 files changed

+8
-19
lines changed

5 files changed

+8
-19
lines changed

src/java.base/share/classes/java/lang/Thread.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -457,19 +457,20 @@ public static void yield() {
457457
* Called before sleeping to create a jdk.ThreadSleep event.
458458
*/
459459
private static ThreadSleepEvent beforeSleep(long nanos) {
460-
ThreadSleepEvent event = null;
461-
if (ThreadSleepEvent.isTurnedOn()) {
462-
try {
463-
event = new ThreadSleepEvent();
460+
try {
461+
ThreadSleepEvent event = new ThreadSleepEvent();
462+
if (event.isEnabled()) {
464463
event.time = nanos;
465464
event.begin();
466-
} catch (OutOfMemoryError e) {
467-
event = null;
465+
return event;
468466
}
467+
} catch (OutOfMemoryError e) {
468+
// ignore
469469
}
470-
return event;
470+
return null;
471471
}
472472

473+
473474
/**
474475
* Called after sleeping to commit the jdk.ThreadSleep event.
475476
*/

src/java.base/share/classes/jdk/internal/event/ThreadSleepEvent.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,5 @@
3030
*/
3131

3232
public final class ThreadSleepEvent extends Event {
33-
private static final ThreadSleepEvent EVENT = new ThreadSleepEvent();
34-
35-
/**
36-
* Returns {@code true} if event is enabled, {@code false} otherwise.
37-
*/
38-
public static boolean isTurnedOn() {
39-
return EVENT.isEnabled();
40-
}
41-
4233
public long time;
4334
}

test/hotspot/jtreg/vmTestbase/nsk/monitoring/share/ThreadController.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -665,7 +665,6 @@ public SleepingThread(ThreadController controller, String name, Log log, Threads
665665
// jdk.internal.event.ThreadSleepEvent not accessible
666666
expectedMethods.add("jdk.internal.event.ThreadSleepEvent.<clinit>");
667667
expectedMethods.add("jdk.internal.event.ThreadSleepEvent.isEnabled");
668-
expectedMethods.add("jdk.internal.event.ThreadSleepEvent.isTurnedOn");
669668
expectedMethods.add(SleepingThread.class.getName() + ".run");
670669

671670
switch (controller.invocationType) {

test/hotspot/jtreg/vmTestbase/nsk/monitoring/share/thread/SleepingThread.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ public class SleepingThread extends RecursiveMonitoringThread {
4242
"java.lang.Thread.afterSleep",
4343
"java.util.concurrent.TimeUnit.toNanos",
4444
"jdk.internal.event.ThreadSleepEvent.<clinit>",
45-
"jdk.internal.event.ThreadSleepEvent.isTurnedOn",
4645
"jdk.internal.event.ThreadSleepEvent.isEnabled",
4746
"nsk.monitoring.share.thread.SleepingThread.runInside"
4847
};

test/hotspot/jtreg/vmTestbase/nsk/monitoring/stress/thread/strace001.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@ private static boolean fillTrace() {
151151
"java.util.concurrent.TimeUnit.toNanos",
152152
"jdk.internal.event.ThreadSleepEvent.<clinit>",
153153
"jdk.internal.event.ThreadSleepEvent.<init>",
154-
"jdk.internal.event.ThreadSleepEvent.isTurnedOn",
155154
"jdk.internal.event.ThreadSleepEvent.isEnabled"
156155
};
157156

0 commit comments

Comments
 (0)