Re: Fix bug of clearing of waitStart in ProcWakeup()

Fujii Masao <masao.fujii@gmail.com>

From: Fujii Masao <masao.fujii@gmail.com>
To: ji xu <thanksgreed@gmail.com>
Cc: Chao Li <li.evan.chao@gmail.com>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2026-02-24T15:41:03Z
Lists: pgsql-hackers
On Tue, Feb 24, 2026 at 4:31 PM ji xu <thanksgreed@gmail.com> wrote:
>
>
> Chao Li <li.evan.chao@gmail.com> 于2026年2月24日周二 14:29写道:
>>
>> Since this function is clearly operating on the parameter proc, the only statement that touches MyProc looks suspicious. It should reset proc->waitStart, not MyProc->waitStart.
>>
>> As written, it will incorrectly clear the caller’s waitStart instead of the awakened backend’s, potentially leaving a stale waitStart value in the target PGPROC.

Thanks for the report!

You’re right. This leaves proc->waitStart unreset for a backend that has
woken up from a lock wait. In practice this doesn't seem to cause
user-visible issues, since pg_locks.waitstart is reported as NULL
when pg_locks.granted is true, regardless of proc->waitStart.

That said, the behavior is incorrect, so I'm feeling inclined to backpatch
a fix. Thoughts?


> The fix looks correct to me. I applied it locally and build and "make check" passed from my side.

Sounds good to me.

Regards,

-- 
Fujii Masao



Commits

Same data as JSON: GET /api/v1/messages/:b64id/commits the thread's linked commits as JSON, with link sources. API reference →
  1. Fix ProcWakeup() resetting wrong waitStart field.