comparison src/share/vm/prims/jvm.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 11c26bfcf8c7
comparison
equal deleted inserted replaced
4005:2ef3386478e6 4006:436b4a3231bf
77 # include "jvm_bsd.h" 77 # include "jvm_bsd.h"
78 #endif 78 #endif
79 79
80 #include <errno.h> 80 #include <errno.h>
81 81
82 #ifndef USDT2
82 HS_DTRACE_PROBE_DECL1(hotspot, thread__sleep__begin, long long); 83 HS_DTRACE_PROBE_DECL1(hotspot, thread__sleep__begin, long long);
83 HS_DTRACE_PROBE_DECL1(hotspot, thread__sleep__end, int); 84 HS_DTRACE_PROBE_DECL1(hotspot, thread__sleep__end, int);
84 HS_DTRACE_PROBE_DECL0(hotspot, thread__yield); 85 HS_DTRACE_PROBE_DECL0(hotspot, thread__yield);
86 #endif /* !USDT2 */
85 87
86 /* 88 /*
87 NOTE about use of any ctor or function call that can trigger a safepoint/GC: 89 NOTE about use of any ctor or function call that can trigger a safepoint/GC:
88 such ctors and calls MUST NOT come between an oop declaration/init and its 90 such ctors and calls MUST NOT come between an oop declaration/init and its
89 usage because if objects are move this may cause various memory stomps, bus 91 usage because if objects are move this may cause various memory stomps, bus
2814 2816
2815 2817
2816 JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass)) 2818 JVM_ENTRY(void, JVM_Yield(JNIEnv *env, jclass threadClass))
2817 JVMWrapper("JVM_Yield"); 2819 JVMWrapper("JVM_Yield");
2818 if (os::dont_yield()) return; 2820 if (os::dont_yield()) return;
2821 #ifndef USDT2
2819 HS_DTRACE_PROBE0(hotspot, thread__yield); 2822 HS_DTRACE_PROBE0(hotspot, thread__yield);
2823 #else /* USDT2 */
2824 HOTSPOT_THREAD_YIELD();
2825 #endif /* USDT2 */
2820 // When ConvertYieldToSleep is off (default), this matches the classic VM use of yield. 2826 // When ConvertYieldToSleep is off (default), this matches the classic VM use of yield.
2821 // Critical for similar threading behaviour 2827 // Critical for similar threading behaviour
2822 if (ConvertYieldToSleep) { 2828 if (ConvertYieldToSleep) {
2823 os::sleep(thread, MinSleepInterval, false); 2829 os::sleep(thread, MinSleepInterval, false);
2824 } else { 2830 } else {
2840 2846
2841 // Save current thread state and restore it at the end of this block. 2847 // Save current thread state and restore it at the end of this block.
2842 // And set new thread state to SLEEPING. 2848 // And set new thread state to SLEEPING.
2843 JavaThreadSleepState jtss(thread); 2849 JavaThreadSleepState jtss(thread);
2844 2850
2851 #ifndef USDT2
2845 HS_DTRACE_PROBE1(hotspot, thread__sleep__begin, millis); 2852 HS_DTRACE_PROBE1(hotspot, thread__sleep__begin, millis);
2853 #else /* USDT2 */
2854 HOTSPOT_THREAD_SLEEP_BEGIN(
2855 millis);
2856 #endif /* USDT2 */
2846 2857
2847 if (millis == 0) { 2858 if (millis == 0) {
2848 // When ConvertSleepToYield is on, this matches the classic VM implementation of 2859 // When ConvertSleepToYield is on, this matches the classic VM implementation of
2849 // JVM_Sleep. Critical for similar threading behaviour (Win32) 2860 // JVM_Sleep. Critical for similar threading behaviour (Win32)
2850 // It appears that in certain GUI contexts, it may be beneficial to do a short sleep 2861 // It appears that in certain GUI contexts, it may be beneficial to do a short sleep
2862 thread->osthread()->set_state(SLEEPING); 2873 thread->osthread()->set_state(SLEEPING);
2863 if (os::sleep(thread, millis, true) == OS_INTRPT) { 2874 if (os::sleep(thread, millis, true) == OS_INTRPT) {
2864 // An asynchronous exception (e.g., ThreadDeathException) could have been thrown on 2875 // An asynchronous exception (e.g., ThreadDeathException) could have been thrown on
2865 // us while we were sleeping. We do not overwrite those. 2876 // us while we were sleeping. We do not overwrite those.
2866 if (!HAS_PENDING_EXCEPTION) { 2877 if (!HAS_PENDING_EXCEPTION) {
2878 #ifndef USDT2
2867 HS_DTRACE_PROBE1(hotspot, thread__sleep__end,1); 2879 HS_DTRACE_PROBE1(hotspot, thread__sleep__end,1);
2880 #else /* USDT2 */
2881 HOTSPOT_THREAD_SLEEP_END(
2882 1);
2883 #endif /* USDT2 */
2868 // TODO-FIXME: THROW_MSG returns which means we will not call set_state() 2884 // TODO-FIXME: THROW_MSG returns which means we will not call set_state()
2869 // to properly restore the thread state. That's likely wrong. 2885 // to properly restore the thread state. That's likely wrong.
2870 THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted"); 2886 THROW_MSG(vmSymbols::java_lang_InterruptedException(), "sleep interrupted");
2871 } 2887 }
2872 } 2888 }
2873 thread->osthread()->set_state(old_state); 2889 thread->osthread()->set_state(old_state);
2874 } 2890 }
2891 #ifndef USDT2
2875 HS_DTRACE_PROBE1(hotspot, thread__sleep__end,0); 2892 HS_DTRACE_PROBE1(hotspot, thread__sleep__end,0);
2893 #else /* USDT2 */
2894 HOTSPOT_THREAD_SLEEP_END(
2895 0);
2896 #endif /* USDT2 */
2876 JVM_END 2897 JVM_END
2877 2898
2878 JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass)) 2899 JVM_ENTRY(jobject, JVM_CurrentThread(JNIEnv* env, jclass threadClass))
2879 JVMWrapper("JVM_CurrentThread"); 2900 JVMWrapper("JVM_CurrentThread");
2880 oop jthread = thread->threadObj(); 2901 oop jthread = thread->threadObj();
2988 if (JvmtiExport::should_post_data_dump()) { 3009 if (JvmtiExport::should_post_data_dump()) {
2989 JvmtiExport::post_data_dump(); 3010 JvmtiExport::post_data_dump();
2990 } 3011 }
2991 JVM_END 3012 JVM_END
2992 3013
3014 JVM_ENTRY(void, JVM_SetNativeThreadName(JNIEnv* env, jobject jthread, jstring name))
3015 JVMWrapper("JVM_SetNativeThreadName");
3016 ResourceMark rm(THREAD);
3017 oop java_thread = JNIHandles::resolve_non_null(jthread);
3018 JavaThread* thr = java_lang_Thread::thread(java_thread);
3019 // Thread naming only supported for the current thread, doesn't work for
3020 // target threads.
3021 if (Thread::current() == thr && !thr->has_attached_via_jni()) {
3022 // we don't set the name of an attached thread to avoid stepping
3023 // on other programs
3024 const char *thread_name = java_lang_String::as_utf8_string(JNIHandles::resolve_non_null(name));
3025 os::set_native_thread_name(thread_name);
3026 }
3027 JVM_END
2993 3028
2994 // java.lang.SecurityManager /////////////////////////////////////////////////////////////////////// 3029 // java.lang.SecurityManager ///////////////////////////////////////////////////////////////////////
2995 3030
2996 static bool is_trusted_frame(JavaThread* jthread, vframeStream* vfst) { 3031 static bool is_trusted_frame(JavaThread* jthread, vframeStream* vfst) {
2997 assert(jthread->is_Java_thread(), "must be a Java thread"); 3032 assert(jthread->is_Java_thread(), "must be a Java thread");