Always initialize nursery data structures even if size is smaller than one chunk.

This commit is contained in:
wolfbeast 2017-06-25 19:07:10 +02:00 • committed by Roy Tam
commit 54cfba5b8f

View file

@ -121,6 +121,13 @@ js::Nursery::Nursery(JSRuntime* rt)
bool bool
js::Nursery::init(uint32_t maxNurseryBytes, AutoLockGC& lock) js::Nursery::init(uint32_t maxNurseryBytes, AutoLockGC& lock)
{ {
if (!mallocedBuffers.init())
return false;
freeMallocedBuffersTask = js_new<FreeMallocedBuffersTask>(runtime()->defaultFreeOp());
if (!freeMallocedBuffersTask || !freeMallocedBuffersTask->init())
return false;
/* maxNurseryBytes parameter is rounded down to a multiple of chunk size. */ /* maxNurseryBytes parameter is rounded down to a multiple of chunk size. */
maxNurseryChunks_ = maxNurseryBytes >> ChunkShift; maxNurseryChunks_ = maxNurseryBytes >> ChunkShift;
@ -128,16 +135,9 @@ js::Nursery::init(uint32_t maxNurseryBytes, AutoLockGC& lock)
if (maxNurseryChunks_ == 0) if (maxNurseryChunks_ == 0)
return true; return true;
if (!mallocedBuffers.init())
return false;
if (!cellsWithUid_.init()) if (!cellsWithUid_.init())
return false; return false;
freeMallocedBuffersTask = js_new<FreeMallocedBuffersTask>(runtime()->defaultFreeOp());
if (!freeMallocedBuffersTask || !freeMallocedBuffersTask->init())
return false;
AutoMaybeStartBackgroundAllocation maybeBgAlloc; AutoMaybeStartBackgroundAllocation maybeBgAlloc;
updateNumChunksLocked(1, maybeBgAlloc, lock); updateNumChunksLocked(1, maybeBgAlloc, lock);
if (numChunks() == 0) if (numChunks() == 0)