Commit ee01f709 authored by Simon Riggs's avatar Simon Riggs

Exit correctly from PrepareRedoRemove() when not found

Complex crash bug all started with this failure.
Diagnosed and fixed by Nikhil Sontakke, reviewed by me.

Reported-by: Jeff Janes
Author: Nikhil Sontakke
Discussion: https://postgr.es/m/CAMkU=1xBP8cqdS5eK8APHL=X6RHMMM2vG5g+QamduuTsyCwv9g@mail.gmail.com
parent aa203e76
......@@ -2375,6 +2375,7 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning)
{
GlobalTransaction gxact = NULL;
int i;
bool found = false;
Assert(RecoveryInProgress());
......@@ -2386,6 +2387,7 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning)
if (gxact->xid == xid)
{
Assert(gxact->inredo);
found = true;
break;
}
}
......@@ -2394,7 +2396,7 @@ PrepareRedoRemove(TransactionId xid, bool giveWarning)
/*
* Just leave if there is nothing, this is expected during WAL replay.
*/
if (gxact == NULL)
if (!found)
return;
/*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment