Bug 855276: Add assertions to catch the cause. r=bent

This commit is contained in:
Kyle Huey 2013-04-04 08:09:16 -07:00
parent 4aca1db809
commit d0dccfab5c
2 changed files with 17 additions and 0 deletions

View File

@ -16,6 +16,11 @@
using mozilla::MonitorAutoLock;
#define MOZ_OPT_ASSERT(cond) \
if (!(cond)) { \
MOZ_CRASH(); \
}
USING_INDEXEDDB_NAMESPACE
namespace {
@ -48,6 +53,7 @@ private:
END_INDEXEDDB_NAMESPACE
TransactionThreadPool::TransactionThreadPool()
: mTouchingCallbacks(false)
{
NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
NS_ASSERTION(!gInstance, "More than one instance!");
@ -140,11 +146,14 @@ TransactionThreadPool::Cleanup()
NS_ENSURE_SUCCESS(rv, rv);
if (!mCompleteCallbacks.IsEmpty()) {
MOZ_OPT_ASSERT(!mTouchingCallbacks);
mTouchingCallbacks = true;
// Run all callbacks manually now.
for (uint32_t index = 0; index < mCompleteCallbacks.Length(); index++) {
mCompleteCallbacks[index].mCallback->Run();
}
mCompleteCallbacks.Clear();
mTouchingCallbacks = false;
// And make sure they get processed.
rv = NS_ProcessPendingEvents(nullptr);
@ -216,6 +225,8 @@ TransactionThreadPool::FinishTransaction(IDBTransaction* aTransaction)
// See if we need to fire any complete callbacks.
uint32_t index = 0;
MOZ_OPT_ASSERT(!mTouchingCallbacks);
mTouchingCallbacks = true;
while (index < mCompleteCallbacks.Length()) {
if (MaybeFireCallback(mCompleteCallbacks[index])) {
mCompleteCallbacks.RemoveElementAt(index);
@ -224,6 +235,7 @@ TransactionThreadPool::FinishTransaction(IDBTransaction* aTransaction)
index++;
}
}
mTouchingCallbacks = false;
return;
}
@ -360,6 +372,8 @@ TransactionThreadPool::WaitForDatabasesToComplete(
NS_ASSERTION(!aDatabases.IsEmpty(), "No databases to wait on!");
NS_ASSERTION(aCallback, "Null pointer!");
MOZ_OPT_ASSERT(!mTouchingCallbacks);
mTouchingCallbacks = true;
DatabasesCompleteCallback* callback = mCompleteCallbacks.AppendElement();
callback->mCallback = aCallback;
@ -368,6 +382,8 @@ TransactionThreadPool::WaitForDatabasesToComplete(
if (MaybeFireCallback(*callback)) {
mCompleteCallbacks.RemoveElementAt(mCompleteCallbacks.Length() - 1);
}
mTouchingCallbacks = false;
}
// static

View File

@ -181,6 +181,7 @@ protected:
mTransactionsInProgress;
nsTArray<DatabasesCompleteCallback> mCompleteCallbacks;
bool mTouchingCallbacks;
};
END_INDEXEDDB_NAMESPACE