Mercurial > hg > truffle
comparison src/share/vm/runtime/thread.cpp @ 4006:436b4a3231bf
7098194: integrate macosx-port changes
Summary: Integrate bsd-port/hotspot and macosx-port/hotspot changes as of 2011.09.29.
Reviewed-by: kvn, dholmes, never, phh
Contributed-by: Christos Zoulas <christos@zoulas.com>, Greg Lewis <glewis@eyesbeyond.com>, Kurt Miller <kurt@intricatesoftware.com>, Alexander Strange <astrange@apple.com>, Mike Swingler <swingler@apple.com>, Roger Hoover <rhoover@apple.com>, Victor Hernandez <vhernandez@apple.com>, Pratik Solanki <psolanki@apple.com>
author | dcubed |
---|---|
date | Thu, 13 Oct 2011 09:35:42 -0700 |
parents | f08d439fab8c |
children | 23a1c8de9d51 |
comparison
equal
deleted
inserted
replaced
4005:2ef3386478e6 | 4006:436b4a3231bf |
---|---|
108 | 108 |
109 #ifdef DTRACE_ENABLED | 109 #ifdef DTRACE_ENABLED |
110 | 110 |
111 // Only bother with this argument setup if dtrace is available | 111 // Only bother with this argument setup if dtrace is available |
112 | 112 |
113 #ifndef USDT2 | |
113 HS_DTRACE_PROBE_DECL(hotspot, vm__init__begin); | 114 HS_DTRACE_PROBE_DECL(hotspot, vm__init__begin); |
114 HS_DTRACE_PROBE_DECL(hotspot, vm__init__end); | 115 HS_DTRACE_PROBE_DECL(hotspot, vm__init__end); |
115 HS_DTRACE_PROBE_DECL5(hotspot, thread__start, char*, intptr_t, | 116 HS_DTRACE_PROBE_DECL5(hotspot, thread__start, char*, intptr_t, |
116 intptr_t, intptr_t, bool); | 117 intptr_t, intptr_t, bool); |
117 HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, | 118 HS_DTRACE_PROBE_DECL5(hotspot, thread__stop, char*, intptr_t, |
127 name, len, \ | 128 name, len, \ |
128 java_lang_Thread::thread_id((javathread)->threadObj()), \ | 129 java_lang_Thread::thread_id((javathread)->threadObj()), \ |
129 (javathread)->osthread()->thread_id(), \ | 130 (javathread)->osthread()->thread_id(), \ |
130 java_lang_Thread::is_daemon((javathread)->threadObj())); \ | 131 java_lang_Thread::is_daemon((javathread)->threadObj())); \ |
131 } | 132 } |
133 | |
134 #else /* USDT2 */ | |
135 | |
136 #define HOTSPOT_THREAD_PROBE_start HOTSPOT_THREAD_PROBE_START | |
137 #define HOTSPOT_THREAD_PROBE_stop HOTSPOT_THREAD_PROBE_STOP | |
138 | |
139 #define DTRACE_THREAD_PROBE(probe, javathread) \ | |
140 { \ | |
141 ResourceMark rm(this); \ | |
142 int len = 0; \ | |
143 const char* name = (javathread)->get_thread_name(); \ | |
144 len = strlen(name); \ | |
145 HOTSPOT_THREAD_PROBE_##probe( /* probe = start, stop */ \ | |
146 (char *) name, len, \ | |
147 java_lang_Thread::thread_id((javathread)->threadObj()), \ | |
148 (uintptr_t) (javathread)->osthread()->thread_id(), \ | |
149 java_lang_Thread::is_daemon((javathread)->threadObj())); \ | |
150 } | |
151 | |
152 #endif /* USDT2 */ | |
132 | 153 |
133 #else // ndef DTRACE_ENABLED | 154 #else // ndef DTRACE_ENABLED |
134 | 155 |
135 #define DTRACE_THREAD_PROBE(probe, javathread) | 156 #define DTRACE_THREAD_PROBE(probe, javathread) |
136 | 157 |
1325 #ifndef SERIALGC | 1346 #ifndef SERIALGC |
1326 SATBMarkQueueSet JavaThread::_satb_mark_queue_set; | 1347 SATBMarkQueueSet JavaThread::_satb_mark_queue_set; |
1327 DirtyCardQueueSet JavaThread::_dirty_card_queue_set; | 1348 DirtyCardQueueSet JavaThread::_dirty_card_queue_set; |
1328 #endif // !SERIALGC | 1349 #endif // !SERIALGC |
1329 | 1350 |
1330 JavaThread::JavaThread(bool is_attaching) : | 1351 JavaThread::JavaThread(bool is_attaching_via_jni) : |
1331 Thread() | 1352 Thread() |
1332 #ifndef SERIALGC | 1353 #ifndef SERIALGC |
1333 , _satb_mark_queue(&_satb_mark_queue_set), | 1354 , _satb_mark_queue(&_satb_mark_queue_set), |
1334 _dirty_card_queue(&_dirty_card_queue_set) | 1355 _dirty_card_queue(&_dirty_card_queue_set) |
1335 #endif // !SERIALGC | 1356 #endif // !SERIALGC |
1336 { | 1357 { |
1337 initialize(); | 1358 initialize(); |
1338 _is_attaching = is_attaching; | 1359 if (is_attaching_via_jni) { |
1360 _jni_attach_state = _attaching_via_jni; | |
1361 } else { | |
1362 _jni_attach_state = _not_attaching_via_jni; | |
1363 } | |
1339 assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor"); | 1364 assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor"); |
1340 } | 1365 } |
1341 | 1366 |
1342 bool JavaThread::reguard_stack(address cur_sp) { | 1367 bool JavaThread::reguard_stack(address cur_sp) { |
1343 if (_stack_guard_state != stack_guard_yellow_disabled) { | 1368 if (_stack_guard_state != stack_guard_yellow_disabled) { |
1389 { | 1414 { |
1390 if (TraceThreadEvents) { | 1415 if (TraceThreadEvents) { |
1391 tty->print_cr("creating thread %p", this); | 1416 tty->print_cr("creating thread %p", this); |
1392 } | 1417 } |
1393 initialize(); | 1418 initialize(); |
1394 _is_attaching = false; | 1419 _jni_attach_state = _not_attaching_via_jni; |
1395 set_entry_point(entry_point); | 1420 set_entry_point(entry_point); |
1396 // Create the native thread itself. | 1421 // Create the native thread itself. |
1397 // %note runtime_23 | 1422 // %note runtime_23 |
1398 os::ThreadType thr_type = os::java_thread; | 1423 os::ThreadType thr_type = os::java_thread; |
1399 thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread : | 1424 thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread : |
1501 // Execute thread entry point unless this thread has a pending exception | 1526 // Execute thread entry point unless this thread has a pending exception |
1502 // or has been stopped before starting. | 1527 // or has been stopped before starting. |
1503 // Note: Due to JVM_StopThread we can have pending exceptions already! | 1528 // Note: Due to JVM_StopThread we can have pending exceptions already! |
1504 if (!this->has_pending_exception() && | 1529 if (!this->has_pending_exception() && |
1505 !java_lang_Thread::is_stillborn(this->threadObj())) { | 1530 !java_lang_Thread::is_stillborn(this->threadObj())) { |
1531 { | |
1532 ResourceMark rm(this); | |
1533 this->set_native_thread_name(this->get_thread_name()); | |
1534 } | |
1506 HandleMark hm(this); | 1535 HandleMark hm(this); |
1507 this->entry_point()(this, this); | 1536 this->entry_point()(this, this); |
1508 } | 1537 } |
1509 | 1538 |
1510 DTRACE_THREAD_PROBE(stop, this); | 1539 DTRACE_THREAD_PROBE(stop, this); |
2680 } | 2709 } |
2681 else { | 2710 else { |
2682 name_str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length(), buf, buflen); | 2711 name_str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length(), buf, buflen); |
2683 } | 2712 } |
2684 } | 2713 } |
2685 else if (is_attaching()) { // workaround for 6412693 - see 6404306 | 2714 else if (is_attaching_via_jni()) { // workaround for 6412693 - see 6404306 |
2686 name_str = "<no-name - thread is attaching>"; | 2715 name_str = "<no-name - thread is attaching>"; |
2687 } | 2716 } |
2688 else { | 2717 else { |
2689 name_str = Thread::name(); | 2718 name_str = Thread::name(); |
2690 } | 2719 } |
3076 | 3105 |
3077 if (PauseAtStartup) { | 3106 if (PauseAtStartup) { |
3078 os::pause(); | 3107 os::pause(); |
3079 } | 3108 } |
3080 | 3109 |
3110 #ifndef USDT2 | |
3081 HS_DTRACE_PROBE(hotspot, vm__init__begin); | 3111 HS_DTRACE_PROBE(hotspot, vm__init__begin); |
3112 #else /* USDT2 */ | |
3113 HOTSPOT_VM_INIT_BEGIN(); | |
3114 #endif /* USDT2 */ | |
3082 | 3115 |
3083 // Record VM creation timing statistics | 3116 // Record VM creation timing statistics |
3084 TraceVmCreationTime create_vm_timer; | 3117 TraceVmCreationTime create_vm_timer; |
3085 create_vm_timer.start(); | 3118 create_vm_timer.start(); |
3086 | 3119 |
3331 | 3364 |
3332 // Set flag that basic initialization has completed. Used by exceptions and various | 3365 // Set flag that basic initialization has completed. Used by exceptions and various |
3333 // debug stuff, that does not work until all basic classes have been initialized. | 3366 // debug stuff, that does not work until all basic classes have been initialized. |
3334 set_init_completed(); | 3367 set_init_completed(); |
3335 | 3368 |
3369 #ifndef USDT2 | |
3336 HS_DTRACE_PROBE(hotspot, vm__init__end); | 3370 HS_DTRACE_PROBE(hotspot, vm__init__end); |
3371 #else /* USDT2 */ | |
3372 HOTSPOT_VM_INIT_END(); | |
3373 #endif /* USDT2 */ | |
3337 | 3374 |
3338 // record VM initialization completion time | 3375 // record VM initialization completion time |
3339 Management::record_vm_init_completed(); | 3376 Management::record_vm_init_completed(); |
3340 | 3377 |
3341 // Compute system loader. Note that this has to occur after set_init_completed, since | 3378 // Compute system loader. Note that this has to occur after set_init_completed, since |