306 // method to complete because it may need to allocate memory to |
306 // method to complete because it may need to allocate memory to |
307 // store information for the new thread. |
307 // store information for the new thread. |
308 |
308 |
309 // initialize structure dependent on thread local storage |
309 // initialize structure dependent on thread local storage |
310 ThreadLocalStorage::set_thread(this); |
310 ThreadLocalStorage::set_thread(this); |
311 |
|
312 // set up any platform-specific state. |
|
313 os::initialize_thread(); |
|
314 } |
311 } |
315 |
312 |
316 void Thread::record_stack_base_and_size() { |
313 void Thread::record_stack_base_and_size() { |
317 set_stack_base(os::current_stack_base()); |
314 set_stack_base(os::current_stack_base()); |
318 set_stack_size(os::current_stack_size()); |
315 set_stack_size(os::current_stack_size()); |
319 |
316 // CR 7190089: on Solaris, primordial thread's stack is adjusted |
320 // record thread's native stack, stack grows downward |
317 // in initialize_thread(). Without the adjustment, stack size is |
321 address low_stack_addr = stack_base() - stack_size(); |
318 // incorrect if stack is set to unlimited (ulimit -s unlimited). |
322 MemTracker::record_thread_stack(low_stack_addr, stack_size(), this, |
319 // So far, only Solaris has real implementation of initialize_thread(). |
323 CURRENT_PC); |
320 // |
|
321 // set up any platform-specific state. |
|
322 os::initialize_thread(this); |
|
323 |
|
324 // record thread's native stack, stack grows downward |
|
325 if (MemTracker::is_on()) { |
|
326 address stack_low_addr = stack_base() - stack_size(); |
|
327 MemTracker::record_thread_stack(stack_low_addr, stack_size(), this, |
|
328 CURRENT_PC); |
|
329 } |
324 } |
330 } |
325 |
331 |
326 |
332 |
327 Thread::~Thread() { |
333 Thread::~Thread() { |
328 // Reclaim the objectmonitors from the omFreeList of the moribund thread. |
334 // Reclaim the objectmonitors from the omFreeList of the moribund thread. |