comparison src/share/vm/oops/instanceKlass.cpp @ 1751:2528b5bd749c

6980262: Memory leak when exception is thrown in static initializer Summary: Use resource memory instead of c-heap for the exception message Reviewed-by: phh, jmasa
author kamg
date Fri, 27 Aug 2010 15:05:28 -0400
parents 9d7a8ab3736b
children d5d065957597
comparison
equal deleted inserted replaced
1750:c7004d700b49 1751:2528b5bd749c
380 DTRACE_CLASSINIT_PROBE_WAIT(erroneous, instanceKlass::cast(this_oop()), -1,wait); 380 DTRACE_CLASSINIT_PROBE_WAIT(erroneous, instanceKlass::cast(this_oop()), -1,wait);
381 ResourceMark rm(THREAD); 381 ResourceMark rm(THREAD);
382 const char* desc = "Could not initialize class "; 382 const char* desc = "Could not initialize class ";
383 const char* className = this_oop->external_name(); 383 const char* className = this_oop->external_name();
384 size_t msglen = strlen(desc) + strlen(className) + 1; 384 size_t msglen = strlen(desc) + strlen(className) + 1;
385 char* message = NEW_C_HEAP_ARRAY(char, msglen); 385 char* message = NEW_RESOURCE_ARRAY(char, msglen);
386 if (NULL == message) { 386 if (NULL == message) {
387 // Out of memory: can't create detailed error message 387 // Out of memory: can't create detailed error message
388 THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), className); 388 THROW_MSG(vmSymbols::java_lang_NoClassDefFoundError(), className);
389 } else { 389 } else {
390 jio_snprintf(message, msglen, "%s%s", desc, className); 390 jio_snprintf(message, msglen, "%s%s", desc, className);