comparison src/share/vm/runtime/thread.cpp @ 4007:23a1c8de9d51

Merge
author dholmes
date Mon, 17 Oct 2011 01:40:27 -0400
parents fd65bc7c09b6 436b4a3231bf
children b20d64f83668
comparison
equal deleted inserted replaced
4004:11d17c7d2ee6 4007:23a1c8de9d51
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
1326 #ifndef SERIALGC 1347 #ifndef SERIALGC
1327 SATBMarkQueueSet JavaThread::_satb_mark_queue_set; 1348 SATBMarkQueueSet JavaThread::_satb_mark_queue_set;
1328 DirtyCardQueueSet JavaThread::_dirty_card_queue_set; 1349 DirtyCardQueueSet JavaThread::_dirty_card_queue_set;
1329 #endif // !SERIALGC 1350 #endif // !SERIALGC
1330 1351
1331 JavaThread::JavaThread(bool is_attaching) : 1352 JavaThread::JavaThread(bool is_attaching_via_jni) :
1332 Thread() 1353 Thread()
1333 #ifndef SERIALGC 1354 #ifndef SERIALGC
1334 , _satb_mark_queue(&_satb_mark_queue_set), 1355 , _satb_mark_queue(&_satb_mark_queue_set),
1335 _dirty_card_queue(&_dirty_card_queue_set) 1356 _dirty_card_queue(&_dirty_card_queue_set)
1336 #endif // !SERIALGC 1357 #endif // !SERIALGC
1337 { 1358 {
1338 initialize(); 1359 initialize();
1339 _is_attaching = is_attaching; 1360 if (is_attaching_via_jni) {
1361 _jni_attach_state = _attaching_via_jni;
1362 } else {
1363 _jni_attach_state = _not_attaching_via_jni;
1364 }
1340 assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor"); 1365 assert(_deferred_card_mark.is_empty(), "Default MemRegion ctor");
1341 } 1366 }
1342 1367
1343 bool JavaThread::reguard_stack(address cur_sp) { 1368 bool JavaThread::reguard_stack(address cur_sp) {
1344 if (_stack_guard_state != stack_guard_yellow_disabled) { 1369 if (_stack_guard_state != stack_guard_yellow_disabled) {
1390 { 1415 {
1391 if (TraceThreadEvents) { 1416 if (TraceThreadEvents) {
1392 tty->print_cr("creating thread %p", this); 1417 tty->print_cr("creating thread %p", this);
1393 } 1418 }
1394 initialize(); 1419 initialize();
1395 _is_attaching = false; 1420 _jni_attach_state = _not_attaching_via_jni;
1396 set_entry_point(entry_point); 1421 set_entry_point(entry_point);
1397 // Create the native thread itself. 1422 // Create the native thread itself.
1398 // %note runtime_23 1423 // %note runtime_23
1399 os::ThreadType thr_type = os::java_thread; 1424 os::ThreadType thr_type = os::java_thread;
1400 thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread : 1425 thr_type = entry_point == &compiler_thread_entry ? os::compiler_thread :
1502 // Execute thread entry point unless this thread has a pending exception 1527 // Execute thread entry point unless this thread has a pending exception
1503 // or has been stopped before starting. 1528 // or has been stopped before starting.
1504 // Note: Due to JVM_StopThread we can have pending exceptions already! 1529 // Note: Due to JVM_StopThread we can have pending exceptions already!
1505 if (!this->has_pending_exception() && 1530 if (!this->has_pending_exception() &&
1506 !java_lang_Thread::is_stillborn(this->threadObj())) { 1531 !java_lang_Thread::is_stillborn(this->threadObj())) {
1532 {
1533 ResourceMark rm(this);
1534 this->set_native_thread_name(this->get_thread_name());
1535 }
1507 HandleMark hm(this); 1536 HandleMark hm(this);
1508 this->entry_point()(this, this); 1537 this->entry_point()(this, this);
1509 } 1538 }
1510 1539
1511 DTRACE_THREAD_PROBE(stop, this); 1540 DTRACE_THREAD_PROBE(stop, this);
2681 } 2710 }
2682 else { 2711 else {
2683 name_str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length(), buf, buflen); 2712 name_str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length(), buf, buflen);
2684 } 2713 }
2685 } 2714 }
2686 else if (is_attaching()) { // workaround for 6412693 - see 6404306 2715 else if (is_attaching_via_jni()) { // workaround for 6412693 - see 6404306
2687 name_str = "<no-name - thread is attaching>"; 2716 name_str = "<no-name - thread is attaching>";
2688 } 2717 }
2689 else { 2718 else {
2690 name_str = Thread::name(); 2719 name_str = Thread::name();
2691 } 2720 }
3077 3106
3078 if (PauseAtStartup) { 3107 if (PauseAtStartup) {
3079 os::pause(); 3108 os::pause();
3080 } 3109 }
3081 3110
3111 #ifndef USDT2
3082 HS_DTRACE_PROBE(hotspot, vm__init__begin); 3112 HS_DTRACE_PROBE(hotspot, vm__init__begin);
3113 #else /* USDT2 */
3114 HOTSPOT_VM_INIT_BEGIN();
3115 #endif /* USDT2 */
3083 3116
3084 // Record VM creation timing statistics 3117 // Record VM creation timing statistics
3085 TraceVmCreationTime create_vm_timer; 3118 TraceVmCreationTime create_vm_timer;
3086 create_vm_timer.start(); 3119 create_vm_timer.start();
3087 3120
3332 3365
3333 // Set flag that basic initialization has completed. Used by exceptions and various 3366 // Set flag that basic initialization has completed. Used by exceptions and various
3334 // debug stuff, that does not work until all basic classes have been initialized. 3367 // debug stuff, that does not work until all basic classes have been initialized.
3335 set_init_completed(); 3368 set_init_completed();
3336 3369
3370 #ifndef USDT2
3337 HS_DTRACE_PROBE(hotspot, vm__init__end); 3371 HS_DTRACE_PROBE(hotspot, vm__init__end);
3372 #else /* USDT2 */
3373 HOTSPOT_VM_INIT_END();
3374 #endif /* USDT2 */
3338 3375
3339 // record VM initialization completion time 3376 // record VM initialization completion time
3340 Management::record_vm_init_completed(); 3377 Management::record_vm_init_completed();
3341 3378
3342 // Compute system loader. Note that this has to occur after set_init_completed, since 3379 // Compute system loader. Note that this has to occur after set_init_completed, since