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 1wV7gt-001hrg-1s for pgpool-hackers@arkaria.postgresql.org; Thu, 04 Jun 2026 13:00:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wV7gs-006ZXi-1J for pgpool-hackers@arkaria.postgresql.org; Thu, 04 Jun 2026 13:00:54 +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 1wV7gs-006ZXa-0N for pgpool-hackers@lists.postgresql.org; Thu, 04 Jun 2026 13:00:54 +0000 Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wV7gq-000000014dT-13j2 for pgpool-hackers@lists.postgresql.org; Thu, 04 Jun 2026 13:00:53 +0000 Received: by mail-pj1-x102d.google.com with SMTP id 98e67ed59e1d1-36da151a152so480614a91.1 for ; Thu, 04 Jun 2026 06:00:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1780578051; cv=none; d=google.com; s=arc-20240605; b=I3amz/6opo4B5s82izPa8tWOz9wpJ59sRSNMKrp0s37evLIW5NQxEQcKtBIx2/t3tt 6yHeuSRtspdoe7AIr7WCrrmaaxHVz0I81eKj0Ps0ocbipqz6PTlY3x/tahOBuizPcPd6 UALLy2DUcTPo7nBSpUXqOr/V6idGsOHJvAL+q2PBE025cZv9FMhXuH4rrE7/R2zJTY4/ SXmvOqMq9y4fRHyyh39NTlc8m3pp0Lxq5wTzEEfPe41cDT3lw0BYcwZni/GZLJgvTZaW QTDuTmUyE1vtc/UHpiVDSr0Z46pYoa/xnpvLKMCesLX7i9rtwpbI7FPIPSLLGXqltsJp IMBg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=to:subject:message-id:date:from:mime-version:dkim-signature; bh=rPfnz8eQWvIKRYcreVisnWcDiF++g8w0gteytlT4VjY=; fh=2jhwfur09QxWKE0iM/zusf3dSNi20nIVx0rRLoSe3Y8=; b=KF0j2rO3e4Y5zRNTocfalHDLBzpMyiOxshfh4MzB7YgcELP19tYs0hkrVeIpRWqb1x jRg+JWNyYTt1jnQgefrj7Hmn1alvf9MWdOdTvQL0HqhJDdq3w9MupWkZvimhuXlm2maf kI/vhEsoGDg5d0NOCsVBG4NCb07xXFxjl642cyYPenHiyg0T2lOXQLzUSGvLliGpQORI 7qOlUUreU6iyH1Q2ql7j3LWY5Gb06fFxNr5WYN5Ir1PyvkwihQQQDJftP56he5et5Wux DgErhOcXIuqbBDkyJTGNYmYLsTAr7gark/BWVr7zMuXfn4MSd5/fkJoTaeMbef1ZO08i 9LNw==; 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=1780578051; x=1781182851; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=rPfnz8eQWvIKRYcreVisnWcDiF++g8w0gteytlT4VjY=; b=WPyce9RaPtPSDvmp2RfKa7Og10gWyaypOdB21lstPFU8AzNpgr+RTlHgZuaLIMEVco KQ9BaR8u1h/MsLby9/JOpwF/nNSYPLsIkMBd+HcssWSnulbGRZvPPNJe5KYnZka3nbkM SgTLAmxlObkzD4jwT/1CB3QU2ChPekAGh1ZdRp31fEIH8dUamMV7KUT+0zMQa/X1umXG 3Cw/ypOlmSD1IlGD7BT4AoYyUHMJ/z+VFt+tBgnnE6MGx2HZ9jv8SUPu6w4dd/oOCwBk N+NsHaqv8iRFb2fmaHbs1RvVirK+pXBZ2atxtJH4REca8i/PK5n9SVcaL5giRTskQxST jqyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1780578051; x=1781182851; h=to:subject:message-id:date:from:mime-version:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=rPfnz8eQWvIKRYcreVisnWcDiF++g8w0gteytlT4VjY=; b=OLlINPZS7RcvbwoSF8I7ruyg1Sn8F/dc0qfrvg30O1K1Aqrr0Tuz+GH02dBm+3X1nM E2UxXZAz3AyU3EDPM+IvIDrW5d8vIbOytCEs7o0q8UkXjBYN9JdYQYAJ2wxdIUUN2OwK f+zfykYCOB/uZ+yNJ5aygCIBV3wQ+k6gj1q8qbKg3CNJVuN1yMz7IIlW8t/NO3S8iCwL JOyu9DDBekckUnJBWDz4RW7PAVxxMXndmIEAtd9YA3MVCi+XpCM2CnIM8A274ZtbDFNg o/J8+fQ5/aNNgkfYhRqT4TZzQOS1D7Upaub8PujbeqoOD6dLM8nJo0InmHSL8orFx+ko 1NvA== X-Gm-Message-State: AOJu0YzjDPd/c5VP2A3yNOobcI0FXx6uzjfepjkza3NZxo7uk+PJ991x bPjqv8rKnkOX4tE0Fro21hsl/jYkQl+PLJ+4Xivi3KBz53l20md1sK3PzCglAr1j6yXOuZ74ITI 8Xn5l3TTE9KIYIG/hv9VJL3g5QohR+sGsN0Y5JZQ= X-Gm-Gg: Acq92OHGcnb7gGyBnHueKsDCjiGhuoPKk5WAXUv+KxrA+l300HRnm4ZdWF6gNEtdepZ +MfErk96+GVds0pwcSl4mcoQiw0lYmZQ9j7WlGmgPEBE3gCXi4JywUv0Zsm3KVPGyP7uCi5hqEZ ZFmR9nDfIvpeHOyuzGDOgOahHJi3IPXdR4u4/0tay3TecWpeOiwgo4NMBlqS6AvR2Dci6AjP+7z BoXGzHFNN0v38wFwM28U29IIZpooZBLGEhLfbQiMBRHGXWjznJoAIarkU2w/UvqvPqIeLGFQoPx AvWvfRPrSk1Pw73w2CebqjBh+6Sgef8kcrWNK3qJVonrRnvNUMYs X-Received: by 2002:a17:90a:b009:b0:36b:98a3:4a85 with SMTP id 98e67ed59e1d1-36e33ba4a42mr5868001a91.27.1780578050750; Thu, 04 Jun 2026 06:00:50 -0700 (PDT) MIME-Version: 1.0 From: Emond Papegaaij Date: Thu, 4 Jun 2026 15:00:38 +0200 X-Gm-Features: AVHnY4LykvT-XslFQ1MXoxFTEiuwaGUwjokIrAhMNuSMlKDQyFdzoome7WS1QF0 Message-ID: Subject: Race condition in pcp_node_info can cause it to hang To: pgpool-hackers@lists.postgresql.org Content-Type: multipart/mixed; boundary="00000000000035d88406536d221f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000035d88406536d221f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, We've hit another very rare flake in our tests, which can cause pcp_node_info to hang indefinitely. I've analyzed the problem with Claude Code, and it came to the conclusion and (quite small) fix below. Attached is a patch against 4.7. The problem: In inform_node_info() (src/pcp_con/pcp_worker.c), the PCP reply packet reads bi->replication_state and bi->replication_sync_state directly from shared memory twice: once via strlen() to compute the packet length, and once via pcp_write() to write the payload. The streaming-replication check worker rewrites those same shared-memory strings without a lock (it clears them to "" then repopulates them every check cycle and on state transitions, src/streaming_replication/pool_worker_child.c). If the string's length changes between the two reads, the declared wsize no longer matches the bytes actually written, so the PCP byte stream desynchronises. The client then blocks forever in pcp_read() waiting for bytes the server never sends. The fix: Snapshot the two strings into local buffers once, right after bi =3D pool_get_node_info(i), and use the locals for both the length and the payload =E2=80=94 so a singl= e packet is always internally consistent. This matches how every other field in the packet is already handled. Best regards, Emond --00000000000035d88406536d221f Content-Type: text/x-patch; charset="US-ASCII"; name="pcp_node_info_hang.patch" Content-Disposition: attachment; filename="pcp_node_info_hang.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mpzi5vp80 ZGlmZiAtLWdpdCBhL3NyYy9wY3BfY29uL3BjcF93b3JrZXIuYyBiL3NyYy9wY3BfY29uL3BjcF93 b3JrZXIuYwppbmRleCA3MmJmNjhkODQuLmEzZWQzNDk0ZCAxMDA2NDQKLS0tIGEvc3JjL3BjcF9j b24vcGNwX3dvcmtlci5jCisrKyBiL3NyYy9wY3BfY29uL3BjcF93b3JrZXIuYwpAQCAtODk2LDYg Kzg5Niw4IEBAIGluZm9ybV9ub2RlX2luZm8oUENQX0NPTk5FQ1RJT04gKmZyb250ZW5kLCBjaGFy ICpidWYpCiAJCQljaGFyCQlzdGFuZGJ5X2RlbGF5X3N0clsyMF07CiAJCQljaGFyCQlzdGFuZGJ5 X2RlbGF5X2J5X3RpbWVfc3RyWzRdOwogCQkJY2hhcgkJc3RhdHVzX2NoYW5nZWRfdGltZV9zdHJb MjBdOworCQkJY2hhcgkJcmVwbF9zdGF0ZVtOQU1FREFUQUxFTl07CisJCQljaGFyCQlyZXBsX3N5 bmNfc3RhdGVbTkFNRURBVEFMRU5dOwogCQkJY2hhcgkJY29kZVtdID0gIk5vZGVJbmZvIjsKIAkJ CUJhY2tlbmRJbmZvICpiaSA9IE5VTEw7CiAJCQlTRVJWRVJfUk9MRSByb2xlOwpAQCAtOTEwLDYg KzkxMiwxNyBAQCBpbmZvcm1fbm9kZV9pbmZvKFBDUF9DT05ORUNUSU9OICpmcm9udGVuZCwgY2hh ciAqYnVmKQogCQkJCQkJKGVycm1zZygiaW5mb3JtaW5nIG5vZGUgaW5mbyBmYWlsZWQiKSwKIAkJ CQkJCSBlcnJkZXRhaWwoImludmFsaWQgbm9kZSBJRCIpKSk7CiAKKwkJCS8qCisJCQkgKiBTbmFw c2hvdCB0aGUgcmVwbGljYXRpb24gc3RhdGUgc3RyaW5ncywgd2hpY2ggdGhlIHNyLWNoZWNrCisJ CQkgKiB3b3JrZXIgcmV3cml0ZXMgbG9jay1mcmVlIGluIHNoYXJlZCBtZW1vcnkuICBUaGV5IGFy ZSB1c2VkCisJCQkgKiBmb3IgYm90aCB0aGUgcGFja2V0IGxlbmd0aCAod3NpemUpIGFuZCB0aGUg cGF5bG9hZCBiZWxvdzsKKwkJCSAqIHJlYWRpbmcgdGhlbSBsaXZlIHR3aWNlIGNvdWxkIG1ha2Ug dGhlIGxlbmd0aCBkaXNhZ3JlZSB3aXRoCisJCQkgKiB0aGUgYnl0ZXMgd3JpdHRlbiBhbmQgZGVz eW5jIHRoZSBQQ1Agc3RyZWFtLCBoYW5naW5nIHRoZQorCQkJICogY2xpZW50LgorCQkJICovCisJ CQlzdHJsY3B5KHJlcGxfc3RhdGUsIGJpLT5yZXBsaWNhdGlvbl9zdGF0ZSwgc2l6ZW9mKHJlcGxf c3RhdGUpKTsKKwkJCXN0cmxjcHkocmVwbF9zeW5jX3N0YXRlLCBiaS0+cmVwbGljYXRpb25fc3lu Y19zdGF0ZSwgc2l6ZW9mKHJlcGxfc3luY19zdGF0ZSkpOworCiAJCQlzbnByaW50Zihwb3J0X3N0 ciwgc2l6ZW9mKHBvcnRfc3RyKSwgIiVkIiwgYmktPmJhY2tlbmRfcG9ydCk7CiAJCQlzbnByaW50 ZihzdGF0dXMsIHNpemVvZihzdGF0dXMpLCAiJWQiLCBiaS0+YmFja2VuZF9zdGF0dXMpOwogCQkJ c25wcmludGYocXVhcmFudGluZSwgc2l6ZW9mKHF1YXJhbnRpbmUpLCAiJWQiLCBiaS0+cXVhcmFu dGluZSk7CkBAIC05NDksOCArOTYyLDggQEAgaW5mb3JtX25vZGVfaW5mbyhQQ1BfQ09OTkVDVElP TiAqZnJvbnRlbmQsIGNoYXIgKmJ1ZikKIAkJCQkJCSAgc3RybGVuKG5vZGVzW2ldLnBnX3JvbGUp ICsgMSArCiAJCQkJCQkgIHN0cmxlbihzdGFuZGJ5X2RlbGF5X2J5X3RpbWVfc3RyKSArIDEgKwog CQkJCQkJICBzdHJsZW4oc3RhbmRieV9kZWxheV9zdHIpICsgMSArCi0JCQkJCQkgIHN0cmxlbihi aS0+cmVwbGljYXRpb25fc3RhdGUpICsgMSArCi0JCQkJCQkgIHN0cmxlbihiaS0+cmVwbGljYXRp b25fc3luY19zdGF0ZSkgKyAxICsKKwkJCQkJCSAgc3RybGVuKHJlcGxfc3RhdGUpICsgMSArCisJ CQkJCQkgIHN0cmxlbihyZXBsX3N5bmNfc3RhdGUpICsgMSArCiAJCQkJCQkgIHN0cmxlbihzdGF0 dXNfY2hhbmdlZF90aW1lX3N0cikgKyAxICsKIAkJCQkJCSAgc2l6ZW9mKGludCkpOwogCQkJcGNw X3dyaXRlKGZyb250ZW5kLCAmd3NpemUsIHNpemVvZihpbnQpKTsKQEAgLTk2NSw4ICs5NzgsOCBA QCBpbmZvcm1fbm9kZV9pbmZvKFBDUF9DT05ORUNUSU9OICpmcm9udGVuZCwgY2hhciAqYnVmKQog CQkJcGNwX3dyaXRlKGZyb250ZW5kLCBub2Rlc1tpXS5wZ19yb2xlLCBzdHJsZW4obm9kZXNbaV0u cGdfcm9sZSkgKyAxKTsKIAkJCXBjcF93cml0ZShmcm9udGVuZCwgc3RhbmRieV9kZWxheV9ieV90 aW1lX3N0ciwgc3RybGVuKHN0YW5kYnlfZGVsYXlfYnlfdGltZV9zdHIpICsgMSk7CiAJCQlwY3Bf d3JpdGUoZnJvbnRlbmQsIHN0YW5kYnlfZGVsYXlfc3RyLCBzdHJsZW4oc3RhbmRieV9kZWxheV9z dHIpICsgMSk7Ci0JCQlwY3Bfd3JpdGUoZnJvbnRlbmQsIGJpLT5yZXBsaWNhdGlvbl9zdGF0ZSwg c3RybGVuKGJpLT5yZXBsaWNhdGlvbl9zdGF0ZSkgKyAxKTsKLQkJCXBjcF93cml0ZShmcm9udGVu ZCwgYmktPnJlcGxpY2F0aW9uX3N5bmNfc3RhdGUsIHN0cmxlbihiaS0+cmVwbGljYXRpb25fc3lu Y19zdGF0ZSkgKyAxKTsKKwkJCXBjcF93cml0ZShmcm9udGVuZCwgcmVwbF9zdGF0ZSwgc3RybGVu KHJlcGxfc3RhdGUpICsgMSk7CisJCQlwY3Bfd3JpdGUoZnJvbnRlbmQsIHJlcGxfc3luY19zdGF0 ZSwgc3RybGVuKHJlcGxfc3luY19zdGF0ZSkgKyAxKTsKIAkJCXBjcF93cml0ZShmcm9udGVuZCwg c3RhdHVzX2NoYW5nZWRfdGltZV9zdHIsIHN0cmxlbihzdGF0dXNfY2hhbmdlZF90aW1lX3N0cikg KyAxKTsKIAkJCWRvX3BjcF9mbHVzaChmcm9udGVuZCk7CiAJCX0K --00000000000035d88406536d221f--