Backed out changeset 81bec89d093b (bug 1107775) for Valgrind and other test failures

This commit is contained in:
Carsten "Tomcat" Book 2014-12-05 08:19:28 +01:00
parent 4ccd862efa
commit dc68aac5c9

View File

@ -57,7 +57,6 @@
#include "mozilla/CycleCollectedJSRuntime.h" #include "mozilla/CycleCollectedJSRuntime.h"
#include <algorithm> #include <algorithm>
#include "mozilla/ArrayUtils.h" #include "mozilla/ArrayUtils.h"
#include "mozilla/AutoRestore.h"
#include "mozilla/MemoryReporting.h" #include "mozilla/MemoryReporting.h"
#include "mozilla/dom/BindingUtils.h" #include "mozilla/dom/BindingUtils.h"
#include "mozilla/dom/DOMJSClass.h" #include "mozilla/dom/DOMJSClass.h"
@ -97,7 +96,6 @@ class IncrementalFinalizeRunnable : public nsRunnable
nsTArray<nsISupports*> mSupports; nsTArray<nsISupports*> mSupports;
DeferredFinalizeArray mDeferredFinalizeFunctions; DeferredFinalizeArray mDeferredFinalizeFunctions;
uint32_t mFinalizeFunctionToRun; uint32_t mFinalizeFunctionToRun;
bool mReleasing;
static const PRTime SliceMillis = 10; /* ms */ static const PRTime SliceMillis = 10; /* ms */
@ -1126,7 +1124,6 @@ IncrementalFinalizeRunnable::IncrementalFinalizeRunnable(CycleCollectedJSRuntime
DeferredFinalizerTable& aFinalizers) DeferredFinalizerTable& aFinalizers)
: mRuntime(aRt) : mRuntime(aRt)
, mFinalizeFunctionToRun(0) , mFinalizeFunctionToRun(0)
, mReleasing(false)
{ {
this->mSupports.SwapElements(aSupports); this->mSupports.SwapElements(aSupports);
DeferredFinalizeFunctionHolder* function = DeferredFinalizeFunctionHolder* function =
@ -1146,12 +1143,7 @@ IncrementalFinalizeRunnable::~IncrementalFinalizeRunnable()
void void
IncrementalFinalizeRunnable::ReleaseNow(bool aLimited) IncrementalFinalizeRunnable::ReleaseNow(bool aLimited)
{ {
if (mReleasing) { //MOZ_ASSERT(NS_IsMainThread());
MOZ_ASSERT(false, "Try to avoid re-entering ReleaseNow!");
return;
}
mozilla::AutoRestore<bool> ar(mReleasing);
mReleasing = true;
MOZ_ASSERT(mDeferredFinalizeFunctions.Length() != 0, MOZ_ASSERT(mDeferredFinalizeFunctions.Length() != 0,
"We should have at least ReleaseSliceNow to run"); "We should have at least ReleaseSliceNow to run");
MOZ_ASSERT(mFinalizeFunctionToRun < mDeferredFinalizeFunctions.Length(), MOZ_ASSERT(mFinalizeFunctionToRun < mDeferredFinalizeFunctions.Length(),
@ -1218,21 +1210,7 @@ IncrementalFinalizeRunnable::Run()
void void
CycleCollectedJSRuntime::FinalizeDeferredThings(DeferredFinalizeType aType) CycleCollectedJSRuntime::FinalizeDeferredThings(DeferredFinalizeType aType)
{ {
/* MOZ_ASSERT(!mFinalizeRunnable);
* If the previous GC created a runnable to finalize objects
* incrementally, and if it hasn't finished yet, finish it now. We
* don't want these to build up. We also don't want to allow any
* existing incremental finalize runnables to run after a
* non-incremental GC, since they are often used to detect leaks.
*/
if (mFinalizeRunnable) {
mFinalizeRunnable->ReleaseNow(false);
if (mFinalizeRunnable) {
// If we re-entered ReleaseNow, we couldn't delete mFinalizeRunnable and
// we need to just continue processing it.
return;
}
}
mFinalizeRunnable = new IncrementalFinalizeRunnable(this, mFinalizeRunnable = new IncrementalFinalizeRunnable(this,
mDeferredSupports, mDeferredSupports,
mDeferredFinalizerTable); mDeferredFinalizerTable);
@ -1283,6 +1261,17 @@ CycleCollectedJSRuntime::OnGC(JSGCStatus aStatus)
} }
#endif #endif
/*
* If the previous GC created a runnable to finalize objects
* incrementally, and if it hasn't finished yet, finish it now. We
* don't want these to build up. We also don't want to allow any
* existing incremental finalize runnables to run after a
* non-incremental GC, since they are often used to detect leaks.
*/
if (mFinalizeRunnable) {
mFinalizeRunnable->ReleaseNow(false);
}
// Do any deferred finalization of native objects. // Do any deferred finalization of native objects.
FinalizeDeferredThings(JS::WasIncrementalGC(mJSRuntime) ? FinalizeIncrementally : FinalizeDeferredThings(JS::WasIncrementalGC(mJSRuntime) ? FinalizeIncrementally :
FinalizeNow); FinalizeNow);