mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 855276: Add assertions to catch the cause. r=bent
This commit is contained in:
parent
4aca1db809
commit
d0dccfab5c
@ -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
|
||||
|
@ -181,6 +181,7 @@ protected:
|
||||
mTransactionsInProgress;
|
||||
|
||||
nsTArray<DatabasesCompleteCallback> mCompleteCallbacks;
|
||||
bool mTouchingCallbacks;
|
||||
};
|
||||
|
||||
END_INDEXEDDB_NAMESPACE
|
||||
|
Loading…
Reference in New Issue
Block a user