Mercurial > hg > graal-jvmci-8
comparison src/share/vm/prims/whitebox.cpp @ 20553:417e3b8d04c5
8059100: SIGSEGV VirtualMemoryTracker::remove_released_region
Summary: Disallow increasing native memory tracking level
Reviewed-by: hseigel, ctornqvi, gtriantafill
author | coleenp |
---|---|
date | Fri, 10 Oct 2014 19:36:12 +0000 |
parents | b509b7ff561c |
children | 4cb90023bf2b |
comparison
equal
deleted
inserted
replaced
20547:fffbcc20bf61 | 20553:417e3b8d04c5 |
---|---|
329 os::malloc(0, mtTest, stack); | 329 os::malloc(0, mtTest, stack); |
330 pc += MallocSiteTable::hash_buckets(); | 330 pc += MallocSiteTable::hash_buckets(); |
331 } | 331 } |
332 WB_END | 332 WB_END |
333 | 333 |
334 | 334 WB_ENTRY(jboolean, WB_NMTChangeTrackingLevel(JNIEnv* env)) |
335 // Test that we can downgrade NMT levels but not upgrade them. | |
336 if (MemTracker::tracking_level() == NMT_off) { | |
337 MemTracker::transition_to(NMT_off); | |
338 return MemTracker::tracking_level() == NMT_off; | |
339 } else { | |
340 assert(MemTracker::tracking_level() == NMT_detail, "Should start out as detail tracking"); | |
341 MemTracker::transition_to(NMT_summary); | |
342 assert(MemTracker::tracking_level() == NMT_summary, "Should be summary now"); | |
343 | |
344 // Can't go to detail once NMT is set to summary. | |
345 MemTracker::transition_to(NMT_detail); | |
346 assert(MemTracker::tracking_level() == NMT_summary, "Should still be summary now"); | |
347 | |
348 // Shutdown sets tracking level to minimal. | |
349 MemTracker::shutdown(); | |
350 assert(MemTracker::tracking_level() == NMT_minimal, "Should be minimal now"); | |
351 | |
352 // Once the tracking level is minimal, we cannot increase to summary. | |
353 // The code ignores this request instead of asserting because if the malloc site | |
354 // table overflows in another thread, it tries to change the code to summary. | |
355 MemTracker::transition_to(NMT_summary); | |
356 assert(MemTracker::tracking_level() == NMT_minimal, "Should still be minimal now"); | |
357 | |
358 // Really can never go up to detail, verify that the code would never do this. | |
359 MemTracker::transition_to(NMT_detail); | |
360 assert(MemTracker::tracking_level() == NMT_minimal, "Should still be minimal now"); | |
361 return MemTracker::tracking_level() == NMT_minimal; | |
362 } | |
363 WB_END | |
335 #endif // INCLUDE_NMT | 364 #endif // INCLUDE_NMT |
336 | 365 |
337 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) { | 366 static jmethodID reflected_method_to_jmid(JavaThread* thread, JNIEnv* env, jobject method) { |
338 assert(method != NULL, "method should not be null"); | 367 assert(method != NULL, "method should not be null"); |
339 ThreadToNativeFromVM ttn(thread); | 368 ThreadToNativeFromVM ttn(thread); |
934 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, | 963 {CC"NMTCommitMemory", CC"(JJ)V", (void*)&WB_NMTCommitMemory }, |
935 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, | 964 {CC"NMTUncommitMemory", CC"(JJ)V", (void*)&WB_NMTUncommitMemory }, |
936 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, | 965 {CC"NMTReleaseMemory", CC"(JJ)V", (void*)&WB_NMTReleaseMemory }, |
937 {CC"NMTOverflowHashBucket", CC"(J)V", (void*)&WB_NMTOverflowHashBucket}, | 966 {CC"NMTOverflowHashBucket", CC"(J)V", (void*)&WB_NMTOverflowHashBucket}, |
938 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported}, | 967 {CC"NMTIsDetailSupported",CC"()Z", (void*)&WB_NMTIsDetailSupported}, |
968 {CC"NMTChangeTrackingLevel", CC"()Z", (void*)&WB_NMTChangeTrackingLevel}, | |
939 #endif // INCLUDE_NMT | 969 #endif // INCLUDE_NMT |
940 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, | 970 {CC"deoptimizeAll", CC"()V", (void*)&WB_DeoptimizeAll }, |
941 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", | 971 {CC"deoptimizeMethod", CC"(Ljava/lang/reflect/Executable;Z)I", |
942 (void*)&WB_DeoptimizeMethod }, | 972 (void*)&WB_DeoptimizeMethod }, |
943 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z", | 973 {CC"isMethodCompiled", CC"(Ljava/lang/reflect/Executable;Z)Z", |