From d2af4e35ec7bc7439942a1218ad68c012b335673 Mon Sep 17 00:00:00 2001 From: Tobias Hartmann Date: Fri, 9 May 2014 09:12:39 +0200 Subject: [PATCH] 8029343: CodeCache::allocate increments '_number_of_blobs' even if allocation fails Incrementing the number of code blobs in CodeCache::allocate(...) is now only performed if allocation succeeds. The guarantee is fixed. Reviewed-by: kvn, iveresov --- hotspot/src/share/vm/code/codeCache.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/hotspot/src/share/vm/code/codeCache.cpp b/hotspot/src/share/vm/code/codeCache.cpp index b3a857c2062..a2e8f0e0f15 100644 --- a/hotspot/src/share/vm/code/codeCache.cpp +++ b/hotspot/src/share/vm/code/codeCache.cpp @@ -178,10 +178,12 @@ CodeBlob* CodeCache::allocate(int size, bool is_critical) { // cache will contain a garbage CodeBlob until the caller can // run the constructor for the CodeBlob subclass he is busy // instantiating. - guarantee(size >= 0, "allocation request must be reasonable"); assert_locked_or_safepoint(CodeCache_lock); + assert(size > 0, "allocation request must be reasonable"); + if (size <= 0) { + return NULL; + } CodeBlob* cb = NULL; - _number_of_blobs++; while (true) { cb = (CodeBlob*)_heap->allocate(size, is_critical); if (cb != NULL) break; @@ -199,6 +201,7 @@ CodeBlob* CodeCache::allocate(int size, bool is_critical) { maxCodeCacheUsed = MAX2(maxCodeCacheUsed, ((address)_heap->high_boundary() - (address)_heap->low_boundary()) - unallocated_capacity()); print_trace("allocation", cb, size); + _number_of_blobs++; return cb; }