Bug 1174796 - Make sure ReleaseNow releases everything. r=smaug

This commit is contained in:
Andrew McCreight 2015-06-16 14:19:07 -07:00
parent 00c53f87c7
commit 884c626161
2 changed files with 5 additions and 4 deletions

View File

@ -1113,7 +1113,7 @@ IncrementalFinalizeRunnable::ReleaseNow(bool aLimited)
break; break;
} }
} else { } else {
function.run(UINT32_MAX, function.data); while (!function.run(UINT32_MAX, function.data));
++mFinalizeFunctionToRun; ++mFinalizeFunctionToRun;
} }
} while (mFinalizeFunctionToRun < mDeferredFinalizeFunctions.Length()); } while (mFinalizeFunctionToRun < mDeferredFinalizeFunctions.Length());

View File

@ -16,9 +16,10 @@ namespace mozilla {
// the array. // the array.
typedef void* (*DeferredFinalizeAppendFunction)(void* aPointers, void* aThing); typedef void* (*DeferredFinalizeAppendFunction)(void* aPointers, void* aThing);
// Called to finalize a number of objects. Slice is the number of objects // Called to finalize a number of objects. Slice is the number of objects to
// to finalize, or if it's UINT32_MAX, all objects should be finalized. // finalize. The return value indicates whether it finalized all objects in the
// Return value indicates whether it finalized all objects in the buffer. // buffer. If it returns true, the function will not be called again, so the
// function should free aData.
typedef bool (*DeferredFinalizeFunction)(uint32_t aSlice, void* aData); typedef bool (*DeferredFinalizeFunction)(uint32_t aSlice, void* aData);
void DeferredFinalize(DeferredFinalizeAppendFunction aAppendFunc, void DeferredFinalize(DeferredFinalizeAppendFunction aAppendFunc,