Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQT6F-001Zxy-2J for pgsql-bugs@arkaria.postgresql.org; Fri, 22 May 2026 16:51:51 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wQT6C-00DjVQ-10 for pgsql-bugs@arkaria.postgresql.org; Fri, 22 May 2026 16:51:49 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wQT6B-00DjVG-2c for pgsql-bugs@lists.postgresql.org; Fri, 22 May 2026 16:51:48 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wQT69-00000000IVc-2dD7 for pgsql-bugs@lists.postgresql.org; Fri, 22 May 2026 16:51:47 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-7b37d84a6b3so70024657b3.2 for ; Fri, 22 May 2026 09:51:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1779468705; cv=none; d=google.com; s=arc-20240605; b=IxnVzVY2zzFX85f7ESMmuIP/tj0F5kbtyHcGGpZzEweVGoB3J69Ps9BtkC5W4Z5/Uv 5ajAV4i8F/GmBg8Ujz3IoWN7TWnjkiK+q6J5/4HIfBC1Xw9opEcXUHRJBY0WKJOBMJJR oaJLzb6jfrp3ePjz6kqp8Yun1VvPr9PVzEgTDxhEsPgnaawcTxcYwHsF7OgcTw9r7BIQ RxnG4dxk0sVEzOo2KB8xc3IIF4cTJ+oR9H6lVnD8u7gUzR6FbMVAlqU0MOw6Xp6V0Ss0 lVLL+TaU38Xly4ZOnHcHuoe6DyVxDW4Z+AYE9fMkWVE94UZs/fLkBTQShcCIZXWytLh7 eWHA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=hsz7z5iQM6ezReL7g7tu5Owdv9YPSVUFdF/quYHduNw=; fh=FficzVE5/RGDSXd3dR0TklGaC/lDyDY+6RE/L6B6XHA=; b=eZC+O9poVxT/P3Ckz2+AjrdtV5w2GTWR7mnAshehBL8RahL8dAYofr8IsivvvlzcjN t26S2HT7IG5W0X8FlA77SiS+qJdY34bQUXXa8ctifay6QE8WzVMNWBg7FGfRNTrP1LXx iqshaWE/sqL4n8oKaPqbM5JLoxJUjHZ88U0vxDYuLAk6+qxL18eYaBdn7YVU3e4pPqC3 eVVXlumofF4qc4BxLpAWmbk4doKtd2kcpA7clFQRsLikW1UFUdNstA6KtAJ5bUeOE5Wt 9Yao/0Cii4yaHY5NjTgfQCQ54lO4IfHic6cTWPCfjaihP6gfFjg6ujm+J13jIn/QyCEf phCA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779468705; x=1780073505; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=hsz7z5iQM6ezReL7g7tu5Owdv9YPSVUFdF/quYHduNw=; b=E18wszzOIR8GN0vwvc/hMDjNiPCP68ef8XyfRrmWzoT3t4L/scjzBRNiwsUJo6zrXU spgAvlC7bK9HARrBPrEJ+foJNGdCP3vIgrA5ZhyfewA/JEKQY4AF0+zZiYkvvOPwXAss IOxIqWKNP2zHYFHpND2aCGFT1mj4JM+tBOOtcgE+qLIg2jQ9AUpiDTtGUxSJSSyOL/vc AmfiIeH0ZhQ4tgDYKFN3ZsCTjm6DSLguc7fsyMQxrkGXIUUJvC1vVmkpgXMyni3KbymH FO9xD/M3gmcyUgZUAUdJnG6Qia+kUNOFeBmbTKGS5elxOcXxmTLthFJYn62+v5kIquLU o8xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779468705; x=1780073505; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=hsz7z5iQM6ezReL7g7tu5Owdv9YPSVUFdF/quYHduNw=; b=mq9xnbSy7WgeGYPqwr5SfbKqbIcuCaD87mh9gXzERbb6xGLEYv6XKeOOFM8Zk7lBcA 9+x/Uquje/ejuIeyBJLwfN41Fi8vLcVxLdK5FhMeVYUOtn32uUeK/S5JHUmV9+rmjxHG aP0zHzTsz50bC9dAn/ml2U/K/q1Dm9DrssCuqsTmv6LqL1CBMhgVawHRyd2PlipMZW1l anK+iHehyVwi+Ojo8o5If0wA5wE/PVwPXcRZMrZjLip2E/sBe+ABvhXVx7x064YOgq9i B5m/NQku9sK+/4qTq7cb1JX/ayJbsvWLaJO2eJI9ftEMO4o1hOntttri4l7ELFD/enaP llUA== X-Forwarded-Encrypted: i=1; AFNElJ+jiFB7S4GXfNzs+uM+6oH4Maf3A1o9zdj8ugbC342ISV+/R0zKMXUJdBgvk1nqL5zM2k09jXAEzPxi@lists.postgresql.org X-Gm-Message-State: AOJu0YyrJnZtGrw9pGvdtd6rO4Ze1becPsE/WLfjEX7unFnancaSrzot PUZdVvIB7191dJnKRYZU2p1hGddqHpEUg3kcAM9HPHEGqE0HG6zg6HMp2GvmtBmKJAuo/et/+gC MjnSlRU6LkzyDwQeHs+LnsBfj3+6Hrjk= X-Gm-Gg: Acq92OFxAwNRHqVBF9x0oLiHXf49x/rWnRwsx//TOHQDRpN+5wotj6F0w4EQO/RiPos RHWR0TVQPNv59qCGHbUrGC2sXB68fbf2t7uDnYBUaMMoJ+XZzSYjTdokqx7zQK40jIlZB2/rcQ3 +CfePQmjO4LIvRpk6uDhhPeCBWk14W9GlzAd8vrC8egfI37In4p3h/srEAsvzxpex7mpQZunhxW 69DF5WVJPnXEFbR+Cee/zEuYLIBX/cX7kKTY3JvvJi4VJhVJSeN+O4azuyvY4HLJR6VIGhkjN9T 8HABww== X-Received: by 2002:a05:690c:6111:b0:7b2:dad2:5dee with SMTP id 00721157ae682-7d3337e6352mr53030597b3.2.1779468704552; Fri, 22 May 2026 09:51:44 -0700 (PDT) MIME-Version: 1.0 References: <19490-9c59c6a583513b99@postgresql.org> <46FE61C9-F273-45FD-BED7-0F8CDA6EB992@yandex-team.ru> <46DB3CAB-EA1C-41A5-9D6D-5F913A2AAF66@yandex-team.ru> In-Reply-To: From: Ayush Tiwari Date: Fri, 22 May 2026 22:21:32 +0530 X-Gm-Features: AVHnY4LltUfy8OhuSAx5fvZuK3l_MD4GoPf9kZgWHDU-AuxUTT5K318HEZJEU1U Message-ID: Subject: Re: BUG #19490: Streaming standby on 16.14 stops applying WAL on MultiXactOffsetSLRU when primary is 16.8 To: Radim Marek , Andrey Borodin , Heikki Linnakangas Cc: Marko Tiikkaja , PostgreSQL mailing lists Content-Type: multipart/mixed; boundary="0000000000000646a506526ad898" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000646a506526ad898 Content-Type: multipart/alternative; boundary="0000000000000646a406526ad896" --0000000000000646a406526ad896 Content-Type: text/plain; charset="UTF-8" Hi, On Thu, 21 May 2026 at 14:36, Radim Marek wrote: > Altough the culprit is known, I've got more data as requested. > > #0 0x00007f20e9bdb687 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 > #1 0x00007f20e9bdbc8c in ?? () from /lib/x86_64-linux-gnu/libc.so.6 > #2 0x00007f20e9be6920 in ?? () from /lib/x86_64-linux-gnu/libc.so.6 > #3 0x000055a71796e3ca in PGSemaphoreLock (sema=0x7f20de6d0e38) at > ./build/src/backend/port/pg_sema.c:327 > #4 0x000055a7179f57ed in LWLockAcquire (lock=0x7f20de6d1800, > mode=mode@entry=LW_EXCLUSIVE) at > ./build/../src/backend/storage/lmgr/lwlock.c:1314 > #5 0x000055a71772dfb2 in SimpleLruWriteAll (ctl=ctl@entry=0x55a717e83040 > , allow_redirtied=allow_redirtied@entry=false) at > ./build/../src/backend/access/transam/slru.c:1174 > #6 0x000055a717727b6f in RecordNewMultiXact (multi=79871, offset=218449, > nmembers=2, members=members@entry=0x7f20de6831ec) at > ./build/../src/backend/access/transam/multixact.c:944 > #7 0x000055a71772a983 in multixact_redo (record=0x55a73a8d0fc8) at > ./build/../src/backend/access/transam/multixact.c:3464 > #8 0x000055a71774d9b8 in ApplyWalRecord (xlogreader=, > record=0x7f20de6831b0, replayTLI=) at > ./build/../src/backend/access/transam/xlogrecovery.c:1951 > #9 PerformWalRecovery () at > ./build/../src/backend/access/transam/xlogrecovery.c:1782 > #10 0x000055a717740def in StartupXLOG () at > ./build/../src/backend/access/transam/xlog.c:5452 > #11 0x000055a71797c7e4 in StartupProcessMain () at > ./build/../src/backend/postmaster/startup.c:282 > #12 0x000055a717972b20 in AuxiliaryProcessMain (auxtype=auxtype@entry=StartupProcess) > at ./build/../src/backend/postmaster/auxprocess.c:141 > #13 0x000055a717977db3 in StartChildProcess (type=StartupProcess) at > ./build/../src/backend/postmaster/postmaster.c:5381 > #14 0x000055a71797bfb8 in PostmasterMain (argc=argc@entry=1, > argv=argv@entry=0x55a73a8d0590) at > ./build/../src/backend/postmaster/postmaster.c:1463 > #15 0x000055a7176a05bc in main (argc=1, argv=0x55a73a8d0590) at > ./build/../src/backend/main/main.c:200 > > and WAL dump > > rmgr: Btree len (rec/tot): 64/ 64, tx: 336098, lsn: > 1/32DE75F0, prev 1/32DE7580, desc: INSERT_LEAF off: 244, blkref #0: rel > 1663/16384/16432 blk 536 > rmgr: MultiXact len (rec/tot): 54/ 54, tx: 336098, lsn: > 1/32DE7630, prev 1/32DE75F0, desc: CREATE_ID 79871 offset 218449 nmembers > 2: 336089 (keysh) > 336098 (keysh) > rmgr: Heap len (rec/tot): 54/ 54, tx: 336098, lsn: > 1/32DE7668, prev 1/32DE7630, desc: LOCK xmax: 79871, off: 1, infobits: > [IS_MULTI, LOCK_ONLY, > KEYSHR_LOCK], flags: 0x00, blkref #0: rel 1663/16384/16418 blk 0 > rmgr: Heap len (rec/tot): 72/ 72, tx: 336096, lsn: > 1/32DE76A0, prev 1/32DE7668, desc: HOT_UPDATE old_xmax: 336096, old_off: > 52, old_infobits: [], > flags: 0x20, new_xmax: 0, new_off: 149, blkref #0: rel 1663/16384/16401 > blk 22 > rmgr: Heap len (rec/tot): 71/ 71, tx: 336096, lsn: > 1/32DE76E8, prev 1/32DE76A0, desc: HOT_UPDATE old_xmax: 336096, old_off: > 149, old_infobits: [], > flags: 0x60, new_xmax: 0, new_off: 209, blkref #0: rel 1663/16384/16399 > blk 6 > rmgr: Heap len (rec/tot): 79/ 79, tx: 336096, lsn: > 1/32DE7730, prev 1/32DE76E8, desc: INSERT off: 150, flags: 0x00, blkref #0: > rel 1663/16384/16417 > blk 741 > rmgr: Heap len (rec/tot): 72/ 72, tx: 336097, lsn: > 1/32DE7780, prev 1/32DE7730, desc: HOT_UPDATE old_xmax: 336097, old_off: > 243, old_infobits: [], > flags: 0x20, new_xmax: 0, new_off: 228, blkref #0: rel 1663/16384/16401 > blk 26 > rmgr: Transaction len (rec/tot): 34/ 34, tx: 336096, lsn: > 1/32DE77C8, prev 1/32DE7780, desc: COMMIT 2026-05-21 08:43:07.003572 UTC > > Radim > Thanks for the additional backtrace and WAL dump. That makes the failure mode much clearer. The latest trace shows the startup process here: SimpleLruWriteAll(MultiXactOffsetCtl, false) RecordNewMultiXact(multi=79871, offset=218449, nmembers=2, ...) multixact_redo() The WAL dump also shows the matching record: rmgr: MultiXact ... desc: CREATE_ID 79871 offset 218449 nmembers 2 79871 is the last multixact on its offsets page, so replaying that record enters the next_pageno != pageno compatibility path added by 77dff5d937b. On REL_14 through REL_16, RecordNewMultiXact() already holds MultiXactOffsetSLRULock while executing that code. SimpleLruWriteAll() then tries to acquire MultiXactOffsetCtl's SLRU control lock, which is the same MultiXactOffsetSLRULock on those branches. That explains the standby startup process waiting forever on LWLock:MultiXactOffsetSLRU, with no corresponding SLRU I/O activity. I think the right fix is to remove that SimpleLruWriteAll() call while keeping the missing-page initialization logic. The flush is only meant to make SimpleLruDoesPhysicalPageExist() see pages that exist in SLRU buffers but have not reached disk. In this fallback path, I don't see a way for the tested next_pageno to be in that state: if RecordNewMultiXact() itself initializes the page, it writes it synchronously with SimpleLruWritePage() before setting last_initialized_offsets_page. I attached a small patch for REL_16_STABLE. The same self-deadlock pattern is also present on PG 14 and 15. PG 17 and 18 have the same compatibility call, but SLRU locking is banked there, and RecordNewMultiXact() does not appear to hold the relevant bank lock before calling SimpleLruWriteAll(), so I would not describe those branches as having this exact self-deadlock, but needs more analysis. Added both Andrey and Heikki in to-mail, since I'm not sure if this is more extreme than the multixact offset issue we had with 16.12, or it is at par with that. Regards, Ayush --0000000000000646a406526ad896 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi,

On Thu, 21 May 2= 026 at 14:36, Radim Marek <radim@= boringsql.com> wrote:
Altough the culprit is = known, I've got more data as requested.

#0 =C2= =A00x00007f20e9bdb687 in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#1 = =C2=A00x00007f20e9bdbc8c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#= 2 =C2=A00x00007f20e9be6920 in ?? () from /lib/x86_64-linux-gnu/libc.so.6#3 =C2=A00x000055a71796e3ca in PGSemaphoreLock (sema=3D0x7f20de6d0e38) at = ./build/src/backend/port/pg_sema.c:327
#4 =C2=A00x000055a7179f57ed in LW= LockAcquire (lock=3D0x7f20de6d1800, mode=3Dmode@entry=3DLW_EXCLUSIVE) at ./= build/../src/backend/storage/lmgr/lwlock.c:1314
#5 =C2=A00x000055a71772d= fb2 in SimpleLruWriteAll (ctl=3Dctl@entry=3D0x55a717e83040 <MultiXactOff= setCtlData>, allow_redirtied=3Dallow_redirtied@entry=3Dfalse) at
./bu= ild/../src/backend/access/transam/slru.c:1174
#6 =C2=A00x000055a717727b6= f in RecordNewMultiXact (multi=3D79871, offset=3D218449, nmembers=3D2, memb= ers=3Dmembers@entry=3D0x7f20de6831ec) at
./build/../src/backend/access/t= ransam/multixact.c:944
#7 =C2=A00x000055a71772a983 in multixact_redo (re= cord=3D0x55a73a8d0fc8) at ./build/../src/backend/access/transam/multixact.c= :3464
#8 =C2=A00x000055a71774d9b8 in ApplyWalRecord (xlogreader=3D<op= timized out>, record=3D0x7f20de6831b0, replayTLI=3D<synthetic pointer= >) at
./build/../src/backend/access/transam/xlogrecovery.c:1951
#9= =C2=A0PerformWalRecovery () at ./build/../src/backend/access/transam/xlogr= ecovery.c:1782
#10 0x000055a717740def in StartupXLOG () at ./build/../sr= c/backend/access/transam/xlog.c:5452
#11 0x000055a71797c7e4 in StartupPr= ocessMain () at ./build/../src/backend/postmaster/startup.c:282
#12 0x00= 0055a717972b20 in AuxiliaryProcessMain (auxtype=3Dauxtype@entry=3DStartupPr= ocess) at ./build/../src/backend/postmaster/auxprocess.c:141
#13 0x00005= 5a717977db3 in StartChildProcess (type=3DStartupProcess) at ./build/../src/= backend/postmaster/postmaster.c:5381
#14 0x000055a71797bfb8 in Postmaste= rMain (argc=3Dargc@entry=3D1, argv=3Dargv@entry=3D0x55a73a8d0590) at ./buil= d/../src/backend/postmaster/postmaster.c:1463
#15 0x000055a7176a05bc in = main (argc=3D1, argv=3D0x55a73a8d0590) at ./build/../src/backend/main/main.= c:200

and WAL dump

rmgr: Btree =C2=A0= =C2=A0 =C2=A0 len (rec/tot): =C2=A0 =C2=A0 64/ =C2=A0 =C2=A064, tx: =C2=A0= =C2=A0 336098, lsn: 1/32DE75F0, prev 1/32DE7580, desc: INSERT_LEAF off: 24= 4, blkref #0: rel 1663/16384/16432 blk 536
rmgr: MultiXact =C2=A0 len (r= ec/tot): =C2=A0 =C2=A0 54/ =C2=A0 =C2=A054, tx: =C2=A0 =C2=A0 336098, lsn: = 1/32DE7630, prev 1/32DE75F0, desc: CREATE_ID 79871 offset 218449 nmembers 2= : 336089 (keysh)
336098 (keysh)
rmgr: Heap =C2=A0 =C2=A0 =C2=A0 =C2= =A0len (rec/tot): =C2=A0 =C2=A0 54/ =C2=A0 =C2=A054, tx: =C2=A0 =C2=A0 3360= 98, lsn: 1/32DE7668, prev 1/32DE7630, desc: LOCK xmax: 79871, off: 1, infob= its: [IS_MULTI, LOCK_ONLY,
KEYSHR_LOCK], flags: 0x00, blkref #0: rel 166= 3/16384/16418 blk 0
rmgr: Heap =C2=A0 =C2=A0 =C2=A0 =C2=A0len (rec/tot):= =C2=A0 =C2=A0 72/ =C2=A0 =C2=A072, tx: =C2=A0 =C2=A0 336096, lsn: 1/32DE76= A0, prev 1/32DE7668, desc: HOT_UPDATE old_xmax: 336096, old_off: 52, old_in= fobits: [],
flags: 0x20, new_xmax: 0, new_off: 149, blkref #0: rel 1663/= 16384/16401 blk 22
rmgr: Heap =C2=A0 =C2=A0 =C2=A0 =C2=A0len (rec/tot): = =C2=A0 =C2=A0 71/ =C2=A0 =C2=A071, tx: =C2=A0 =C2=A0 336096, lsn: 1/32DE76E= 8, prev 1/32DE76A0, desc: HOT_UPDATE old_xmax: 336096, old_off: 149, old_in= fobits: [],
flags: 0x60, new_xmax: 0, new_off: 209, blkref #0: rel 1663/= 16384/16399 blk 6
rmgr: Heap =C2=A0 =C2=A0 =C2=A0 =C2=A0len (rec/tot): = =C2=A0 =C2=A0 79/ =C2=A0 =C2=A079, tx: =C2=A0 =C2=A0 336096, lsn: 1/32DE773= 0, prev 1/32DE76E8, desc: INSERT off: 150, flags: 0x00, blkref #0: rel 1663= /16384/16417
blk 741
rmgr: Heap =C2=A0 =C2=A0 =C2=A0 =C2=A0len (rec/t= ot): =C2=A0 =C2=A0 72/ =C2=A0 =C2=A072, tx: =C2=A0 =C2=A0 336097, lsn: 1/32= DE7780, prev 1/32DE7730, desc: HOT_UPDATE old_xmax: 336097, old_off: 243, o= ld_infobits: [],
flags: 0x20, new_xmax: 0, new_off: 228, blkref #0: rel = 1663/16384/16401 blk 26
rmgr: Transaction len (rec/tot): =C2=A0 =C2=A0 3= 4/ =C2=A0 =C2=A034, tx: =C2=A0 =C2=A0 336096, lsn: 1/32DE77C8, prev 1/32DE7= 780, desc: COMMIT 2026-05-21 08:43:07.003572 UTC

Radim

Thanks for the additional backtrace an= d WAL dump.=C2=A0 That makes the failure
mode much clearer.

The l= atest trace shows the startup process here:

=C2=A0 SimpleLruWriteAll= (MultiXactOffsetCtl, false)
=C2=A0 RecordNewMultiXact(multi=3D79871, off= set=3D218449, nmembers=3D2, ...)
=C2=A0 multixact_redo()

The WAL = dump also shows the matching record:

=C2=A0 rmgr: MultiXact ... desc= : CREATE_ID 79871 offset 218449 nmembers 2

79871 is the last multixa= ct on its offsets page, so replaying that record
enters the next_pa= geno !=3D pageno compatibility path added by 77dff5d937b.=C2=A0
<= br>
On REL_14 through REL_16, RecordNewMultiXact() already holds<= br>MultiXactOffsetSLRULock while executing that code.=C2=A0 SimpleLruWriteA= ll() then
tries to acquire MultiXactOffsetCtl's SLRU control lock, w= hich is the same
MultiXactOffsetSLRULock on those branches.=C2=A0 That e= xplains the standby startup
process waiting forever on LWLock:MultiXactO= ffsetSLRU, with no corresponding
SLRU I/O activity.=C2=A0

I think= the right fix is to remove that SimpleLruWriteAll() call while
keeping = the missing-page initialization logic.=C2=A0 The flush is only meant to
= make SimpleLruDoesPhysicalPageExist() see pages that exist in SLRU buffers<= br>but have not reached disk.=C2=A0 In this fallback path, I don't see = a way for
the tested next_pageno to be in that state: if RecordNewMultiX= act() itself
initializes the page, it writes it synchronously with Simpl= eLruWritePage()
before setting last_initialized_offsets_page.

I a= ttached a small patch for REL_16_STABLE.=C2=A0 The same self-deadlock patte= rn
is also present on PG 14 and 15.=C2=A0 PG 17 and
18 have the same = compatibility call, but SLRU locking is banked
there, and RecordNewMulti= Xact() does not appear to hold the relevant bank
lock before calling Sim= pleLruWriteAll(), so I would not describe those
branches as having this = exact self-deadlock, but needs more analysis.

Adde= d both Andrey and Heikki in to-mail, since I'm not sure if this
is more extreme than the multixact offset issue we had with 16.12, or it=
is at par with that.

Regards,
Ayush<= /div>
--0000000000000646a406526ad896-- --0000000000000646a506526ad898 Content-Type: application/octet-stream; name="v1-0001-Avoid-self-deadlock-on-MultiXactOffsetSLRULock-dur.patch" Content-Disposition: attachment; filename="v1-0001-Avoid-self-deadlock-on-MultiXactOffsetSLRULock-dur.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mph5d2hw0 RnJvbSBiMzNhYmVlZGUwODQ3ZWRhYzM2MDNiODdhNDc4YTgzMmJlMTc4NGY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBeXVzaCBUaXdhcmkgPGF5dXNodGl3YXJpLnNsZzAxQGdtYWls LmNvbT4KRGF0ZTogVGh1LCAyMSBNYXkgMjAyNiAwNzozOToyOCArMDAwMApTdWJqZWN0OiBbUEFU Q0ggUkVMXzE2X1NUQUJMRSB2MV0gQXZvaWQgc2VsZi1kZWFkbG9jayBvbgogTXVsdGlYYWN0T2Zm c2V0U0xSVUxvY2sgZHVyaW5nIFdBTCByZXBsYXkKCkNvbW1pdCA3N2RmZjVkOTM3YiBhZGRlZCBh IGNvbXBhdGliaWxpdHkgY2hlY2sgaW4gUmVjb3JkTmV3TXVsdGlYYWN0KCkKdGhhdCBjYW4gY2Fs bCBTaW1wbGVMcnVXcml0ZUFsbChNdWx0aVhhY3RPZmZzZXRDdGwsIGZhbHNlKSB3aGlsZSBhbHJl YWR5CmhvbGRpbmcgTXVsdGlYYWN0T2Zmc2V0U0xSVUxvY2suICBJbiBSRUxfMTYsIFNpbXBsZUxy dVdyaXRlQWxsKCkgdHJpZXMKdG8gYWNxdWlyZSB0aGUgc2FtZSBTTFJVIGNvbnRyb2wgbG9jaywg c28gV0FMIHJlcGxheSBjYW4gc2VsZi1kZWFkbG9jawp3aXRoIHRoZSBzdGFydHVwIHByb2Nlc3Mg d2FpdGluZyBvbiBMV0xvY2s6TXVsdGlYYWN0T2Zmc2V0U0xSVS4KClRoZSBmbHVzaCBpcyBub3Qg bmVlZGVkIGZvciB0aGUgcGFnZSB0ZXN0ZWQgaW4gdGhpcyBmYWxsYmFjayBwYXRoLiAgSWYKUmVj b3JkTmV3TXVsdGlYYWN0KCkgaW5pdGlhbGl6ZXMgdGhhdCBvZmZzZXRzIHBhZ2UsIGl0IHdyaXRl cyBpdApzeW5jaHJvbm91c2x5IHdpdGggU2ltcGxlTHJ1V3JpdGVQYWdlKCkgYmVmb3JlIHVwZGF0 aW5nCmxhc3RfaW5pdGlhbGl6ZWRfb2Zmc2V0c19wYWdlLiAgRHJvcCB0aGUgdW5zYWZlIGZsdXNo IGFuZCBrZWVwIHRoZQpleGlzdGluZyBtaXNzaW5nLXBhZ2UgaW5pdGlhbGl6YXRpb24gbG9naWMu CgpSZXBvcnRlZC1ieTogUmFkaW0gTWFyZWsgPHJhZGltQGJvcmluZ3NxbC5jb20+ClJlcG9ydGVk LWJ5OiBNYXJrbyBUaWlra2FqYSA8bWFya29Aam9oLnRvPgpEaWFnbm9zZWQtYnk6IEFuZHJleSBC b3JvZGluIDx4NG1tbUB5YW5kZXgtdGVhbS5ydT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3Iu ZXMvbS8xOTQ5MC05YzU5YzZhNTgzNTEzYjk5QHBvc3RncmVzcWwub3JnCi0tLQogc3JjL2JhY2tl bmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgfCAxMyArKysrKysrLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNyBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKaW5kZXggZjgyNTU3OWU4ODguLjViNmI0OGViNzljIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwpAQCAtOTM0LDE2ICs5MzQsMTcgQEAg UmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgb2Zm c2V0LAogCQkgKiBzZWVuIGFueSBYTE9HX01VTFRJWEFDVF9aRVJPX09GRl9QQUdFIHJlY29yZHMg eWV0LCB3aGljaCBzaG91bGQKIAkJICogaGFwcGVuIGF0IG1vc3Qgb25jZSBhZnRlciBzdGFydGlu ZyBXQUwgcmVjb3ZlcnkuCiAJCSAqCi0JCSAqIEFzIGFuIGV4dHJhIHNhZmV0eSBtZWFzdXJlLCBp ZiB3ZSBkbyByZXNvcnQgdG8KLQkJICogU2ltcGxlTHJ1RG9lc1BoeXNpY2FsUGFnZUV4aXN0KCks IGZsdXNoIHRoZSBTTFJVIGJ1ZmZlcnMgZmlyc3Qgc28KLQkJICogdGhhdCBpdCB3aWxsIHJldHVy biBhbiBhY2N1cmF0ZSByZXN1bHQuCisJCSAqCisJCSAqIFdlIGNhbm5vdCBjYWxsIFNpbXBsZUxy dVdyaXRlQWxsKCkgdG8gZmx1c2ggdGhlIFNMUlUgYnVmZmVycworCQkgKiBoZXJlLCBiZWNhdXNl IHRoYXQgd291bGQgc2VsZi1kZWFkbG9jayBvbiBNdWx0aVhhY3RPZmZzZXRTTFJVTG9jaywKKwkJ ICogd2hpY2ggd2UgYWxyZWFkeSBob2xkLiAgRm9ydHVuYXRlbHkgd2UgZG8gbm90IG5lZWQgdG86 IGV2ZXJ5CisJCSAqIHBhZ2UgdGhhdCB0aGlzIGNvZGUgcGF0aCBpbml0aWFsaXplcyBpcyBzeW5j aHJvbm91c2x5IGZsdXNoZWQgdmlhCisJCSAqIFNpbXBsZUxydVdyaXRlUGFnZSgpIGJlbG93IGJl Zm9yZSB0aGlzIGxvY2sgaXMgcmVsZWFzZWQsIHNvIHRoZXJlCisJCSAqIGFyZSBubyByZWxldmFu dCBkaXJ0eSBwYWdlcy4KIAkJICotLS0tLS0tLS0tCiAJCSAqLwogCQlpZiAobGFzdF9pbml0aWFs aXplZF9vZmZzZXRzX3BhZ2UgPT0gLTEpCi0JCXsKLQkJCVNpbXBsZUxydVdyaXRlQWxsKE11bHRp WGFjdE9mZnNldEN0bCwgZmFsc2UpOwogCQkJaW5pdF9uZWVkZWQgPSAhU2ltcGxlTHJ1RG9lc1Bo eXNpY2FsUGFnZUV4aXN0KE11bHRpWGFjdE9mZnNldEN0bCwgbmV4dF9wYWdlbm8pOwotCQl9CiAJ CWVsc2UKIAkJCWluaXRfbmVlZGVkID0gKGxhc3RfaW5pdGlhbGl6ZWRfb2Zmc2V0c19wYWdlID09 IHBhZ2Vubyk7CiAKLS0gCjIuNDMuMAoK --0000000000000646a506526ad898--