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 1wKaPC-001A4u-1S for pgsql-bugs@arkaria.postgresql.org; Wed, 06 May 2026 11:27:06 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wKaPB-00Gd08-11 for pgsql-bugs@arkaria.postgresql.org; Wed, 06 May 2026 11:27:05 +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 1wKaPA-00Gczz-33 for pgsql-bugs@lists.postgresql.org; Wed, 06 May 2026 11:27:05 +0000 Received: from mail-ua1-x932.google.com ([2607:f8b0:4864:20::932]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wKaP8-00000000TiE-2HcJ for pgsql-bugs@lists.postgresql.org; Wed, 06 May 2026 11:27:04 +0000 Received: by mail-ua1-x932.google.com with SMTP id a1e0cc1a2514c-9568bae58f7so3655820241.3 for ; Wed, 06 May 2026 04:27:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1778066822; cv=none; d=google.com; s=arc-20240605; b=fjIl/EBNADGbW5LTIM2rLWokinvHuZuyGSYyy7YWv/XeuQH0QpI8FNm8zNQOIQoBeN 4S9CCG1RjA1XkOUpWcnPIBwmfwQmrykJMfjmgf+sPCOTn0LBzX/OZhsMb6ea8ABGF9+w ML9unzqIdFd1Z22DYGf2ByDv+kSqWzdb48uxMUDN4YKxeQ/J/uTViL7lAl3WZ8jdNQLb OKhmz0QbWqj9YrRfzDbK3KnuTYcVlaRafFsxdcr26Cge4JD8pmjvQFMfufB21rndmdoP 3TI0m7WCN48sDaILQWvrnNw4ijA5V50CgWoUgCyh9dS0AarSorybhoouCUjawbBrfSfH 8nqA== 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=ULJRtsg8Oz9k5s5elbWNg2qId6GVGwDWMf/VnK9zUdc=; fh=BakhioEGghJw8hB7o8bAuXlX+0yEbNs9JehmOn9V3s4=; b=QeJ3UUpgsThmBZZZDe0Cc3CEPPH3PxRo7W1HCmnnUbxlknrmuyMXU3Tyf+Jp/UswAd iD+fnrk51vPlGClVU8vC0zNx6rYyso16i38lJ8iH79TRaJyDX3co90i+Aevq6+37gtFX Oh8YZG79pXvU0LemEeYnDjc8aYk4lQFOHDzV1/1lYQZJe5gJ2bpmkaHCqFR2p4PMtsht T5OVbZU5i5xWg3yvNh25yaQ6FsqAXcPCERuzz07/Pme0Z3X/Qcdy1z05Ve+UxXSQYPEv A3N+efUYwC3b3iqVjuJbxpZLl81/MSrB4c7yyMn42Jn8pjRJwrfxyx1niDBaQ3OLx1YW Sbqw==; 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=1778066822; x=1778671622; 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=ULJRtsg8Oz9k5s5elbWNg2qId6GVGwDWMf/VnK9zUdc=; b=qxst5NTbVR6ZZI/44vx7bW5oHM5UPvZIfqICej4IzrR6RfixWtr9UjIXZYcbquhSB9 qNvbodtLoMIKJ42DkVKAnJeDQ+ZMb5X65/2PoBLTDLTbeTuxuvOQOb48t6pQvNPg1xhM 3w/LLK9xPaxAiopSEhF58Qc9bSZBaAHQDSfnovlIO/Re+ufbIhlNDFRxCewuXId49Lca /PyKUW5KKwTAXoy9E9fKuTtgJLQrU4qu36dlJxKxfUC868jsBASPQ9HP13rA5CgFDAKr rnGh2ceXQeFAwwEoah1lxM6bdsMNgC6ovTkk5SE2DQ7cB0fC3n3UhBUiKcYTLQPWI7l8 FT7Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778066822; x=1778671622; 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=ULJRtsg8Oz9k5s5elbWNg2qId6GVGwDWMf/VnK9zUdc=; b=sSnNh0Rjp6frFuQXaj0CKE3RO9KMCbWgVIawe1/VGJEh/D6XXCZ3M0Kxgj9idOTA68 37HqwWNElbCilmm9zI7cNqD/vkNWP3HIJBKeYbnNgD4G64FFD3n5UAcHOdSJK2Nl6OQC XrySdMULO+2BIiS2kTMLguqbOiGPRZ7Ck5jH0Fzuo4mvb7AB8fd9TTcUapSlQHQS7fkK rQ0cIj4uniy8huSAmYrDBSiQj4EMDQnAKW5IK2u4gHTqnhvzeCPfB89k4derc/N3fU9V lCpQ0T22ejubEil6KdDNeuyCKabjaLYTH/rV4vsfBRgEFSOpI2Cgxyev5j/OA7PTuQt7 3icg== X-Forwarded-Encrypted: i=1; AFNElJ8Z5o3rrPBhWu+WaHmP+q97HCE7i0F/X6WGHz54tahUbuYOjFR0MGq98JOeTbaXFkgDXhMzTWpwYKtE@lists.postgresql.org X-Gm-Message-State: AOJu0Yy2xSLHSP7l7lPP858MCsKuq521qAJg0zeqJf832ZQF+uOcwBKn 5XfyeKRcJneTBIM7fmpTnz/JrRFU9ipd2zc2R02DKeNHlEQaAmWTzlY27OmpvWfLgPZ+oNNFvCx TgYi83ztJMQrYu4c2EOSEcTuH8MKQPZM= X-Gm-Gg: AeBDiesBZ5GJH6p5kDjXOwmQxfPhNqQuhFKXWjGlCQeALpUpHINd/+0c33bViULy21k EpTqWXhwgKIPWluB8l7TmwkMoQkzlfqLgKtGVOzv9hlhI0Nz5JilxU7xuZNdQNceYnxRuRpMI1z LHPV76Y7uaQpV7+PpF16Y+igJD/eze+21rUfgTAfd3C9x49QGVelC+SU3k20AU6yuy31MP3EAkI 45T+ZIfttl97BzycduLJFDa2pumEDt0QqM37UudAK0YH+HSJtiETMAlYhhAWQH4ZZWdrTy9bwhk D7oS7VeGZFrB7v2z X-Received: by 2002:a05:6102:549e:b0:62f:471a:a139 with SMTP id ada2fe7eead31-630f9078a45mr1052310137.22.1778066822316; Wed, 06 May 2026 04:27:02 -0700 (PDT) MIME-Version: 1.0 References: <20240222.114600.1019580904613326727.horikyota.ntt@gmail.com> <20240222.143815.1856873109774774353.horikyota.ntt@gmail.com> <20240222.160027.62383325429446607.horikyota.ntt@gmail.com> In-Reply-To: <20240222.160027.62383325429446607.horikyota.ntt@gmail.com> From: Alex Masterov Date: Wed, 6 May 2026 13:26:51 +0200 X-Gm-Features: AVHnY4IYj8Fq4Tu0j58wCPbYBUIoar1W9LKV95f_M0Xf_c48IbY-s3ttbW-FdD8 Message-ID: Subject: Re: BUG #18354: Aborted transaction aborted during cleanup when temp_file_limit exceeded To: Kyotaro Horiguchi Cc: tndrwang@gmail.com, exclusion@gmail.com, pgsql-bugs@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000054e745065124719a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000054e745065124719a Content-Type: multipart/alternative; boundary="00000000000054e7440651247198" --00000000000054e7440651247198 Content-Type: text/plain; charset="UTF-8" Hi, While running tests with Neon, we discovered an assertion failure that can occur during re-entrant AbortTransaction() calls. The issue arises when an error occurs during AbortTransaction() after ProcArrayEndTransaction() has cleared MyProc->xid. If another error is raised during cleanup (e.g., in AtEOXact_Inval()), the PostgresMain error handler invokes AbortCurrentTransaction() again. The second AbortTransaction() call reads a still-valid s->transactionId (CleanupTransaction() hasn't run yet) and passes it to ProcArrayEndTransaction(), which then hits: Assert(TransactionIdIsValid(proc->xid)) because MyProc->xid was already cleared by the first call. The attached patch fixes this by checking MyProc->xid validity before calling RecordTransactionAbort() and only passing a valid latestXid when appropriate. **Reproduction:** This can be reproduced reliably using the injection_points extension: 1. Attach the injection point: SELECT injection_points_attach('transaction-end-process-inval', 'error'); 2. Create invalidation messages: CREATE TABLE test(id int); 3. Trigger abort: ROLLBACK; Without the fix: assertion crash on ProcArrayEndTransaction() With the fix applied: the script will panic with "ERRORDATA_STACK_SIZE exceeded" due to re-entrant error handling, demonstrating that the assertion is resolved. I've included a reproduction script and the fix that clearly shows both behaviors. **Files attached:** - 0001-xact-Prevent-assertion-failure-in-re-entrant-Abort.patch - repro_minimal_panic_if_fixed.sh Thoughts? Best regards, Alexey > > > > > > > --00000000000054e7440651247198 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable

Hi,

=C2=A0While running = tests with Neon, we discovered an assertion failure that can
=C2=A0occur during re-entrant AbortTransaction() calls.

= =C2=A0The issue arises when an error occurs during AbortTransaction() after=
=C2=A0ProcArrayEndTransaction() has cleared MyProc= ->xid. If another error is raised
=C2=A0during c= leanup (e.g., in AtEOXact_Inval()), the PostgresMain error handler
=C2=A0invokes AbortCurrentTransaction() again. The second A= bortTransaction() call
=C2=A0reads a still-valid s-= >transactionId (CleanupTransaction() hasn't run yet)
=C2=A0and passes it to ProcArrayEndTransaction(), which then hits= :

=C2=A0=C2=A0=C2=A0Assert(TransactionIdIsValid(proc->xid))
=C2=A0because MyProc->xid was already cleared by the first call.
=C2=A0The attached patch fixes this by checking MyProc->xid validity b= efore calling
=C2=A0RecordTransactionAbort() and on= ly passing a valid latestXid when appropriate.

=C2=A0**Reproduction:= **
=C2=A0This can be reproduced reliably using the = injection_points extension:

=C2=A01. Attach the injection point:
=C2=A0=C2=A0=C2=A0SELECT injection_points_attach('= transaction-end-process-inval', 'error');
=C2=A02. Create invalidation messages: CREATE TABLE test(id int);
=C2=A03. Trigger abort: ROLLBACK;

=C2=A0Without th= e fix: assertion crash on ProcArrayEndTransaction()
=C2=A0With the fix applied: the script will panic with "ERRORDATA_STA= CK_SIZE exceeded"
=C2=A0due to re-entrant erro= r handling, demonstrating that the assertion is resolved.

=C2=A0I= 9;ve included a reproduction script and the fix that clearly shows both beh= aviors.

=C2=A0**Files attached:**
=C2=A0- 00= 01-xact-Prevent-assertion-failure-in-re-entrant-Abort.patch
=C2=A0- repro_minimal_panic_if_fixed.sh

=C2=A0Thoughts?
=C2=A0Best regards,
=C2=A0Alexey






--00000000000054e7440651247198-- --00000000000054e745065124719a Content-Type: application/octet-stream; name="0001-xact-Prevent-assertion-failure-in-re-entrant-Abort.patch" Content-Disposition: attachment; filename="0001-xact-Prevent-assertion-failure-in-re-entrant-Abort.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_motz0v3d0 Y29tbWl0IGQwYTg2MmQwOTAxNmIyYzAyODExODIxNjQ0Njg4Y2VlMmMzMzA4OWQKQXV0aG9yOiBB bGV4ZXkgTWFzdGVyb3YgPGFsZXhleS5tYXN0ZXJvdkBkYXRhYnJpY2tzLmNvbT4KRGF0ZTogICBX ZWQgTWF5IDYgMTE6MDE6MzEgMjAyNiArMDIwMAoKICAgIHhhY3Q6IFByZXZlbnQgYXNzZXJ0aW9u IGZhaWx1cmUgaW4gcmUtZW50cmFudCBBYm9ydFRyYW5zYWN0aW9uIGNhbGxzCiAgICAKICAgIFdo ZW4gYW4gZXJyb3Igb2NjdXJzIGR1cmluZyBBYm9ydFRyYW5zYWN0aW9uKCkgYWZ0ZXIgUHJvY0Fy cmF5RW5kVHJhbnNhY3Rpb24oKQogICAgaGFzIGNsZWFyZWQgTXlQcm9jLT54aWQsIHN1YnNlcXVl bnQgYWJvcnQgYXR0ZW1wdHMgY291bGQgcGFzcyBhIHZhbGlkCiAgICBsYXRlc3RYaWQgdG8gUHJv Y0FycmF5RW5kVHJhbnNhY3Rpb24oKSB3aGlsZSBwcm9jLT54aWQgaXMgYWxyZWFkeSBpbnZhbGlk LAogICAgdHJpZ2dlcmluZyBBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQocHJvYy0+eGlkKSku CiAgICAKICAgIEF2b2lkIHRoaXMgYnkgY2hlY2tpbmcgTXlQcm9jLT54aWQgdmFsaWRpdHkgYmVm b3JlIGNhbGxpbmcKICAgIFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoKSBhbmQgb25seSBwYXNzaW5n IGEgdmFsaWQgbGF0ZXN0WGlkIHdoZW4gYXBwcm9wcmlhdGUuCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGFjdC5jCmluZGV4IDQ4YmM5MGM5NjczLi5jNzgxOWQ3ZDlkNCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hhY3QuYwpAQCAtMjk3OSw3ICsyOTc5LDIwIEBAIEFib3J0VHJhbnNhY3Rpb24odm9pZCkK IAkgKiByZWNvcmQuCiAJICovCiAJaWYgKCFpc19wYXJhbGxlbF93b3JrZXIpCi0JCWxhdGVzdFhp ZCA9IFJlY29yZFRyYW5zYWN0aW9uQWJvcnQoZmFsc2UpOworCXsKKwkJLyoKKwkJICogUmUtZW50 cmFudCBhYm9ydDogaWYgYW5vdGhlciBFUlJPUiBpcyByYWlzZWQgZHVyaW5nIEFib3J0VHJhbnNh Y3Rpb24oKQorCQkgKiBhZnRlciBQcm9jQXJyYXlFbmRUcmFuc2FjdGlvbigpIGNsZWFyZWQgb3Vy IGFkdmVydGlzZWQgWElELCBsb2NhbAorCQkgKiB0cmFuc2FjdGlvbiBzdGF0ZSBjYW4gc3RpbGwg cmVwb3J0IGFuIFhJRCB1bnRpbCBDbGVhbnVwVHJhbnNhY3Rpb24oKS4KKwkJICogRG8gbm90IHJ1 biBSZWNvcmRUcmFuc2FjdGlvbkFib3J0IGFnYWluIChkdXBsaWNhdGUgV0FML2Nsb2cpIGFuZCBk bworCQkgKiBub3QgcGFzcyBhIHZhbGlkIGxhdGVzdFhpZCB0byBQcm9jQXJyYXlFbmRUcmFuc2Fj dGlvbiB3aXRoIHByb2MtPnhpZAorCQkgKiBhbHJlYWR5IGNsZWFyZWQuCisJCSAqLworCQlpZiAo VHJhbnNhY3Rpb25JZElzVmFsaWQoTXlQcm9jLT54aWQpKQorCQkJbGF0ZXN0WGlkID0gUmVjb3Jk VHJhbnNhY3Rpb25BYm9ydChmYWxzZSk7CisJCWVsc2UKKwkJCWxhdGVzdFhpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOworCX0KIAllbHNlCiAJewogCQlsYXRlc3RYaWQgPSBJbnZhbGlkVHJhbnNh Y3Rpb25JZDsK --00000000000054e745065124719a Content-Type: text/x-sh; charset="UTF-8"; name="repro_minimal_panic_if_fixed.sh" Content-Disposition: attachment; filename="repro_minimal_panic_if_fixed.sh" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_motz159e1 IyEvdXNyL2Jpbi9lbnYgYmFzaAojCiMgcmVwcm9fbWluaW1hbF9wYW5pY19pZl9maXhlZC5zaCAt LSBNaW5pbWFsIHJlcHJvZHVjdGlvbiB3aXRoIHJhdyBiZWhhdmlvcgojCiMgVGhpcyBzY3JpcHQg ZGVtb25zdHJhdGVzIHRoZSBwdXJlIGRpZmZlcmVuY2UgYmV0d2VlbiBvcmlnaW5hbCBidWcgYW5k IGZpeGVkIHZlcnNpb246CiMgICDigKIgT3JpZ2luYWwgYnVnOiBUUkFQIGFzc2VydGlvbiBmYWls dXJlIChpbW1lZGlhdGUgY3Jhc2gpCiMgICDigKIgQnVnIGZpeGVkOiBQQU5JQyBFUlJPUkRBVEFf U1RBQ0tfU0laRSBleGNlZWRlZCAoaW5maW5pdGUgbG9vcCkKIwojIE5vIG1pdGlnYXRpb24sIG5v IGF1dG8tZGV0YWNoIC0gc2hvd3MgdGhlIHJhdyBiZWhhdmlvciBkaWZmZXJlbmNlLgoKc2V0IC1l dW8gcGlwZWZhaWwKClBTUUw9JHtQU1FMOi1wc3FsfQoKZWNobyAi4pqhIE1pbmltYWwgUmUtZW50 cmFudCBBYm9ydFRyYW5zYWN0aW9uIFJlcHJvZHVjdGlvbiIKZWNobyAiPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IgplY2hvICIiCmVjaG8gIkV4cGVjdGVk IGJlaGF2aW9yOiIKZWNobyAiICDwn5CbIE9yaWdpbmFsIGJ1ZzogVFJBUCBhc3NlcnRpb24gZmFp bHVyZSIKZWNobyAiICDwn5SnIEJ1ZyBmaXhlZDogUEFOSUMgRVJST1JEQVRBX1NUQUNLX1NJWkUg ZXhjZWVkZWQiCmVjaG8gIiIKCiRQU1FMIC1jICJDUkVBVEUgRVhURU5TSU9OIElGIE5PVCBFWElT VFMgaW5qZWN0aW9uX3BvaW50czsiID4vZGV2L251bGwKCmVjaG8gIvCfp6ogRXhlY3V0aW5nIG1p bmltYWwgcmVwcm9kdWN0aW9uIChyYXcgYmVoYXZpb3IpLi4uIgoKJFBTUUwgPDwnU1FMJwpTRUxF Q1QgaW5qZWN0aW9uX3BvaW50c19zZXRfbG9jYWwoKTsKU0VMRUNUIGluamVjdGlvbl9wb2ludHNf YXR0YWNoKCd0cmFuc2FjdGlvbi1lbmQtcHJvY2Vzcy1pbnZhbCcsICdlcnJvcicpOwoKQkVHSU47 CkNSRUFURSBUQUJMRSBfbWluaW1hbF9yZXBybyAoaWQgaW50KTsKUk9MTEJBQ0s7ClNRTAoKZWNo byAi8J+YkCBDbGVhbiBjb21wbGV0aW9uIC0gYnVnIGNvbmRpdGlvbnMgbm90IG1ldCBvciBpbmpl Y3Rpb24gcG9pbnQgZGlkbid0IGZpcmUi --00000000000054e745065124719a--