Skip to content

Commit 9067dbe

Browse files
committed
svm: clean-up Thread initialization
1 parent 6a7fd86 commit 9067dbe

File tree

2 files changed

+23
-57
lines changed

2 files changed

+23
-57
lines changed

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/JavaThreads.java

Lines changed: 0 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -335,58 +335,6 @@ public static void dispatchUncaughtException(Thread thread, Throwable throwable)
335335
}
336336
}
337337

338-
/**
339-
* Thread instance initialization.
340-
*
341-
* This method is a copy of the implementation of the JDK 8 method
342-
*
343-
* <code>Thread.init(ThreadGroup g, Runnable target, String name, long stackSize)</code>
344-
*
345-
* and the JDK 11 constructor
346-
*
347-
* <code>Thread(ThreadGroup g, Runnable target, String name, long stackSize,
348-
* AccessControlContext acc, boolean inheritThreadLocals)</code>
349-
*
350-
* with these unsupported features removed:
351-
* <ul>
352-
* <li>No security manager: using the ContextClassLoader of the parent.</li>
353-
* </ul>
354-
*/
355-
static void initializeNewThread(
356-
Target_java_lang_Thread tjlt,
357-
ThreadGroup groupArg,
358-
Runnable target,
359-
String name,
360-
long stackSize,
361-
boolean inheritThreadLocals) {
362-
if (name == null) {
363-
throw new NullPointerException("The name cannot be null");
364-
}
365-
tjlt.name = name;
366-
367-
final Thread parent = Thread.currentThread();
368-
final ThreadGroup group = ((groupArg != null) ? groupArg : parent.getThreadGroup());
369-
370-
int priority;
371-
boolean daemon;
372-
if (JavaThreads.toTarget(parent) == tjlt) {
373-
priority = Thread.NORM_PRIORITY;
374-
daemon = false;
375-
} else {
376-
priority = parent.getPriority();
377-
daemon = parent.isDaemon();
378-
}
379-
380-
initThreadFields(tjlt, group, target, stackSize, priority, daemon);
381-
382-
PlatformThreads.setThreadStatus(fromTarget(tjlt), ThreadStatus.NEW);
383-
384-
initNewThreadLocalsAndLoader(tjlt, inheritThreadLocals, parent);
385-
386-
/* Set thread ID */
387-
tjlt.tid = nextThreadID();
388-
}
389-
390338
static void initThreadFields(Target_java_lang_Thread tjlt, ThreadGroup group, Runnable target, long stackSize, int priority, boolean daemon) {
391339
assert tjlt.holder == null;
392340
tjlt.holder = new Target_java_lang_Thread_FieldHolder(group, target, stackSize, priority, daemon);

substratevm/src/com.oracle.svm.core/src/com/oracle/svm/core/thread/Target_java_lang_Thread.java

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ public final class Target_java_lang_Thread {
9090
@Alias//
9191
volatile String name;
9292

93-
@Alias//
94-
Target_java_lang_ThreadLocal_ThreadLocalMap threadLocals = null;
95-
9693
@Alias//
9794
Target_java_lang_ThreadLocal_ThreadLocalMap inheritableThreadLocals = null;
9895

@@ -212,9 +209,30 @@ private Target_java_lang_Thread(
212209
/* Injected Target_java_lang_Thread instance field initialization. */
213210
this.threadData = new ThreadData();
214211

215-
String nameLocal = (name != null) ? name : genThreadName();
212+
this.name = (name != null) ? name : genThreadName();
216213
boolean inheritThreadLocals = (characteristics & NO_INHERIT_THREAD_LOCALS) == 0;
217-
JavaThreads.initializeNewThread(this, g, target, nameLocal, stackSize, inheritThreadLocals);
214+
215+
final Thread parent = Thread.currentThread();
216+
final ThreadGroup group = ((g != null) ? g : parent.getThreadGroup());
217+
218+
int priority;
219+
boolean daemon;
220+
if (JavaThreads.toTarget(parent) == this) {
221+
priority = Thread.NORM_PRIORITY;
222+
daemon = false;
223+
} else {
224+
priority = parent.getPriority();
225+
daemon = parent.isDaemon();
226+
}
227+
228+
JavaThreads.initThreadFields(this, group, target, stackSize, priority, daemon);
229+
230+
PlatformThreads.setThreadStatus(JavaThreads.fromTarget(this), ThreadStatus.NEW);
231+
232+
JavaThreads.initNewThreadLocalsAndLoader(this, inheritThreadLocals, parent);
233+
234+
/* Set thread ID */
235+
tid = JavaThreads.nextThreadID();
218236

219237
this.scopedValueBindings = NEW_THREAD_BINDINGS;
220238
}

0 commit comments

Comments
 (0)