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.94.2) (envelope-from ) id 1uRuVx-000bwj-BI for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 15:15:49 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uRuVv-00249y-Ej for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Jun 2025 15:15:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uRuVv-00249n-0Q for pgsql-hackers@lists.postgresql.org; Wed, 18 Jun 2025 15:15:47 +0000 Received: from mail-ej1-x636.google.com ([2a00:1450:4864:20::636]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1uRuVt-002mWD-1H for pgsql-hackers@postgresql.org; Wed, 18 Jun 2025 15:15:47 +0000 Received: by mail-ej1-x636.google.com with SMTP id a640c23a62f3a-ad89333d603so1312246766b.2 for ; Wed, 18 Jun 2025 08:15:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1750259743; x=1750864543; darn=postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=JZx/U13eju8Ae6JbXcRgsuCSeLuoY4H3uQo2JkN1n34=; b=HHe6Bs/S0zwzegZx3nteQckkxhKvc06ON213AQL2I8SfuSaauqytfNnbXCp8QjWfAq SWsRpmqaAnyHV7siNRCTvkQn5WiOuDhFHGDI6hJYUNOz2f9lK5Ti0aXFd1xHafPdgZ4k R58iWB3CEpnvgYr6+mR5lN96tCgLOdR3BESi2tjp2l/PpemU3oieTgEfrdr+OLQEMP/W 47Lu6h9U9Serdzd51itZqotSlwB+4rqeSIgoyE+x68zgeyYMGyCt8suzRvbtK2eDL70Y NJ2m7fPJSOMJWYImejArN+qLBU5xIl3dXDj9fcvV0You5u+F5KeHrdtK8oZ6fS2EVqkI Y79A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1750259743; x=1750864543; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=JZx/U13eju8Ae6JbXcRgsuCSeLuoY4H3uQo2JkN1n34=; b=NYUvi6KF/Rwg9IXTyGwDrZq8fzaeVsJ/hu2DkHRtnDvMDoKx0gsqaz8OtgYH6T0oeA tL0mQdM8XgaRBlD9x6AsJxWDER4MLGeVwhvcY/LsR6rdZ/fSrWDzfE1pf08y+uEHll05 JOGg6qqHMTPMPKvKOSS+iLVKizFVacdwrOvOvMOeLrEPVj7ZJgGwdra9asGK9YrWGL+I qEXsLL4QH8/c0OuZoS4RLv6fQ95tbqx25U/sMGQRKURScvrdVnq8ENN9fgfz4F4+ABy2 a8vuwIVdoi0B79UNs/WntoDsGezlXt6M3sUct43ztu3WVUQkj0sBoy3BS7G5yyfjJ2QI SlyQ== X-Gm-Message-State: AOJu0Yy6WWgGjyM2zIqV8aCL/ntRvGY18ylhRdt72t9NId3ad8IWcIpu W6z+8owypagZk0dhhJXfwGwqsnjmx4bqcroJGfMGHZ3y0QLLIRX3avz4Ul0g1n3JWdXzGhzxb2d Z35TXJj3mVn5iaRpwxIS60FUQsw0AE8wE3jNH X-Gm-Gg: ASbGncsy/aX5l01TqDZ8ZH8NtNYS8xXhrrgdpH106ENHofd4pskVLXhLU/ZjaFJcfkM 2e5slZkF3M4TGPU5sKIFHwPQ7T4cAPolWt3gcubKtZHnhoEFE6YOYt8yrrksNzUYsufXu/SD3W8 Fz9aRGX0WNczAj6cMbjuY4kjR0DejDLsEpEJ+H1HJFx0rCu7JFWr2v X-Google-Smtp-Source: AGHT+IHG19e18w3pAKOSuX1QMV9ooqejtl7VZEWhulyLYi8fniRx3LG4IPxY12gx2IL0uxo4JjjxK41YfzZ/rfHcL7o= X-Received: by 2002:a17:907:d02:b0:ad5:2d77:7ca7 with SMTP id a640c23a62f3a-adfad59066amr1873405266b.43.1750259743069; Wed, 18 Jun 2025 08:15:43 -0700 (PDT) MIME-Version: 1.0 From: shihao zhong Date: Wed, 18 Jun 2025 11:15:31 -0400 X-Gm-Features: Ac12FXzc_0XCPIwB7LqIQrn9Kv6ItbCVlVSkQlCj1fweiRs_pDpeAgTQdLKmdNA Message-ID: Subject: Fixes inconsistent behavior in vacuum when it processes multiple relations To: PostgreSQL-development Content-Type: multipart/mixed; boundary="0000000000004053640637da1a7c" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000004053640637da1a7c Content-Type: text/plain; charset="UTF-8" Hi team, One of our customers recently encountered an issue with PostgreSQL's pg_cron and VACUUM ANALYZE. They had configured a table with vacuum_truncate=false to prevent exclusive lock contention, assuming this would apply globally. However, VACUUM ANALYZE executed across the entire database doesn't honor this table-specific setting, though autovacuum does. I investigated the code and found a small bug with how we're passing the VacuumParams pointer. The call flow is ExecVacuum -> vacuum -> vacuum_rel The initial VaccumParams pointer is set in ExecVacuum In vacuum_rel, this pointer might change because it needs to determine whether to truncate and perform index_cleanup. Vacuuming a single table works as expected because the options are applied at the table level. However, when vacuuming multiple tables, the second table reuses the modified parameters set by the first table's vacuum_rel. We can easy repro that with following SQL and same with index_cleanup: create table test(id int); create table test_1(id int) with (vacuum_truncate=false); insert into test select generate_series(1,1000); insert into test_1 select generate_series(1,1000); delete from test; delete from test_1; vacuum (analyze) test_1, test; postgres=# \dt+ List of relations Schema | Name | Type | Owner | Persistence | Access method | Size | Description --------+--------+-------+----------+-------------+---------------+-------+------------- public | test | table | postgres | permanent | heap | 72 kB | public | test_1 | table | postgres | permanent | heap | 72 kB | (2 rows) I've implemented a fix and included a regression test in the patch. Thanks, Shihao --0000000000004053640637da1a7c Content-Type: application/octet-stream; name="vacuum_tables_options.patch" Content-Disposition: attachment; filename="vacuum_tables_options.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mc23fyxv0 ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdzdGF0dHVwbGUvZXhwZWN0ZWQvcGdzdGF0dHVwbGUub3V0 IGIvY29udHJpYi9wZ3N0YXR0dXBsZS9leHBlY3RlZC9wZ3N0YXR0dXBsZS5vdXQKaW5kZXggOTE3 NmRjOThiNmEuLjY0NmM4YzExZTZlIDEwMDY0NAotLS0gYS9jb250cmliL3Bnc3RhdHR1cGxlL2V4 cGVjdGVkL3Bnc3RhdHR1cGxlLm91dAorKysgYi9jb250cmliL3Bnc3RhdHR1cGxlL2V4cGVjdGVk L3Bnc3RhdHR1cGxlLm91dApAQCAtMzAzLDMgKzMwMywxOSBAQCBkcm9wIHZpZXcgdGVzdF92aWV3 OwogZHJvcCBmb3JlaWduIHRhYmxlIHRlc3RfZm9yZWlnbl90YWJsZTsKIGRyb3Agc2VydmVyIGR1 bW15X3NlcnZlcjsKIGRyb3AgZm9yZWlnbiBkYXRhIHdyYXBwZXIgZHVtbXk7CistLSBJTkRFWF9D TEVBTlVQIG9wdGlvbiB3aXRoIHZhY3V1bSBtb3JlIHRoYW4gMSByZWxhdGlvbgorQ1JFQVRFIFRB QkxFIHZhY19pbmRleF9jbGVhbnVwX29uKGkgSU5UIFBSSU1BUlkgS0VZKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQ9ZmFsc2UsIHZhY3V1bV9pbmRleF9jbGVhbnVwPXRydWUpOworSU5TRVJUIElO VE8gdmFjX2luZGV4X2NsZWFudXBfb24gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsK K0NSRUFURSBUQUJMRSB2YWNfaW5kZXhfY2xlYW51cF9vZmYoaSBJTlQgUFJJTUFSWSBLRVkpIFdJ VEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX2luZGV4X2NsZWFudXA9ZmFsc2Up OworSU5TRVJUIElOVE8gdmFjX2luZGV4X2NsZWFudXBfb2ZmIFNFTEVDVCBnZW5lcmF0ZV9zZXJp ZXMoMSwgMTAwMCk7CitERUxFVEUgRlJPTSB2YWNfaW5kZXhfY2xlYW51cF9vbjsKK0RFTEVURSBG Uk9NIHZhY19pbmRleF9jbGVhbnVwX29mZjsKK1ZBQ1VVTSAoQU5BTFlaRSkgdmFjX2luZGV4X2Ns ZWFudXBfb24sIHZhY19pbmRleF9jbGVhbnVwX29mZjsKK1NFTEVDVCBkZWxldGVkX3BhZ2VzID0g MCBGUk9NIHBnc3RhdGluZGV4KCd2YWNfaW5kZXhfY2xlYW51cF9vZmZfcGtleScpOworID9jb2x1 bW4/IAorLS0tLS0tLS0tLQorIHQKKygxIHJvdykKKworRFJPUCBUQUJMRSB2YWNfaW5kZXhfY2xl YW51cF9vbjsKK0RST1AgVEFCTEUgdmFjX2luZGV4X2NsZWFudXBfb2ZmOwpkaWZmIC0tZ2l0IGEv Y29udHJpYi9wZ3N0YXR0dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsIGIvY29udHJpYi9wZ3N0YXR0 dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsCmluZGV4IDdlNzJjNTY3YTA2Li42NjAyODBlZTI0NyAx MDA2NDQKLS0tIGEvY29udHJpYi9wZ3N0YXR0dXBsZS9zcWwvcGdzdGF0dHVwbGUuc3FsCisrKyBi L2NvbnRyaWIvcGdzdGF0dHVwbGUvc3FsL3Bnc3RhdHR1cGxlLnNxbApAQCAtMTM2LDMgKzEzNiwx NSBAQCBkcm9wIHZpZXcgdGVzdF92aWV3OwogZHJvcCBmb3JlaWduIHRhYmxlIHRlc3RfZm9yZWln bl90YWJsZTsKIGRyb3Agc2VydmVyIGR1bW15X3NlcnZlcjsKIGRyb3AgZm9yZWlnbiBkYXRhIHdy YXBwZXIgZHVtbXk7CisKKy0tIElOREVYX0NMRUFOVVAgb3B0aW9uIHdpdGggdmFjdXVtIG1vcmUg dGhhbiAxIHJlbGF0aW9uCitDUkVBVEUgVEFCTEUgdmFjX2luZGV4X2NsZWFudXBfb24oaSBJTlQg UFJJTUFSWSBLRVkpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX2luZGV4 X2NsZWFudXA9dHJ1ZSk7CitJTlNFUlQgSU5UTyB2YWNfaW5kZXhfY2xlYW51cF9vbiBTRUxFQ1Qg Z2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApOworQ1JFQVRFIFRBQkxFIHZhY19pbmRleF9jbGVhbnVw X29mZihpIElOVCBQUklNQVJZIEtFWSkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLCB2 YWN1dW1faW5kZXhfY2xlYW51cD1mYWxzZSk7CitJTlNFUlQgSU5UTyB2YWNfaW5kZXhfY2xlYW51 cF9vZmYgU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAxMDAwKTsKK0RFTEVURSBGUk9NIHZhY19p bmRleF9jbGVhbnVwX29uOworREVMRVRFIEZST00gdmFjX2luZGV4X2NsZWFudXBfb2ZmOworVkFD VVVNIChBTkFMWVpFKSB2YWNfaW5kZXhfY2xlYW51cF9vbiwgdmFjX2luZGV4X2NsZWFudXBfb2Zm OworU0VMRUNUIGRlbGV0ZWRfcGFnZXMgPSAwIEZST00gcGdzdGF0aW5kZXgoJ3ZhY19pbmRleF9j bGVhbnVwX29mZl9wa2V5Jyk7CitEUk9QIFRBQkxFIHZhY19pbmRleF9jbGVhbnVwX29uOworRFJP UCBUQUJMRSB2YWNfaW5kZXhfY2xlYW51cF9vZmY7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCmluZGV4IDMz YTMzYmY2YjFjLi4xMTI4ZGZiNzk4NSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMv dmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKQEAgLTEyMyw3ICsx MjMsNyBAQCBzdGF0aWMgdm9pZCB2YWNfdHJ1bmNhdGVfY2xvZyhUcmFuc2FjdGlvbklkIGZyb3pl blhJRCwKIAkJCQkJCQkgIE11bHRpWGFjdElkIG1pbk11bHRpLAogCQkJCQkJCSAgVHJhbnNhY3Rp b25JZCBsYXN0U2FuZUZyb3plblhpZCwKIAkJCQkJCQkgIE11bHRpWGFjdElkIGxhc3RTYW5lTWlu TXVsdGkpOwotc3RhdGljIGJvb2wgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxh dGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCitzdGF0aWMgYm9vbCB2YWN1dW1fcmVsKE9pZCBy ZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCQkJCQkgICBC dWZmZXJBY2Nlc3NTdHJhdGVneSBic3RyYXRlZ3kpOwogc3RhdGljIGRvdWJsZSBjb21wdXRlX3Bh cmFsbGVsX2RlbGF5KHZvaWQpOwogc3RhdGljIFZhY09wdFZhbHVlIGdldF92YWNvcHR2YWxfZnJv bV9ib29sZWFuKERlZkVsZW0gKmRlZik7CkBAIC02MzQsNyArNjM0LDcgQEAgdmFjdXVtKExpc3Qg KnJlbGF0aW9ucywgVmFjdXVtUGFyYW1zICpwYXJhbXMsIEJ1ZmZlckFjY2Vzc1N0cmF0ZWd5IGJz dHJhdGVneSwKIAogCQkJaWYgKHBhcmFtcy0+b3B0aW9ucyAmIFZBQ09QVF9WQUNVVU0pCiAJCQl7 Ci0JCQkJaWYgKCF2YWN1dW1fcmVsKHZyZWwtPm9pZCwgdnJlbC0+cmVsYXRpb24sIHBhcmFtcywg YnN0cmF0ZWd5KSkKKwkJCQlpZiAoIXZhY3V1bV9yZWwodnJlbC0+b2lkLCB2cmVsLT5yZWxhdGlv biwgKnBhcmFtcywgYnN0cmF0ZWd5KSkKIAkJCQkJY29udGludWU7CiAJCQl9CiAKQEAgLTE5OTcs NyArMTk5Nyw3IEBAIHZhY190cnVuY2F0ZV9jbG9nKFRyYW5zYWN0aW9uSWQgZnJvemVuWElELAog ICoJCUF0IGVudHJ5IGFuZCBleGl0LCB3ZSBhcmUgbm90IGluc2lkZSBhIHRyYW5zYWN0aW9uLgog ICovCiBzdGF0aWMgYm9vbAotdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxhdGlv biwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCit2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIg KnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgcGFyYW1zLAogCQkgICBCdWZmZXJBY2Nlc3NTdHJhdGVn eSBic3RyYXRlZ3kpCiB7CiAJTE9DS01PREUJbG1vZGU7CkBAIC0yMDA5LDEyICsyMDA5LDEwIEBA IHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAq cGFyYW1zLAogCWludAkJCXNhdmVfc2VjX2NvbnRleHQ7CiAJaW50CQkJc2F2ZV9uZXN0bGV2ZWw7 CiAKLQlBc3NlcnQocGFyYW1zICE9IE5VTEwpOwotCiAJLyogQmVnaW4gYSB0cmFuc2FjdGlvbiBm b3IgdmFjdXVtaW5nIHRoaXMgcmVsYXRpb24gKi8KIAlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgp OwogCi0JaWYgKCEocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX0ZVTEwpKQorCWlmICghKHBhcmFt cy5vcHRpb25zICYgVkFDT1BUX0ZVTEwpKQogCXsKIAkJLyoKIAkJICogSW4gbGF6eSB2YWN1dW0s IHdlIGNhbiBzZXQgdGhlIFBST0NfSU5fVkFDVVVNIGZsYWcsIHdoaWNoIGxldHMKQEAgLTIwNDAs NyArMjAzOCw3IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZh Y3V1bVBhcmFtcyAqcGFyYW1zLAogCQkgKi8KIAkJTFdMb2NrQWNxdWlyZShQcm9jQXJyYXlMb2Nr LCBMV19FWENMVVNJVkUpOwogCQlNeVByb2MtPnN0YXR1c0ZsYWdzIHw9IFBST0NfSU5fVkFDVVVN OwotCQlpZiAocGFyYW1zLT5pc193cmFwYXJvdW5kKQorCQlpZiAocGFyYW1zLmlzX3dyYXBhcm91 bmQpCiAJCQlNeVByb2MtPnN0YXR1c0ZsYWdzIHw9IFBST0NfVkFDVVVNX0ZPUl9XUkFQQVJPVU5E OwogCQlQcm9jR2xvYmFsLT5zdGF0dXNGbGFnc1tNeVByb2MtPnBneGFjdG9mZl0gPSBNeVByb2Mt PnN0YXR1c0ZsYWdzOwogCQlMV0xvY2tSZWxlYXNlKFByb2NBcnJheUxvY2spOwpAQCAtMjA2NCwx MiArMjA2MiwxMiBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VWYXIgKnJlbGF0aW9uLCBW YWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKiB2YWN1dW0sIGJ1dCBqdXN0IFNoYXJlVXBkYXRlRXhj bHVzaXZlTG9jayBmb3IgY29uY3VycmVudCB2YWN1dW0uIEVpdGhlcgogCSAqIHdheSwgd2UgY2Fu IGJlIHN1cmUgdGhhdCBubyBvdGhlciBiYWNrZW5kIGlzIHZhY3V1bWluZyB0aGUgc2FtZSB0YWJs ZS4KIAkgKi8KLQlsbW9kZSA9IChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfRlVMTCkgPworCWxt b2RlID0gKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX0ZVTEwpID8KIAkJQWNjZXNzRXhjbHVzaXZl TG9jayA6IFNoYXJlVXBkYXRlRXhjbHVzaXZlTG9jazsKIAogCS8qIG9wZW4gdGhlIHJlbGF0aW9u IGFuZCBnZXQgdGhlIGFwcHJvcHJpYXRlIGxvY2sgb24gaXQgKi8KLQlyZWwgPSB2YWN1dW1fb3Bl bl9yZWxhdGlvbihyZWxpZCwgcmVsYXRpb24sIHBhcmFtcy0+b3B0aW9ucywKLQkJCQkJCQkgICBw YXJhbXMtPmxvZ19taW5fZHVyYXRpb24gPj0gMCwgbG1vZGUpOworCXJlbCA9IHZhY3V1bV9vcGVu X3JlbGF0aW9uKHJlbGlkLCByZWxhdGlvbiwgcGFyYW1zLm9wdGlvbnMsCisJCQkJCQkJICAgcGFy YW1zLmxvZ19taW5fZHVyYXRpb24gPj0gMCwgbG1vZGUpOwogCiAJLyogbGVhdmUgaWYgcmVsYXRp b24gY291bGQgbm90IGJlIG9wZW5lZCBvciBsb2NrZWQgKi8KIAlpZiAoIXJlbCkKQEAgLTIwODQs OCArMjA4Miw4IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZh Y3V1bVBhcmFtcyAqcGFyYW1zLAogCSAqIFRoaXMgaXMgb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ug d2UgaG9sZCBhIHNlc3Npb24gbG9jayBvbiB0aGUgbWFpbgogCSAqIHJlbGF0aW9uIHRoYXQgcHJl dmVudHMgY29uY3VycmVudCBkZWxldGlvbi4KIAkgKi8KLQlpZiAoT2lkSXNWYWxpZChwYXJhbXMt PnRvYXN0X3BhcmVudCkpCi0JCXByaXZfcmVsaWQgPSBwYXJhbXMtPnRvYXN0X3BhcmVudDsKKwlp ZiAoT2lkSXNWYWxpZChwYXJhbXMudG9hc3RfcGFyZW50KSkKKwkJcHJpdl9yZWxpZCA9IHBhcmFt cy50b2FzdF9wYXJlbnQ7CiAJZWxzZQogCQlwcml2X3JlbGlkID0gUmVsYXRpb25HZXRSZWxpZChy ZWwpOwogCkBAIC0yMDk4LDcgKzIwOTYsNyBAQCB2YWN1dW1fcmVsKE9pZCByZWxpZCwgUmFuZ2VW YXIgKnJlbGF0aW9uLCBWYWN1dW1QYXJhbXMgKnBhcmFtcywKIAkgKi8KIAlpZiAoIXZhY3V1bV9p c19wZXJtaXR0ZWRfZm9yX3JlbGF0aW9uKHByaXZfcmVsaWQsCiAJCQkJCQkJCQkJICByZWwtPnJk X3JlbCwKLQkJCQkJCQkJCQkgIHBhcmFtcy0+b3B0aW9ucyAmIH5WQUNPUFRfQU5BTFlaRSkpCisJ CQkJCQkJCQkJICBwYXJhbXMub3B0aW9ucyAmIH5WQUNPUFRfQU5BTFlaRSkpCiAJewogCQlyZWxh dGlvbl9jbG9zZShyZWwsIGxtb2RlKTsKIAkJUG9wQWN0aXZlU25hcHNob3QoKTsKQEAgLTIxNjks NyArMjE2Nyw3IEBAIHZhY3V1bV9yZWwoT2lkIHJlbGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZh Y3V1bVBhcmFtcyAqcGFyYW1zLAogCSAqIFNldCBpbmRleF9jbGVhbnVwIG9wdGlvbiBiYXNlZCBv biBpbmRleF9jbGVhbnVwIHJlbG9wdGlvbiBpZiBpdCB3YXNuJ3QKIAkgKiBzcGVjaWZpZWQgaW4g VkFDVVVNIGNvbW1hbmQsIG9yIHdoZW4gcnVubmluZyBpbiBhbiBhdXRvdmFjdXVtIHdvcmtlcgog CSAqLwotCWlmIChwYXJhbXMtPmluZGV4X2NsZWFudXAgPT0gVkFDT1BUVkFMVUVfVU5TUEVDSUZJ RUQpCisJaWYgKHBhcmFtcy5pbmRleF9jbGVhbnVwID09IFZBQ09QVFZBTFVFX1VOU1BFQ0lGSUVE KQogCXsKIAkJU3RkUmRPcHRJbmRleENsZWFudXAgdmFjdXVtX2luZGV4X2NsZWFudXA7CiAKQEAg LTIxODAsMTQgKzIxNzgsMTQgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFyICpyZWxh dGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCQkJKChTdGRSZE9wdGlvbnMgKikgcmVsLT5y ZF9vcHRpb25zKS0+dmFjdXVtX2luZGV4X2NsZWFudXA7CiAKIAkJaWYgKHZhY3V1bV9pbmRleF9j bGVhbnVwID09IFNURFJEX09QVElPTl9WQUNVVU1fSU5ERVhfQ0xFQU5VUF9BVVRPKQotCQkJcGFy YW1zLT5pbmRleF9jbGVhbnVwID0gVkFDT1BUVkFMVUVfQVVUTzsKKwkJCXBhcmFtcy5pbmRleF9j bGVhbnVwID0gVkFDT1BUVkFMVUVfQVVUTzsKIAkJZWxzZSBpZiAodmFjdXVtX2luZGV4X2NsZWFu dXAgPT0gU1REUkRfT1BUSU9OX1ZBQ1VVTV9JTkRFWF9DTEVBTlVQX09OKQotCQkJcGFyYW1zLT5p bmRleF9jbGVhbnVwID0gVkFDT1BUVkFMVUVfRU5BQkxFRDsKKwkJCXBhcmFtcy5pbmRleF9jbGVh bnVwID0gVkFDT1BUVkFMVUVfRU5BQkxFRDsKIAkJZWxzZQogCQl7CiAJCQlBc3NlcnQodmFjdXVt X2luZGV4X2NsZWFudXAgPT0KIAkJCQkgICBTVERSRF9PUFRJT05fVkFDVVVNX0lOREVYX0NMRUFO VVBfT0ZGKTsKLQkJCXBhcmFtcy0+aW5kZXhfY2xlYW51cCA9IFZBQ09QVFZBTFVFX0RJU0FCTEVE OworCQkJcGFyYW1zLmluZGV4X2NsZWFudXAgPSBWQUNPUFRWQUxVRV9ESVNBQkxFRDsKIAkJfQog CX0KIApAQCAtMjIyNyw5ICsyMjI1LDkgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJhbmdlVmFy ICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJICogYXV0b21hdGljYWxseSByZWJ1 aWx0IGJ5IGNsdXN0ZXJfcmVsIHNvIHdlIHNob3VsZG4ndCByZWN1cnNlIHRvIGl0LAogCSAqIHVu bGVzcyBQUk9DRVNTX01BSU4gaXMgZGlzYWJsZWQuCiAJICovCi0JaWYgKChwYXJhbXMtPm9wdGlv bnMgJiBWQUNPUFRfUFJPQ0VTU19UT0FTVCkgIT0gMCAmJgotCQkoKHBhcmFtcy0+b3B0aW9ucyAm IFZBQ09QVF9GVUxMKSA9PSAwIHx8Ci0JCSAocGFyYW1zLT5vcHRpb25zICYgVkFDT1BUX1BST0NF U1NfTUFJTikgPT0gMCkpCisJaWYgKChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9QUk9DRVNTX1RP QVNUKSAhPSAwICYmCisJCSgocGFyYW1zLm9wdGlvbnMgJiBWQUNPUFRfRlVMTCkgPT0gMCB8fAor CQkgKHBhcmFtcy5vcHRpb25zICYgVkFDT1BUX1BST0NFU1NfTUFJTikgPT0gMCkpCiAJCXRvYXN0 X3JlbGlkID0gcmVsLT5yZF9yZWwtPnJlbHRvYXN0cmVsaWQ7CiAJZWxzZQogCQl0b2FzdF9yZWxp ZCA9IEludmFsaWRPaWQ7CkBAIC0yMjUyLDEyICsyMjUwLDEyIEBAIHZhY3V1bV9yZWwoT2lkIHJl bGlkLCBSYW5nZVZhciAqcmVsYXRpb24sIFZhY3V1bVBhcmFtcyAqcGFyYW1zLAogCSAqIHRhYmxl IGlzIHJlcXVpcmVkIChlLmcuLCBQUk9DRVNTX1RPQVNUIGlzIHNldCksIHdlIGZvcmNlIFBST0NF U1NfTUFJTgogCSAqIHRvIGJlIHNldCB3aGVuIHdlIHJlY3Vyc2UgdG8gdGhlIFRPQVNUIHRhYmxl LgogCSAqLwotCWlmIChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfUFJPQ0VTU19NQUlOKQorCWlm IChwYXJhbXMub3B0aW9ucyAmIFZBQ09QVF9QUk9DRVNTX01BSU4pCiAJewogCQkvKgogCQkgKiBE byB0aGUgYWN0dWFsIHdvcmsgLS0tIGVpdGhlciBGVUxMIG9yICJsYXp5IiB2YWN1dW0KIAkJICov Ci0JCWlmIChwYXJhbXMtPm9wdGlvbnMgJiBWQUNPUFRfRlVMTCkKKwkJaWYgKHBhcmFtcy5vcHRp b25zICYgVkFDT1BUX0ZVTEwpCiAJCXsKIAkJCUNsdXN0ZXJQYXJhbXMgY2x1c3Rlcl9wYXJhbXMg PSB7MH07CiAKQEAgLTIzMDcsMTEgKzIzMDUsMTEgQEAgdmFjdXVtX3JlbChPaWQgcmVsaWQsIFJh bmdlVmFyICpyZWxhdGlvbiwgVmFjdXVtUGFyYW1zICpwYXJhbXMsCiAJCSAqIHJlbGF0aW9uLiAg TkI6IFRoaXMgaXMgb25seSBzYWZlIHRvIGRvIGJlY2F1c2Ugd2UgaG9sZCBhIHNlc3Npb24KIAkJ ICogbG9jayBvbiB0aGUgbWFpbiByZWxhdGlvbiB0aGF0IHByZXZlbnRzIGNvbmN1cnJlbnQgZGVs ZXRpb24uCiAJCSAqLwotCQltZW1jcHkoJnRvYXN0X3ZhY3V1bV9wYXJhbXMsIHBhcmFtcywgc2l6 ZW9mKFZhY3V1bVBhcmFtcykpOworCQltZW1jcHkoJnRvYXN0X3ZhY3V1bV9wYXJhbXMsICZwYXJh bXMsIHNpemVvZihWYWN1dW1QYXJhbXMpKTsKIAkJdG9hc3RfdmFjdXVtX3BhcmFtcy5vcHRpb25z IHw9IFZBQ09QVF9QUk9DRVNTX01BSU47CiAJCXRvYXN0X3ZhY3V1bV9wYXJhbXMudG9hc3RfcGFy ZW50ID0gcmVsaWQ7CiAKLQkJdmFjdXVtX3JlbCh0b2FzdF9yZWxpZCwgTlVMTCwgJnRvYXN0X3Zh Y3V1bV9wYXJhbXMsIGJzdHJhdGVneSk7CisJCXZhY3V1bV9yZWwodG9hc3RfcmVsaWQsIE5VTEws IHRvYXN0X3ZhY3V1bV9wYXJhbXMsIGJzdHJhdGVneSk7CiAJfQogCiAJLyoKZGlmZiAtLWdpdCBh L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdmFjdXVtLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvdmFjdXVtLm91dAppbmRleCAwYWJjYzk5OTg5ZS4uMjg0YjUzOTFiNDggMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvdmFjdXVtLm91dAorKysgYi9zcmMvdGVz dC9yZWdyZXNzL2V4cGVjdGVkL3ZhY3V1bS5vdXQKQEAgLTY4NiwzICs2ODYsMzEgQEAgUkVTRVQg Uk9MRTsKIERST1AgVEFCTEUgdmFjb3duZWQ7CiBEUk9QIFRBQkxFIHZhY293bmVkX3BhcnRlZDsK IERST1AgUk9MRSByZWdyZXNzX3ZhY3V1bTsKKy0tIFRSVU5DQVRFIG9wdGlvbiB3aXRoIHZhY3V1 bSBtb3JlIHRoYW4gMSByZWxhdGlvbgorQ1JFQVRFIFRBQkxFIHZhY190cnVuY2F0ZV9vbihpIElO VCkgV0lUSCAoYXV0b3ZhY3V1bV9lbmFibGVkPWZhbHNlLCB2YWN1dW1fdHJ1bmNhdGU9dHJ1ZSk7 CitJTlNFUlQgSU5UTyB2YWNfdHJ1bmNhdGVfb24gU0VMRUNUIGdlbmVyYXRlX3NlcmllcygxLCAx MDAwKTsKK0NSRUFURSBUQUJMRSB2YWNfdHJ1bmNhdGVfb2ZmKGkgSU5UKSBXSVRIIChhdXRvdmFj dXVtX2VuYWJsZWQ9ZmFsc2UsIHZhY3V1bV90cnVuY2F0ZT1mYWxzZSk7CitJTlNFUlQgSU5UTyB2 YWNfdHJ1bmNhdGVfb2ZmIFNFTEVDVCBnZW5lcmF0ZV9zZXJpZXMoMSwgMTAwMCk7CitTRUxFQ1Qg cGdfcmVsYXRpb25fc2l6ZSgndmFjX3RydW5jYXRlX29uJykgPiAwOworID9jb2x1bW4/IAorLS0t LS0tLS0tLQorIHQKKygxIHJvdykKKworU0VMRUNUIHBnX3JlbGF0aW9uX3NpemUoJ3ZhY190cnVu Y2F0ZV9vZmYnKSA+IDA7CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgdAorKDEgcm93KQorCitE RUxFVEUgRlJPTSB2YWNfdHJ1bmNhdGVfb247CitERUxFVEUgRlJPTSB2YWNfdHJ1bmNhdGVfb2Zm OworVkFDVVVNIChBTkFMWVpFKSB2YWNfdHJ1bmNhdGVfb24sIHZhY190cnVuY2F0ZV9vZmY7CitT RUxFQ1QgcGdfcmVsYXRpb25fc2l6ZSgndmFjX3RydW5jYXRlX29mZicpID4gMDsKKyA/Y29sdW1u PyAKKy0tLS0tLS0tLS0KKyB0CisoMSByb3cpCisKK0RST1AgVEFCTEUgdmFjX3RydW5jYXRlX29u OworRFJPUCBUQUJMRSB2YWNfdHJ1bmNhdGVfb2ZmOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9zcWwvdmFjdXVtLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwKaW5k ZXggYTcyYmRiNWI2MTkuLjk1MzMwYTVkNDRhIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L3NxbC92YWN1dW0uc3FsCisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3ZhY3V1bS5zcWwKQEAg LTQ5NSwzICs0OTUsMTcgQEAgUkVTRVQgUk9MRTsKIERST1AgVEFCTEUgdmFjb3duZWQ7CiBEUk9Q IFRBQkxFIHZhY293bmVkX3BhcnRlZDsKIERST1AgUk9MRSByZWdyZXNzX3ZhY3V1bTsKKworLS0g VFJVTkNBVEUgb3B0aW9uIHdpdGggdmFjdXVtIG1vcmUgdGhhbiAxIHJlbGF0aW9uCitDUkVBVEUg VEFCTEUgdmFjX3RydW5jYXRlX29uKGkgSU5UKSBXSVRIIChhdXRvdmFjdXVtX2VuYWJsZWQ9ZmFs c2UsIHZhY3V1bV90cnVuY2F0ZT10cnVlKTsKK0lOU0VSVCBJTlRPIHZhY190cnVuY2F0ZV9vbiBT RUxFQ1QgZ2VuZXJhdGVfc2VyaWVzKDEsIDEwMDApOworQ1JFQVRFIFRBQkxFIHZhY190cnVuY2F0 ZV9vZmYoaSBJTlQpIFdJVEggKGF1dG92YWN1dW1fZW5hYmxlZD1mYWxzZSwgdmFjdXVtX3RydW5j YXRlPWZhbHNlKTsKK0lOU0VSVCBJTlRPIHZhY190cnVuY2F0ZV9vZmYgU0VMRUNUIGdlbmVyYXRl X3NlcmllcygxLCAxMDAwKTsKK1NFTEVDVCBwZ19yZWxhdGlvbl9zaXplKCd2YWNfdHJ1bmNhdGVf b24nKSA+IDA7CitTRUxFQ1QgcGdfcmVsYXRpb25fc2l6ZSgndmFjX3RydW5jYXRlX29mZicpID4g MDsKK0RFTEVURSBGUk9NIHZhY190cnVuY2F0ZV9vbjsKK0RFTEVURSBGUk9NIHZhY190cnVuY2F0 ZV9vZmY7CitWQUNVVU0gKEFOQUxZWkUpIHZhY190cnVuY2F0ZV9vbiwgdmFjX3RydW5jYXRlX29m ZjsKK1NFTEVDVCBwZ19yZWxhdGlvbl9zaXplKCd2YWNfdHJ1bmNhdGVfb2ZmJykgPiAwOworRFJP UCBUQUJMRSB2YWNfdHJ1bmNhdGVfb247CitEUk9QIFRBQkxFIHZhY190cnVuY2F0ZV9vZmY7Cg== --0000000000004053640637da1a7c--