In ResolveRecoveryConflictWithBufferPin(), when deadlock_timeout fires, the function sends RECOVERY_CONFLICT_BUFFERPIN_DEADLOCK and returns. The caller (LockBufferForCleanup) loops back, sets up another deadlock_timeout, and the signal gets sent again every interval.
The lock-conflict path had the same problem and was fixed in 8900b5a9d59a by adding a second ProcWaitForSignal() after the deadlock-check signal. The buffer-pin path was left with an XXX comment asking "should we fix this?". The attached patch applies the same fix: after sending the deadlock-check signal, reset got_standby_deadlock_timeout and call ProcWaitForSignal() so the startup process waits for UnpinBuffer() rather than looping and re-signaling. Patch attached.
0001-Prevent-repeated-deadlock-check-signals-in-standby-b.patch
Description: Binary data
