> On Sep 24, 2026, at 09:30, shihao zhong <[email protected]> wrote:
> 
> Hi,
> 
> Alex and Sami noticed in [1] that RemoveFromWaitQueue() does not clear
> PGPROC->waitStart. After lock_timeout, cancel or deadlock the old value
> stays until the next lock wait.
> 
> It leaks into pg_locks for a short time. The next wait joins the queue
> before ProcSleep() stores the new waitStart, and in that window pg_locks
> shows the old start time instead of NULL. Backend stopped at ProcSleep()
> entry, a few seconds after a lock_timeout:
> 
>   pid  | relation |        mode         | granted |           waitstart
>  
> -------+----------+---------------------+---------+-------------------------------
>   42442 | t        | AccessExclusiveLock | f       | 2026-09-23 
> 21:01:39.274763-04
> 
> With the patch it reads NULL. The patch clears it the same way
> ProcWakeup() does, like 70f470314cb did for the grant path. It applies
> to 14 and up.
> 
> [1] 
> https://postgr.es/m/CAPrb+Q+XN=snusxiuewmmo2h7qgq3y4upeksslkhcncyf7g...@mail.gmail.com
> 
> Thanks,
> Shihao
> <v1-0001-Reset-waitStart-when-a-lock-wait-fails.patch>

Looks good to me. Once proc->waitLock is cleared, proc->waitStart no longer 
describes an active wait, so clearing it at the same time seems right.

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
https://www.highgo.com/






Reply via email to