comparison src/share/vm/runtime/thread.cpp @ 6872:7b5885dadbdc

8000617: It should be possible to allocate memory without the VM dying. Reviewed-by: coleenp, kamg
author nloodin
date Wed, 17 Oct 2012 17:36:48 +0200
parents 5876f980ea19
children 716c64bda5ba
comparison
equal deleted inserted replaced
6871:045cb62046a7 6872:7b5885dadbdc
175 void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) { 175 void* Thread::allocate(size_t size, bool throw_excpt, MEMFLAGS flags) {
176 if (UseBiasedLocking) { 176 if (UseBiasedLocking) {
177 const int alignment = markOopDesc::biased_lock_alignment; 177 const int alignment = markOopDesc::biased_lock_alignment;
178 size_t aligned_size = size + (alignment - sizeof(intptr_t)); 178 size_t aligned_size = size + (alignment - sizeof(intptr_t));
179 void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC) 179 void* real_malloc_addr = throw_excpt? AllocateHeap(aligned_size, flags, CURRENT_PC)
180 : os::malloc(aligned_size, flags, CURRENT_PC); 180 : AllocateHeap(aligned_size, flags, CURRENT_PC,
181 AllocFailStrategy::RETURN_NULL);
181 void* aligned_addr = (void*) align_size_up((intptr_t) real_malloc_addr, alignment); 182 void* aligned_addr = (void*) align_size_up((intptr_t) real_malloc_addr, alignment);
182 assert(((uintptr_t) aligned_addr + (uintptr_t) size) <= 183 assert(((uintptr_t) aligned_addr + (uintptr_t) size) <=
183 ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size), 184 ((uintptr_t) real_malloc_addr + (uintptr_t) aligned_size),
184 "JavaThread alignment code overflowed allocated storage"); 185 "JavaThread alignment code overflowed allocated storage");
185 if (TraceBiasedLocking) { 186 if (TraceBiasedLocking) {
189 } 190 }
190 ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr; 191 ((Thread*) aligned_addr)->_real_malloc_address = real_malloc_addr;
191 return aligned_addr; 192 return aligned_addr;
192 } else { 193 } else {
193 return throw_excpt? AllocateHeap(size, flags, CURRENT_PC) 194 return throw_excpt? AllocateHeap(size, flags, CURRENT_PC)
194 : os::malloc(size, flags, CURRENT_PC); 195 : AllocateHeap(size, flags, CURRENT_PC, AllocFailStrategy::RETURN_NULL);
195 } 196 }
196 } 197 }
197 198
198 void Thread::operator delete(void* p) { 199 void Thread::operator delete(void* p) {
199 if (UseBiasedLocking) { 200 if (UseBiasedLocking) {