diff a/src/hotspot/os/windows/os_perf_windows.cpp b/src/hotspot/os/windows/os_perf_windows.cpp --- a/src/hotspot/os/windows/os_perf_windows.cpp +++ b/src/hotspot/os/windows/os_perf_windows.cpp @@ -223,13 +223,13 @@ assert(process_query != NULL, "invariant"); return allocate_counters(&process_query->set, nofCounters); } static void deallocate_counters(MultiCounterQueryP query) { - FREE_C_HEAP_ARRAY(char, query->counters); - query->counters = NULL; - query->noOfCounters = 0; + FREE_C_HEAP_ARRAY(char, query->counters); + query->counters = NULL; + query->noOfCounters = 0; } static OSReturn add_counter(UpdateQueryP query, HCOUNTER* counter, const char* path, bool first_sample_on_init) { assert(query != NULL, "invariant"); assert(counter != NULL, "invariant"); diff a/src/hotspot/share/classfile/classLoader.cpp b/src/hotspot/share/classfile/classLoader.cpp --- a/src/hotspot/share/classfile/classLoader.cpp +++ b/src/hotspot/share/classfile/classLoader.cpp @@ -381,13 +381,11 @@ ClassPathImageEntry::~ClassPathImageEntry() { assert(_singleton == this, "must be"); DEBUG_ONLY(_singleton = NULL); - FREE_C_HEAP_ARRAY(const char, _name); - _name = NULL; if (_jimage != NULL) { (*JImageClose)(_jimage); _jimage = NULL; } diff a/src/hotspot/share/gc/g1/sparsePRT.cpp b/src/hotspot/share/gc/g1/sparsePRT.cpp --- a/src/hotspot/share/gc/g1/sparsePRT.cpp +++ b/src/hotspot/share/gc/g1/sparsePRT.cpp @@ -103,13 +103,11 @@ clear(); } RSHashTable::~RSHashTable() { FREE_C_HEAP_ARRAY(SparsePRTEntry, _entries); - _entries = NULL; FREE_C_HEAP_ARRAY(int, _buckets); - _buckets = NULL; } void RSHashTable::clear() { _occupied_entries = 0; _occupied_cards = 0; diff a/src/hotspot/share/gc/shared/cardTableRS.cpp b/src/hotspot/share/gc/shared/cardTableRS.cpp --- a/src/hotspot/share/gc/shared/cardTableRS.cpp +++ b/src/hotspot/share/gc/shared/cardTableRS.cpp @@ -623,19 +623,14 @@ } } CardTableRS::~CardTableRS() { FREE_C_HEAP_ARRAY(CardValue, _last_cur_val_in_gen); - _last_cur_val_in_gen = NULL; FREE_C_HEAP_ARRAY(CardArr, _lowest_non_clean); - _lowest_non_clean = NULL; FREE_C_HEAP_ARRAY(size_t, _lowest_non_clean_chunk_size); - _lowest_non_clean_chunk_size = NULL; FREE_C_HEAP_ARRAY(uintptr_t, _lowest_non_clean_base_chunk_index); - _lowest_non_clean_base_chunk_index = NULL; FREE_C_HEAP_ARRAY(int, _last_LNC_resizing_collection); - _last_LNC_resizing_collection = NULL; } void CardTableRS::initialize() { CardTable::initialize(); _lowest_non_clean = diff a/src/hotspot/share/memory/allocation.cpp b/src/hotspot/share/memory/allocation.cpp --- a/src/hotspot/share/memory/allocation.cpp +++ b/src/hotspot/share/memory/allocation.cpp @@ -62,10 +62,11 @@ vm_exit_out_of_memory(size, OOM_MALLOC_ERROR, "ReallocateHeap"); } return p; } +// handles NULL pointers void FreeHeap(void* p) { os::free(p); } void* MetaspaceObj::_shared_metaspace_base = NULL; diff a/src/hotspot/share/memory/allocation.hpp b/src/hotspot/share/memory/allocation.hpp --- a/src/hotspot/share/memory/allocation.hpp +++ b/src/hotspot/share/memory/allocation.hpp @@ -182,10 +182,11 @@ char* ReallocateHeap(char *old, size_t size, MEMFLAGS flag, AllocFailType alloc_failmode = AllocFailStrategy::EXIT_OOM); +// handles NULL pointers void FreeHeap(void* p); template class CHeapObj ALLOCATION_SUPER_CLASS_SPEC { public: ALWAYSINLINE void* operator new(size_t size) throw() { diff a/src/hotspot/share/runtime/os.cpp b/src/hotspot/share/runtime/os.cpp --- a/src/hotspot/share/runtime/os.cpp +++ b/src/hotspot/share/runtime/os.cpp @@ -794,11 +794,11 @@ } return ptr; #endif } - +// handles NULL pointers void os::free(void *memblock) { NOT_PRODUCT(inc_stat_counter(&num_frees, 1)); #ifdef ASSERT if (memblock == NULL) return; if ((intptr_t)memblock == (intptr_t)MallocCatchPtr) { diff a/src/hotspot/share/runtime/os.hpp b/src/hotspot/share/runtime/os.hpp --- a/src/hotspot/share/runtime/os.hpp +++ b/src/hotspot/share/runtime/os.hpp @@ -738,10 +738,11 @@ static void* malloc (size_t size, MEMFLAGS flags, const NativeCallStack& stack); static void* malloc (size_t size, MEMFLAGS flags); static void* realloc (void *memblock, size_t size, MEMFLAGS flag, const NativeCallStack& stack); static void* realloc (void *memblock, size_t size, MEMFLAGS flag); + // handles NULL pointers static void free (void *memblock); static char* strdup(const char *, MEMFLAGS flags = mtInternal); // Like strdup // Like strdup, but exit VM when strdup() returns NULL static char* strdup_check_oom(const char*, MEMFLAGS flags = mtInternal); diff a/src/hotspot/share/runtime/thread.cpp b/src/hotspot/share/runtime/thread.cpp --- a/src/hotspot/share/runtime/thread.cpp +++ b/src/hotspot/share/runtime/thread.cpp @@ -1327,11 +1327,10 @@ _gc_id(GCId::undefined()) {} NamedThread::~NamedThread() { FREE_C_HEAP_ARRAY(char, _name); - _name = NULL; } void NamedThread::set_name(const char* format, ...) { guarantee(_name == NULL, "Only get to set name once."); _name = NEW_C_HEAP_ARRAY(char, max_name_len, mtThread);