Subject: SIGSEGV in GrantLockLocal()

From: Richard Guo <[email-masked]>
Date: Wed, 18 Dec 2024 15:17:34 +0900

Recently, I've encountered a core dump several times on master, with a
backtrace like the one below.  This one happened on 0f23dedc9.  I was
running some fuzz testing and had started around 20 sessions
concurrently.

(gdb) bt
#0  in GrantLockLocal at lock.c:1758
#1  in GrantAwaitedLock at lock.c:1840
#2  in LockErrorCleanup at proc.c:809
#3  in AbortTransaction at xact.c:2846
#4  in AbortCurrentTransactionInternal at xact.c:3520
#5  in AbortCurrentTransaction at xact.c:3449
#6  in PostgresMain at postgres.c:4535
#7  in BackendMain at backend_startup.c:107
#8  in postmaster_child_launch at launch_backend.c:274
#9  in BackendStartup at postmaster.c:3391
#10 in ServerLoop at postmaster.c:1678
#11 in PostmasterMain at postmaster.c:1376
#12 in main at main.c:224

It seems that the lock request is not granted as expected, since
locallock->lockOwners is a NULL pointer.

(gdb) p locallock->lockOwners
$4 = (LOCALLOCKOWNER *) 0x0
(gdb) p locallock->numLockOwners
$5 = 0
(gdb) p locallock->maxLockOwners
$6 = 8

Unfortunately, I don't have a reliable way to trigger this issue.  I'm
wondering if anyone has any insights into what might be happening.

Thanks
Richard