mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1112620 - Fix invalidated version change transactions, r=khuey.
This commit is contained in:
parent
4e377455b4
commit
d839795997
@ -3424,7 +3424,7 @@ protected:
|
||||
UpdateMetadata(nsresult aResult)
|
||||
{ }
|
||||
|
||||
virtual bool
|
||||
virtual void
|
||||
SendCompleteNotification(nsresult aResult) = 0;
|
||||
|
||||
private:
|
||||
@ -3723,7 +3723,7 @@ private:
|
||||
IsSameProcessActor();
|
||||
|
||||
// Only called by TransactionBase.
|
||||
virtual bool
|
||||
virtual void
|
||||
SendCompleteNotification(nsresult aResult) override;
|
||||
|
||||
// IPDL methods are only called by IPDL.
|
||||
@ -3797,7 +3797,7 @@ private:
|
||||
UpdateMetadata(nsresult aResult) override;
|
||||
|
||||
// Only called by TransactionBase.
|
||||
virtual bool
|
||||
virtual void
|
||||
SendCompleteNotification(nsresult aResult) override;
|
||||
|
||||
// IPDL methods are only called by IPDL.
|
||||
@ -7814,12 +7814,14 @@ NormalTransaction::IsSameProcessActor()
|
||||
return !BackgroundParent::IsOtherProcessActor(actor);
|
||||
}
|
||||
|
||||
bool
|
||||
void
|
||||
NormalTransaction::SendCompleteNotification(nsresult aResult)
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
return IsActorDestroyed() || !NS_WARN_IF(!SendComplete(aResult));
|
||||
if (!IsActorDestroyed()) {
|
||||
unused << SendComplete(aResult);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@ -7827,6 +7829,8 @@ NormalTransaction::ActorDestroy(ActorDestroyReason aWhy)
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
NoteActorDestroyed();
|
||||
|
||||
if (!mCommittedOrAborted) {
|
||||
if (NS_SUCCEEDED(mResultCode)) {
|
||||
IDB_REPORT_INTERNAL_ERR();
|
||||
@ -7837,8 +7841,6 @@ NormalTransaction::ActorDestroy(ActorDestroyReason aWhy)
|
||||
|
||||
MaybeCommitOrAbort();
|
||||
}
|
||||
|
||||
NoteActorDestroyed();
|
||||
}
|
||||
|
||||
bool
|
||||
@ -8018,8 +8020,8 @@ VersionChangeTransaction::UpdateMetadata(nsresult aResult)
|
||||
AssertIsOnBackgroundThread();
|
||||
MOZ_ASSERT(GetDatabase());
|
||||
MOZ_ASSERT(mOpenDatabaseOp);
|
||||
MOZ_ASSERT(mOpenDatabaseOp->mDatabase);
|
||||
MOZ_ASSERT(!mOpenDatabaseOp->mDatabaseId.IsEmpty());
|
||||
MOZ_ASSERT(!!mActorWasAlive == !!mOpenDatabaseOp->mDatabase);
|
||||
MOZ_ASSERT_IF(mActorWasAlive, !mOpenDatabaseOp->mDatabaseId.IsEmpty());
|
||||
|
||||
class MOZ_STACK_CLASS Helper final
|
||||
{
|
||||
@ -8061,7 +8063,7 @@ VersionChangeTransaction::UpdateMetadata(nsresult aResult)
|
||||
}
|
||||
};
|
||||
|
||||
if (IsActorDestroyed()) {
|
||||
if (IsActorDestroyed() || !mActorWasAlive) {
|
||||
return;
|
||||
}
|
||||
|
||||
@ -8093,26 +8095,33 @@ VersionChangeTransaction::UpdateMetadata(nsresult aResult)
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
void
|
||||
VersionChangeTransaction::SendCompleteNotification(nsresult aResult)
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
MOZ_ASSERT(mOpenDatabaseOp);
|
||||
MOZ_ASSERT_IF(!mActorWasAlive, NS_FAILED(mOpenDatabaseOp->mResultCode));
|
||||
MOZ_ASSERT_IF(!mActorWasAlive,
|
||||
mOpenDatabaseOp->mState > OpenDatabaseOp::State_SendingResults);
|
||||
|
||||
nsRefPtr<OpenDatabaseOp> openDatabaseOp;
|
||||
mOpenDatabaseOp.swap(openDatabaseOp);
|
||||
|
||||
if (!mActorWasAlive) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (NS_FAILED(aResult) && NS_SUCCEEDED(openDatabaseOp->mResultCode)) {
|
||||
openDatabaseOp->mResultCode = aResult;
|
||||
}
|
||||
|
||||
openDatabaseOp->mState = OpenDatabaseOp::State_SendingResults;
|
||||
|
||||
bool result = IsActorDestroyed() || !NS_WARN_IF(!SendComplete(aResult));
|
||||
if (!IsActorDestroyed()) {
|
||||
unused << SendComplete(aResult);
|
||||
}
|
||||
|
||||
MOZ_ALWAYS_TRUE(NS_SUCCEEDED(openDatabaseOp->Run()));
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
void
|
||||
@ -8120,6 +8129,8 @@ VersionChangeTransaction::ActorDestroy(ActorDestroyReason aWhy)
|
||||
{
|
||||
AssertIsOnBackgroundThread();
|
||||
|
||||
NoteActorDestroyed();
|
||||
|
||||
if (!mCommittedOrAborted) {
|
||||
if (NS_SUCCEEDED(mResultCode)) {
|
||||
IDB_REPORT_INTERNAL_ERR();
|
||||
@ -8130,8 +8141,6 @@ VersionChangeTransaction::ActorDestroy(ActorDestroyReason aWhy)
|
||||
|
||||
MaybeCommitOrAbort();
|
||||
}
|
||||
|
||||
NoteActorDestroyed();
|
||||
}
|
||||
|
||||
bool
|
||||
|
Loading…
Reference in New Issue
Block a user