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 1wANmZ-002KPG-18 for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 07:57:03 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wANmX-005vA4-2n for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 07:57:02 +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 1wANmX-005v9w-1s for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 07:57:02 +0000 Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wANmW-00000001BS0-1KIo for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 07:57:01 +0000 Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-66f727d6849so1967539a12.1 for ; Wed, 08 Apr 2026 00:57:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775635019; cv=none; d=google.com; s=arc-20240605; b=iELBZQuWPnkjKLFnCZiQizm4iYzNydRkjqX8WWafCr/aIRtiWzuJFIZ22vFYgWxunT YRtm9kkJMiw+9KKpoIMnDILZ8TuX89az99qLs83PXXICW1dCADNb7kBvEITPFTjue/a5 tG0amzJ0vntuOM2sEacIktF5GuVJvZ5tA2RenU1/Z41pERAOOkycGoCc3FqI7rHomgIu TMrnNIbVpjp+WeMdEW/tbBXJnJ4DdfL2+roc9Bq8JmartxU8S11pVpRJXZId6M8Ne7C2 x4ubkUV8SRQgUk4l6frN8kwKBrKIrk5ZpEDSJVGqFPUfAy6CRIcp27hFjzpiOOM9CSc1 CKBQ== 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=2eDfxJwIJ7svkVZPBH9uAs2Sbe2xVcgT5egT6w5bbH8=; fh=dxJXJbLzq9Nah1LUdsj4QTuQ3JoDScd0wp1YHY64NXM=; b=g5JaP+zjwmm72e/w1fYVvy1kTkgIHMAhzYR3nF+IE9Y8DUDY7gHmZjp/g/+tdO0fud P/aP4yvxeceqr5YhpnJBDc9NfLDqngNxMfhyY3AkjtGOh3A7n2WEubkU7ubQBuX1/0ra 7uISP1IKfsy34kash2Fr48f5vNFpR8X0ZSB+wNAKCSk0fvWTcxhXrKo+8GglHKxS7UPZ ZtAc/tSLqw7tZ3cCeqiQ8cKluliUWuC8gGZ0JyI+f9MnGJooPx/MQgOc8UMJSM5Zg+TU pzPG4tH2EaQaXe45S34lNvxOu3VUPUPvN7Z5fDf0415vlJq6oqNJN2yok4ktGGUXdb1I 2DVQ==; 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=1775635019; x=1776239819; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=2eDfxJwIJ7svkVZPBH9uAs2Sbe2xVcgT5egT6w5bbH8=; b=H8FyQxb5ry6nnS6H67A6HIvYjOQtjMPaG/WQGqOZ4ATQ2yLtEag+cGACwNCKBD7hb8 GJo2LmeNH2epe3gBFyTSBZDQthq4i8VztHDuMwTFisK72lyFuagH2QqwEwsvaPxjYuen prbJpiEM6fxMpVSIQlyNOQKgkggzMc50OswnTnNtsZnL1xKIgG0uGAW7NPewwQ96yBfc IWcPRAL3uFu76hvjgH9Aasu3afiqkhueGXQlqIhFglgoCM70tJATbBXhqHOGPsWNOOpW n6rvts8EnTPHk4xTBASe+PMXmkD9Z/CyWePCrbZqKyV+0wthJcy8sCBOPLNCDvgvFEVe REDw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775635019; x=1776239819; 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=2eDfxJwIJ7svkVZPBH9uAs2Sbe2xVcgT5egT6w5bbH8=; b=NVBNyfIqMHuuKPl2kfYjuERKc9AfaoaQxP+Tqxz0R02XoRwhja5UQwkdtjQma21KzX W5L7/5KJLJmTX+y91E/N3YNacrfUqaY4jXVNLbJu74IojjRMEOXsObKHTM5vtfyYBFcO SEnq2uFN/C+MEnaKCsCi2C6dbAGm9Doh/xoQ8nUOUcv3RrTmWvyJKxhi+uVW5ip0vAoM QZqLROg4vU2iQ3EF7nQkTSn83PlLrPiwTXZ2AMS8qN5JfvzfP87HFWVoXJPxcpWVL2xj kEIe/8XZpCvOSbJDjbcGnkpnG8WjOFOrX1W4xcleadD6Ll++tvxgaqQALwDIJGJ9lwnm FvQQ== X-Gm-Message-State: AOJu0Yw2MWYyL53z7V/hhUV1bkLF5gtZ72R+0FeyE/xQB1Iki1Lfwrcw 3iiIRZnLc51gWTsZ5gzLUa0H2khYa9TQRWa0ck1c/9eFENzm++cxCLmMASGTcFbSCgylqAtMoGH uXzUxvJDoUlr7c2ZjUGFhDWQKGITgDgYN/RovAUU= X-Gm-Gg: AeBDievKzwMrIDV2uldFs0zYIilBfUJjIknptT5j5dCICM1Qt/ljDkQpSEPydKdIuy1 DbFsTT74Dz7XpTYSXsY4Oq9gAZNUbZ9lRdsKUvtlqOE8G0+US8h/Gq63QliBMMuD7oMJb01acsZ qRO4n9qfTvSX+bFw/TPLLOOeyXS9lmYSxuvpGfnrqHWdzAnVDILsMPim8wiF8GaqI0rspqa9w1d wpTf2t3jxAYksCMUOjZk8RfxPzeQNoomE81qIcXIrXfpEy2RAboEvq0LSpOHh+ib6NUd3t8fMMa VpUOjzIb X-Received: by 2002:a17:907:1c9c:b0:b98:411a:1158 with SMTP id a640c23a62f3a-b9c672ae615mr948493766b.5.1775635018483; Wed, 08 Apr 2026 00:56:58 -0700 (PDT) MIME-Version: 1.0 From: Tender Wang Date: Wed, 8 Apr 2026 15:56:46 +0800 X-Gm-Features: AQROBzBF03wd7bheOItIUXJDv83hV91EAAM2cusP4udn8yUNVyrWpJ4KYxIc4pM Message-ID: Subject: Fix "detected double pfree in PgStat Snapshot 0x557d9926b400" error To: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="00000000000087508d064eee3e76" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000087508d064eee3e76 Content-Type: text/plain; charset="UTF-8" Hi, In my recent SQLSmith test on HEAD, I found $SUBJECT. The original query is too large and complex, and after reducing, I found that the following short query can reproduce: psql (19devel) Type "help" for help. postgres=# select NULLIF((SELECT score FROM pg_stat_autovacuum_scores LIMIT 1), (SELECT score FROM pg_stat_autovacuum_scores LIMIT 1)); ERROR: detected double pfree in PgStat Snapshot 0x557d9926b400 Thanks to commit 095555d, this error can be surfaced. Before 095555d, the above query succeeded. I did research on this issue, and I found that after 5891c7a, the PgStat_EntryRef can be cached if stats_fetch_consistency > none. If the value of stats_fetch_consistency is set to none, the query will not report an error. postgres=# set stats_fetch_consistency = none; SET postgres=# select NULLIF((SELECT score FROM pg_stat_autovacuum_scores LIMIT 1), (SELECT score FROM pg_stat_autovacuum_scores LIMIT 1)); nullif -------- (1 row) If stats_fetch_consistency is cache or snapshot, when calling pgstat_fetch_entry(), the PgStat_EntryRef will be inserted into hash-table if it doesn't exist. In relation_needs_vacanalyze(), at the end, the tabentry will be free if it is not null. In this case, we may get the same PgStat_EntryRef entry again from the hash table, but it was pfree when it first appeared. So, detected double pfree will be reported when pfree is called at the end of relation_needs_vacanalyze(). If the pgstat_fetch_consistency > PGSTAT_FETCH_CONSISTENCY_NONE, we should not free the entry. I wrote a patch to fix this issue. Please see the attached patch. -- Thanks, Tender Wang --00000000000087508d064eee3e76 Content-Type: application/octet-stream; name="0001-Fix-double-pfree-for-PgStat_StatTabEntry.patch" Content-Disposition: attachment; filename="0001-Fix-double-pfree-for-PgStat_StatTabEntry.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnpr7d360 RnJvbSA3Zjk5YzY5Mzc0NDU0ODE0NzNjMDg0YmJiYjlhZGQ4YzkxOGQ4ZTAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUZW5kZXIgV2FuZyA8dG5kcndhbmdAZ21haWwuY29tPgpEYXRl OiBXZWQsIDggQXByIDIwMjYgMTU6MTg6MDAgKzA4MDAKU3ViamVjdDogW1BBVENIXSBGaXggZG91 YmxlIHBmcmVlIGZvciBQZ1N0YXRfU3RhdFRhYkVudHJ5CgotLS0KIHNyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5jIHwgNCArKystCiAxIGZpbGUgY2hhbmdlZCwgMyBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRleCBi ZDYyNmExNjM2My4uOWRmODJhNGJiNmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3RtYXN0 ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5j CkBAIC0zMzI3LDcgKzMzMjcsOSBAQCByZWxhdGlvbl9uZWVkc192YWNhbmFseXplKE9pZCByZWxp ZCwKIAkJCSBhbmx0dXBsZXMsIGFubHRocmVzaCwgc2NvcmVzLT5hbmwsCiAJCQkgc2NvcmVzLT54 aWQsIHNjb3Jlcy0+bXhpZCk7CiAKLQlwZnJlZSh0YWJlbnRyeSk7CisJLyogV2UgY2FuIGZyZWUg dGhlIGVudHJ5IGlmIHdlJ3JlIG5vdCBjYWNoaW5nIGl0ICovCisJaWYgKHBnc3RhdF9mZXRjaF9j b25zaXN0ZW5jeSA9PSBQR1NUQVRfRkVUQ0hfQ09OU0lTVEVOQ1lfTk9ORSkKKwkJcGZyZWUodGFi ZW50cnkpOwogfQogCiAvKgotLSAKMi4zNC4xCgo= --00000000000087508d064eee3e76--