Mercurial > hg > truffle
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"); |