42 |
42 |
43 /* |
43 /* |
44 * Implementation of class sun.misc.Unsafe |
44 * Implementation of class sun.misc.Unsafe |
45 */ |
45 */ |
46 |
46 |
47 #ifndef USDT2 |
|
48 HS_DTRACE_PROBE_DECL3(hotspot, thread__park__begin, uintptr_t, int, long long); |
|
49 HS_DTRACE_PROBE_DECL1(hotspot, thread__park__end, uintptr_t); |
|
50 HS_DTRACE_PROBE_DECL1(hotspot, thread__unpark, uintptr_t); |
|
51 #endif /* !USDT2 */ |
|
52 |
47 |
53 #define MAX_OBJECT_SIZE \ |
48 #define MAX_OBJECT_SIZE \ |
54 ( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize \ |
49 ( arrayOopDesc::header_size(T_DOUBLE) * HeapWordSize \ |
55 + ((julong)max_jint * sizeof(double)) ) |
50 + ((julong)max_jint * sizeof(double)) ) |
56 |
51 |
1209 UNSAFE_END |
1204 UNSAFE_END |
1210 |
1205 |
1211 UNSAFE_ENTRY(void, Unsafe_Park(JNIEnv *env, jobject unsafe, jboolean isAbsolute, jlong time)) |
1206 UNSAFE_ENTRY(void, Unsafe_Park(JNIEnv *env, jobject unsafe, jboolean isAbsolute, jlong time)) |
1212 UnsafeWrapper("Unsafe_Park"); |
1207 UnsafeWrapper("Unsafe_Park"); |
1213 EventThreadPark event; |
1208 EventThreadPark event; |
1214 #ifndef USDT2 |
1209 HOTSPOT_THREAD_PARK_BEGIN((uintptr_t) thread->parker(), (int) isAbsolute, time); |
1215 HS_DTRACE_PROBE3(hotspot, thread__park__begin, thread->parker(), (int) isAbsolute, time); |
1210 |
1216 #else /* USDT2 */ |
|
1217 HOTSPOT_THREAD_PARK_BEGIN( |
|
1218 (uintptr_t) thread->parker(), (int) isAbsolute, time); |
|
1219 #endif /* USDT2 */ |
|
1220 JavaThreadParkedState jtps(thread, time != 0); |
1211 JavaThreadParkedState jtps(thread, time != 0); |
1221 thread->parker()->park(isAbsolute != 0, time); |
1212 thread->parker()->park(isAbsolute != 0, time); |
1222 #ifndef USDT2 |
1213 |
1223 HS_DTRACE_PROBE1(hotspot, thread__park__end, thread->parker()); |
1214 HOTSPOT_THREAD_PARK_END((uintptr_t) thread->parker()); |
1224 #else /* USDT2 */ |
|
1225 HOTSPOT_THREAD_PARK_END( |
|
1226 (uintptr_t) thread->parker()); |
|
1227 #endif /* USDT2 */ |
|
1228 if (event.should_commit()) { |
1215 if (event.should_commit()) { |
1229 oop obj = thread->current_park_blocker(); |
1216 oop obj = thread->current_park_blocker(); |
1230 event.set_klass((obj != NULL) ? obj->klass() : NULL); |
1217 event.set_klass((obj != NULL) ? obj->klass() : NULL); |
1231 event.set_timeout(time); |
1218 event.set_timeout(time); |
1232 event.set_address((obj != NULL) ? (TYPE_ADDRESS) cast_from_oop<uintptr_t>(obj) : 0); |
1219 event.set_address((obj != NULL) ? (TYPE_ADDRESS) cast_from_oop<uintptr_t>(obj) : 0); |