Question about thread initialization (original) (raw)
Thomas Stüfe thomas.stuefe at gmail.com
Fri Oct 12 08🔞20 UTC 2018
- Previous message: RFR (XS): 8211046: Forced data dependencies serve no purpose on x86
- Next message: Question about thread initialization
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Hi all,
a small question.
JVM_StartThread calls new JavaThread() JavaThread::JavaThread() calls os::create_thread() os::create_thread() starts the new thread and waits for the handshake, then returns
Back in JVM_StartThread, we call JavaThread::prepare(), which adds the new thread to the Threads list. By that time, the new thread is already running, but how far it has gotten is unknown.
The new thread's stack dimensions are set from within Thread::run() (for some reason, every child class does this on its own?) by calling Thread::record_stack_base_and_size(). So, after the handshake with its parent thread. Why?
This means we have a little race: in the Threads list there may be threads which have been just created and Thread::run() did not yet get around to set the stack size. In tests I stumbled over this, very rarely, when iterating Threads to check the stack sizes.
Is there any reason why we could not just call record_stack_base_and_size() before calling Thread::run(), right at the start of the native entry function (thread_native_entry in the case of Linux)?
Am I missing something here?
Thanks,
Thomas
- Previous message: RFR (XS): 8211046: Forced data dependencies serve no purpose on x86
- Next message: Question about thread initialization
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]