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 1wAcgz-0009CI-1G for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 23:52:18 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wAcgx-002fHE-1a for pgsql-hackers@arkaria.postgresql.org; Wed, 08 Apr 2026 23:52:16 +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.96) (envelope-from ) id 1wAcgx-002fH4-0R for pgsql-hackers@lists.postgresql.org; Wed, 08 Apr 2026 23:52:16 +0000 Received: from mail-ed1-x52c.google.com ([2a00:1450:4864:20::52c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wAcgw-000000005NY-06TI for pgsql-hackers@postgresql.org; Wed, 08 Apr 2026 23:52:15 +0000 Received: by mail-ed1-x52c.google.com with SMTP id 4fb4d7f45d1cf-66d65646c65so553670a12.1 for ; Wed, 08 Apr 2026 16:52:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775692332; cv=none; d=google.com; s=arc-20240605; b=OWRTNUGqvus5oenmRqe/pkASV0zIW0f6o+fH4JoLZ8/3HrE2zCFikTAaHI6u17ckOW rzDLeArccX13oxIxdZkKiEVtAlk4XFBedg7hngw79jc2qoVtr+j11LhMudcEHprsxf9j KpSCSTtgjDZWMIC5pYqVLQtq73YpcgjAyZdSfx2romrsCj/rTwJ/HGhKeH+Oah1UH6gY DZSH4DMgBePlKOF//d9WExakguLyPNfGJY4lXCOV8xPdOr8gfmExtFVcQYOtWzaHD+LY BWg9Ud1PIYkBXltc3PAXDKQqkasKMJyZkloNFxNlGHo0zPFwlSBX5U++uJAQgEcgIzXY fn9w== 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=NdExj8NrGH1ZBAAOiIP5OaheEHhnlVSpShjAwGSzw/Q=; fh=K2Pya4dh6kLK71UCJz7d8uXLKtUaINfC92FcQ1A4Adc=; b=PpTri1/30iWVInbaj9ZQz7jS/3D72uWSOiDVm99Vtt//ATkxQg/E80qxQXkxrVN0j2 ezpJNOLYPyr/f7bLBAXCIzGKEVtnpv5mtc3MdnyWUItwazpXJguaCLxDuUIbcY+mUP/D nevT8H+JVEwm4nEOICAxBMkz0N1R370xzAIH8Vaf8CKOtPCkWM+h+pB+j4ulM359K03I 4KItKUtRXgu7phWKZyahkUUnMiAI87XR8a6R34WMWZM1jcUEcYe3MtYGBtmS+pX6c61f 1vxtSLX1kmg/bdGx/ETSCXZela/pM+d3VXmBEPSjUOmmmRz9jtzaaE8C2eNN5P2qg+Zh malA==; darn=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=1775692332; x=1776297132; darn=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=NdExj8NrGH1ZBAAOiIP5OaheEHhnlVSpShjAwGSzw/Q=; b=QbfY5Ydv+XNkj7UXGFuC5zQdIozTnWBDWvKMOyFy6BdmD4zDAl3c8kIYLvOb/1pKb7 BOWvMPItdqqLE6fRv+BchBwN/4zVknnxopgsj5mXlNkHYcsEqNUD+XxIOYpohvtaP9AP vEonG0Z7UFtTrE0zqzmEAZ4FOTqoLM5KxARMVhS+riUgLAz/nFv9enN5hpjK24hmcFDt aZMUOpqflecHXDgrkH4oQpmynELoj/TMzt+/Tcocx57gXbLfUgTM4msclJj7+8AXzsug tRmmOyUUmxOUZIOjiT1wU4kWsGgFUpXiHnI4K/KpZ5NZE++zJr3g0YlrAx0/aaPiwlEw qXug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775692332; x=1776297132; 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=NdExj8NrGH1ZBAAOiIP5OaheEHhnlVSpShjAwGSzw/Q=; b=rp+s9JfDnM/AvmA5cGZOgNZbFNFbMhJRJ8SSUVUyyNvAL5lQ3pbQGbxniUTZsKIjja wlwwouRhFhw811BiiQRV/8j1mJxJH0eQYDVH3bSE/Hb+PRe07r2NaP4+1ZhNYKNKF0bo 2H9BnuftoQ9lB8l8i2QTK8bLEu70CZLPpkMHBCah59TLs/HxyrJ3xsb0bSS0wssarnJK dvyAE2RoJGJYc8nweYr5NeMfIbFIuVFzJdD1qwgQOnhSqX847wu16gzUekBG2ataQwQo BvZ1kxUQCHkAhHhsjiEUjv6RMYNqg2pEcWEFGpmJ2ijjw9tx07DNj4VwAaW3GuaJHr+u rVZg== X-Forwarded-Encrypted: i=1; AJvYcCUBiyQdpzLs2+EJ8cIGXF5lqYsk5W/WQ12a2j2Vr79wXE+veKPRwAjUk+804Y0BKRYceF8+o1w/9grjLLic@postgresql.org X-Gm-Message-State: AOJu0YxZOLy3U/zm0x9SuWZOzvZuygraG5LtzyXDpCRizGoIkt7F636P 5S9F/OudXAoK+g2jG2AS6VxHmbkTZxYvmYUZlryueu4nCea9/sgFyEIavd/wtNqLGyBpROkp8P0 z9Y3I4O0lfvVutyoXNI2TAtO78ah4ou8= X-Gm-Gg: AeBDievzAynmHC1oz9lYXGvQ09JRd2rjJBTzfOd+pYGcecNKagwh3lktJ0HGAnCnOnM gSK98hDFgKc3Ke/Xd9K3m5bFIZrC9UwzlmX8aKu+TCEfqjVr/U2SuVf6mWkYKo4uA5fKqmUVfqi wXrA4aoSMkt7oaEfCeIGAkbJd0sIHXDwCLIRYelJua8fbdxp5kYuUdFw1dHwVDFdJen0mZs9o/o +Z6ruIUV12YQLxlqXdChCrJuhi2kVX+LVhhJZHi48xyccJfg6E1Z60XHk8a3D9BlStx0EiP0z92 4ILspg== X-Received: by 2002:a05:6402:46da:b0:66e:809f:3a04 with SMTP id 4fb4d7f45d1cf-6700ac74da3mr498999a12.13.1775692331349; Wed, 08 Apr 2026 16:52:11 -0700 (PDT) MIME-Version: 1.0 References: <5684f479-858e-4c5d-b8f5-bcf05de1f909@gmail.com> <3077290.1775668665@sss.pgh.pa.us> <3097984.1775674400@sss.pgh.pa.us> <3101163.1775676098@sss.pgh.pa.us> In-Reply-To: From: Sami Imseih Date: Wed, 8 Apr 2026 18:51:59 -0500 X-Gm-Features: AQROBzALJ1PkbnbcFTvT4nmFP4rT6tA2ojjLGRge37o3ex1kzEta-w4TYAQNxRs Message-ID: Subject: Re: Add pg_stat_autovacuum_priority To: Nathan Bossart Cc: Andres Freund , Tom Lane , Alexander Lakhin , Bharath Rupireddy , Robert Treat , satyanarlapuram@gmail.com, pgsql-hackers , tndrwang@gmail.com Content-Type: multipart/mixed; boundary="000000000000a42cf2064efb96b3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a42cf2064efb96b3 Content-Type: text/plain; charset="UTF-8" > On Wed, Apr 08, 2026 at 04:33:00PM -0500, Sami Imseih wrote: > >> On Wed, Apr 08, 2026 at 04:40:03PM -0400, Andres Freund wrote: > >> > Note that the whole cached state does automatically get reset at the end of > >> > the transaction (AtEOXact_PgStat()->pgstat_clear_snapshot()), just like it did > >> > before the shmem stats stuff. > >> > >> I see a lot of memory used for the pgStatEntryRefHash table, too (e.g., ~16 > >> MB for 100K tables). What's interesting is that I cannot reproduce similar > >> usage with views like pg_stat_all_tables. If memory was not a concern, I > >> think the "bool *may_free" idea would be fine. > > > > Instead of may_free, which is invasive, what about pgstat_fetch_entry_nocache > > which can be called by 2 new APIs pgstat_fetch_stat_tabentry_nocache() and > > pgstat_fetch_stat_tabentry_nocache_ext(). This way a caller that uses > > these will be required to pfree? > > This might help avoid memory usage within a snapshot, Yes, this is exactly why it would be useful for autovacuum workers and the scores view. relation_needs_vacanalyze() can use the nocache variant, and we don't need to have a conditional pfree. What I did not like about this idea after thinking about it more is the performance overhead potentially since every call to the view will take a shared lock on the entries, and the stats will not be consistent when the view is called multiple times in a transaction even when stats_fetch_consistency is NONE. The latter could be a desired feature, but it goes against the users intentions and could be confusing. I went ahead and implemented Andres's idea of will_free. Callers of pgstat_fetch_entry can either pass a NULL to a will_free parameter, or a bool. Callers that pass the bool can check if will_free is true and can choose to free the entry. For now, to keep the changes minimal, I only pgstat_fetch_stat_tabentry_ext() will call pgstat_fetch_entry() with the bool and relation_needs_vacanalyze() will be the only call site that checks this to pfree the entry. There may be some opportunities to improve other call sites if they are indeed leaking. For example, pgstat_copy_relation_stats() could leak with fetch_consistency = NONE. I kept that out for now, but we should probably close that gap in another patch. Also, pgstat_fetch_stat_dbentry() in autovacuum.c could potentially use this, but I did not look into detail. What do you think? -- Sami --000000000000a42cf2064efb96b3 Content-Type: application/octet-stream; name="v2-0001-Fix-double-free-on-relation_needs_vacanalyze.patch" Content-Disposition: attachment; filename="v2-0001-Fix-double-free-on-relation_needs_vacanalyze.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnqp4tzj0 RnJvbSBkOWRiZjU4NWU1MTI3NGRhMGE3MWUwZDA2NDYwZTIzMzA4MjJiZDg2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KRGF0 ZTogV2VkLCA4IEFwciAyMDI2IDIzOjM2OjA3ICswMDAwClN1YmplY3Q6IFtQQVRDSCB2MiAxLzFd IEZpeCBkb3VibGUtZnJlZSBvbiByZWxhdGlvbl9uZWVkc192YWNhbmFseXplCgpyZWxhdGlvbl9u ZWVkc192YWNhbmFseXplKCkgdW5jb25kaXRpb25hbGx5IGNhbGxzIHBmcmVlKCkgb24gdGhlCnRh YmVudHJ5IHJldHVybmVkIGJ5IHBnc3RhdF9mZXRjaF9zdGF0X3RhYmVudHJ5X2V4dCgpLiBUaGlz IGlzIGNvcnJlY3QKZm9yIGF1dG92YWN1dW0sIHdoaWNoIHVzZXMgUEdTVEFUX0ZFVENIX0NPTlNJ U1RFTkNZX05PTkUgd2hlcmUgdGhlCmNhbGxlciBvd25zIHRoZSBhbGxvY2F0aW9uLCBidXQgY2F1 c2VzIGEgZG91YmxlLWZyZWUgZm9yIGNhbGxlcnMgdXNpbmcKUEdTVEFUX0ZFVENIX0NPTlNJU1RF TkNZX0NBQ0hFIHdoZXJlIHRoZSBlbnRyeSBpcyBtYW5hZ2VkIGJ5IHRoZQpzbmFwc2hvdCBjYWNo ZS4KCkZpeCB0aGlzIGJ5IGFkZGluZyBhIGJvb2wgKndpbGxfZnJlZSBvdXRwdXQgcGFyYW1ldGVy IHRvCnBnc3RhdF9mZXRjaF9lbnRyeSgpIGFuZCBwcm9wYWdhdGluZyBpdCB0aHJvdWdoCnBnc3Rh dF9mZXRjaF9zdGF0X3RhYmVudHJ5X2V4dCgpLiBUaGlzIGxldHMgY2FsbGVycyBkZXRlcm1pbmUg d2hldGhlcgp0aGV5IGFyZSByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGUgcmV0dXJuZWQgZW50 cnkuIENhbGxlcnMgdGhhdApkb24ndCBuZWVkIHRoaXMgaW5mb3JtYXRpb24gcGFzcyBOVUxMLCBr ZWVwaW5nIGV4aXN0aW5nIGNhbGwgc2l0ZXMKbWluaW1hbCB3aGlsZSBhbGxvd2luZyBmdXR1cmUg Y2FsbGVycyB0byBtYWtlIHVzZSBvZiBpdCBhcyBuZWVkZWQuCi0tLQogc3JjL2JhY2tlbmQvcG9z dG1hc3Rlci9hdXRvdmFjdXVtLmMgICAgICAgICAgICAgICAgICAgICAgfCA2ICsrKystLQogc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgICAgICAgICAgICAgICAgICAgICAgfCA5 ICsrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2JhY2tlbmQuYyAg ICAgICAgICAgICAgfCAyICstCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfZGF0 YWJhc2UuYyAgICAgICAgICAgICB8IDIgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bn c3RhdF9mdW5jdGlvbi5jICAgICAgICAgICAgIHwgMiArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0 aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMgICAgICAgICAgICAgfCA4ICsrKystLS0tCiBzcmMvYmFj a2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfcmVwbHNsb3QuYyAgICAgICAgICAgICB8IDIgKy0K IHNyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zdWJzY3JpcHRpb24uYyAgICAgICAg IHwgMiArLQogc3JjL2luY2x1ZGUvcGdzdGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAzICsrLQogc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2ludGVybmFsLmggICAg ICAgICAgICAgICAgICAgICAgfCAzICsrLQogLi4uL21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMv dGVzdF9jdXN0b21fdmFyX3N0YXRzLmMgICAgfCAyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAyNiBp bnNlcnRpb25zKCspLCAxNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9w b3N0bWFzdGVyL2F1dG92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5jCmluZGV4IGJkNjI2YTE2MzYzLi4zYzFmZWQ2MjY0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMKQEAgLTMwODAsNiArMzA4MCw3IEBAIHJlbGF0aW9uX25lZWRzX3ZhY2FuYWx5 emUoT2lkIHJlbGlkLAogCVBnU3RhdF9TdGF0VGFiRW50cnkgKnRhYmVudHJ5OwogCWJvb2wJCWZv cmNlX3ZhY3V1bTsKIAlib29sCQlhdl9lbmFibGVkOworCWJvb2wJCXdpbGxfZnJlZTsKIAogCS8q IGNvbnN0YW50cyBmcm9tIHJlbG9wdGlvbnMgb3IgR1VDIHZhcmlhYmxlcyAqLwogCWludAkJCXZh Y19iYXNlX3RocmVzaCwKQEAgLTMyNDYsNyArMzI0Nyw3IEBAIHJlbGF0aW9uX25lZWRzX3ZhY2Fu YWx5emUoT2lkIHJlbGlkLAogCSAqIGZvcmNlZC4KIAkgKi8KIAl0YWJlbnRyeSA9IHBnc3RhdF9m ZXRjaF9zdGF0X3RhYmVudHJ5X2V4dChjbGFzc0Zvcm0tPnJlbGlzc2hhcmVkLAotCQkJCQkJCQkJ CQkgIHJlbGlkKTsKKwkJCQkJCQkJCQkJICByZWxpZCwgJndpbGxfZnJlZSk7CiAJaWYgKCF0YWJl bnRyeSkKIAkJcmV0dXJuOwogCkBAIC0zMzI3LDcgKzMzMjgsOCBAQCByZWxhdGlvbl9uZWVkc192 YWNhbmFseXplKE9pZCByZWxpZCwKIAkJCSBhbmx0dXBsZXMsIGFubHRocmVzaCwgc2NvcmVzLT5h bmwsCiAJCQkgc2NvcmVzLT54aWQsIHNjb3Jlcy0+bXhpZCk7CiAKLQlwZnJlZSh0YWJlbnRyeSk7 CisJaWYgKHdpbGxfZnJlZSkKKwkJcGZyZWUodGFiZW50cnkpOwogfQogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0LmMgYi9zcmMvYmFja2VuZC91dGls cy9hY3Rpdml0eS9wZ3N0YXQuYwppbmRleCBlYjhjY2JhYTYyOC4uYTA1NjEyNTA3MTAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCisrKyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdC5jCkBAIC05NjAsNyArOTYwLDcgQEAgcGdzdGF0X2Ns ZWFyX3NuYXBzaG90KHZvaWQpCiB9CiAKIHZvaWQgKgotcGdzdGF0X2ZldGNoX2VudHJ5KFBnU3Rh dF9LaW5kIGtpbmQsIE9pZCBkYm9pZCwgdWludDY0IG9iamlkKQorcGdzdGF0X2ZldGNoX2VudHJ5 KFBnU3RhdF9LaW5kIGtpbmQsIE9pZCBkYm9pZCwgdWludDY0IG9iamlkLCBib29sICp3aWxsX2Zy ZWUpCiB7CiAJUGdTdGF0X0hhc2hLZXkga2V5ID0gezB9OwogCVBnU3RhdF9FbnRyeVJlZiAqZW50 cnlfcmVmOwpAQCAtOTcxLDYgKzk3MSwxMyBAQCBwZ3N0YXRfZmV0Y2hfZW50cnkoUGdTdGF0X0tp bmQga2luZCwgT2lkIGRib2lkLCB1aW50NjQgb2JqaWQpCiAJQXNzZXJ0KElzVW5kZXJQb3N0bWFz dGVyIHx8ICFJc1Bvc3RtYXN0ZXJFbnZpcm9ubWVudCk7CiAJQXNzZXJ0KCFraW5kX2luZm8tPmZp eGVkX2Ftb3VudCk7CiAKKwkvKgorCSAqIFdoZW4gcGdzdGF0X2ZldGNoX2NvbnNpc3RlbmN5IGlz IFBHU1RBVF9GRVRDSF9DT05TSVNURU5DWV9OT05FLCBjYWxsZXJzCisJICogd2lsbCBiZSByZXNw b25zaWJsZSBmb3IgZnJlZWluZyB0aGUgZW50cnkuCisJICovCisJaWYgKHdpbGxfZnJlZSkKKwkJ KndpbGxfZnJlZSA9IChwZ3N0YXRfZmV0Y2hfY29uc2lzdGVuY3kgPT0gUEdTVEFUX0ZFVENIX0NP TlNJU1RFTkNZX05PTkUpOworCiAJcGdzdGF0X3ByZXBfc25hcHNob3QoKTsKIAogCWtleS5raW5k ID0ga2luZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9i YWNrZW5kLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfYmFja2VuZC5jCmlu ZGV4IDA0ZmUxM2U2NGM2Li42ZmZlZjEwNDBhMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvYWN0aXZpdHkvcGdzdGF0X2JhY2tlbmQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9wZ3N0YXRfYmFja2VuZC5jCkBAIC05NSw3ICs5NSw3IEBAIHBnc3RhdF9mZXRjaF9zdGF0 X2JhY2tlbmQoUHJvY051bWJlciBwcm9jTnVtYmVyKQogCVBnU3RhdF9CYWNrZW5kICpiYWNrZW5k X2VudHJ5OwogCiAJYmFja2VuZF9lbnRyeSA9IChQZ1N0YXRfQmFja2VuZCAqKSBwZ3N0YXRfZmV0 Y2hfZW50cnkoUEdTVEFUX0tJTkRfQkFDS0VORCwKLQkJCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lk LCBwcm9jTnVtYmVyKTsKKwkJCQkJCQkJCQkJCQkJICBJbnZhbGlkT2lkLCBwcm9jTnVtYmVyLCBO VUxMKTsKIAogCXJldHVybiBiYWNrZW5kX2VudHJ5OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X2RhdGFiYXNlLmMgYi9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS9wZ3N0YXRfZGF0YWJhc2UuYwppbmRleCA5MzNkY2I1Y2FlNS4uZjE4NDZkMzIzNmMg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRhYmFzZS5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9kYXRhYmFzZS5jCkBAIC0y ODgsNyArMjg4LDcgQEAgUGdTdGF0X1N0YXREQkVudHJ5ICoKIHBnc3RhdF9mZXRjaF9zdGF0X2Ri ZW50cnkoT2lkIGRib2lkKQogewogCXJldHVybiAoUGdTdGF0X1N0YXREQkVudHJ5ICopCi0JCXBn c3RhdF9mZXRjaF9lbnRyeShQR1NUQVRfS0lORF9EQVRBQkFTRSwgZGJvaWQsIEludmFsaWRPaWQp OworCQlwZ3N0YXRfZmV0Y2hfZW50cnkoUEdTVEFUX0tJTkRfREFUQUJBU0UsIGRib2lkLCBJbnZh bGlkT2lkLCBOVUxMKTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv YWN0aXZpdHkvcGdzdGF0X2Z1bmN0aW9uLmMgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9w Z3N0YXRfZnVuY3Rpb24uYwppbmRleCBlNmI4NDI4M2M2Yy4uZDQ3ZDA1ZTNkOTIgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9mdW5jdGlvbi5jCkBAIC0yNDUsNSArMjQ1 LDUgQEAgUGdTdGF0X1N0YXRGdW5jRW50cnkgKgogcGdzdGF0X2ZldGNoX3N0YXRfZnVuY2VudHJ5 KE9pZCBmdW5jX2lkKQogewogCXJldHVybiAoUGdTdGF0X1N0YXRGdW5jRW50cnkgKikKLQkJcGdz dGF0X2ZldGNoX2VudHJ5KFBHU1RBVF9LSU5EX0ZVTkNUSU9OLCBNeURhdGFiYXNlSWQsIGZ1bmNf aWQpOworCQlwZ3N0YXRfZmV0Y2hfZW50cnkoUEdTVEFUX0tJTkRfRlVOQ1RJT04sIE15RGF0YWJh c2VJZCwgZnVuY19pZCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9h Y3Rpdml0eS9wZ3N0YXRfcmVsYXRpb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bn c3RhdF9yZWxhdGlvbi5jCmluZGV4IGJjOGM0M2I5NmFhLi4wMTIzOTQ3MmY2YiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlbGF0aW9uLmMKQEAgLTYxLDcgKzYxLDcg QEAgcGdzdGF0X2NvcHlfcmVsYXRpb25fc3RhdHMoUmVsYXRpb24gZHN0LCBSZWxhdGlvbiBzcmMp CiAJUGdTdGF0X0VudHJ5UmVmICpkc3RfcmVmOwogCiAJc3Jjc3RhdHMgPSBwZ3N0YXRfZmV0Y2hf c3RhdF90YWJlbnRyeV9leHQoc3JjLT5yZF9yZWwtPnJlbGlzc2hhcmVkLAotCQkJCQkJCQkJCQkg IFJlbGF0aW9uR2V0UmVsaWQoc3JjKSk7CisJCQkJCQkJCQkJCSAgUmVsYXRpb25HZXRSZWxpZChz cmMpLCBOVUxMKTsKIAlpZiAoIXNyY3N0YXRzKQogCQlyZXR1cm47CiAKQEAgLTQ2OCw3ICs0Njgs NyBAQCBwZ3N0YXRfdXBkYXRlX2hlYXBfZGVhZF90dXBsZXMoUmVsYXRpb24gcmVsLCBpbnQgZGVs dGEpCiBQZ1N0YXRfU3RhdFRhYkVudHJ5ICoKIHBnc3RhdF9mZXRjaF9zdGF0X3RhYmVudHJ5KE9p ZCByZWxpZCkKIHsKLQlyZXR1cm4gcGdzdGF0X2ZldGNoX3N0YXRfdGFiZW50cnlfZXh0KElzU2hh cmVkUmVsYXRpb24ocmVsaWQpLCByZWxpZCk7CisJcmV0dXJuIHBnc3RhdF9mZXRjaF9zdGF0X3Rh YmVudHJ5X2V4dChJc1NoYXJlZFJlbGF0aW9uKHJlbGlkKSwgcmVsaWQsIE5VTEwpOwogfQogCiAv KgpAQCAtNDc2LDEyICs0NzYsMTIgQEAgcGdzdGF0X2ZldGNoX3N0YXRfdGFiZW50cnkoT2lkIHJl bGlkKQogICogd2hldGhlciB0aGUgdG8tYmUtYWNjZXNzZWQgdGFibGUgaXMgYSBzaGFyZWQgcmVs YXRpb24gb3Igbm90LgogICovCiBQZ1N0YXRfU3RhdFRhYkVudHJ5ICoKLXBnc3RhdF9mZXRjaF9z dGF0X3RhYmVudHJ5X2V4dChib29sIHNoYXJlZCwgT2lkIHJlbG9pZCkKK3Bnc3RhdF9mZXRjaF9z dGF0X3RhYmVudHJ5X2V4dChib29sIHNoYXJlZCwgT2lkIHJlbG9pZCwgYm9vbCAqd2lsbF9mcmVl KQogewogCU9pZAkJCWRib2lkID0gKHNoYXJlZCA/IEludmFsaWRPaWQgOiBNeURhdGFiYXNlSWQp OwogCiAJcmV0dXJuIChQZ1N0YXRfU3RhdFRhYkVudHJ5ICopCi0JCXBnc3RhdF9mZXRjaF9lbnRy eShQR1NUQVRfS0lORF9SRUxBVElPTiwgZGJvaWQsIHJlbG9pZCk7CisJCXBnc3RhdF9mZXRjaF9l bnRyeShQR1NUQVRfS0lORF9SRUxBVElPTiwgZGJvaWQsIHJlbG9pZCwgd2lsbF9mcmVlKTsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9yZXBs c2xvdC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvcGdzdGF0X3JlcGxzbG90LmMKaW5k ZXggMTY4ZWY4ZjhmNDUuLmUwOWJiNmI0MzU1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hY3Rpdml0eS9wZ3N0YXRfcmVwbHNsb3QuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS9wZ3N0YXRfcmVwbHNsb3QuYwpAQCAtMjA4LDcgKzIwOCw3IEBAIHBnc3RhdF9mZXRjaF9y ZXBsc2xvdChOYW1lRGF0YSBzbG90bmFtZSkKIAogCWlmIChpZHggIT0gLTEpCiAJCXNsb3RlbnRy eSA9IChQZ1N0YXRfU3RhdFJlcGxTbG90RW50cnkgKikgcGdzdGF0X2ZldGNoX2VudHJ5KFBHU1RB VF9LSU5EX1JFUExTTE9ULAotCQkJCQkJCQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBpZHgpOworCQkJ CQkJCQkJCQkJCQkJCQlJbnZhbGlkT2lkLCBpZHgsIE5VTEwpOwogCiAJTFdMb2NrUmVsZWFzZShS ZXBsaWNhdGlvblNsb3RDb250cm9sTG9jayk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FjdGl2aXR5L3Bnc3RhdF9zdWJzY3JpcHRpb24uYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fj dGl2aXR5L3Bnc3RhdF9zdWJzY3JpcHRpb24uYwppbmRleCAzMjc3Y2Y4OGE0ZS4uM2VhZjNlMDM5 MGYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3Bnc3RhdF9zdWJzY3Jp cHRpb24uYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS9wZ3N0YXRfc3Vic2NyaXB0 aW9uLmMKQEAgLTEwNyw3ICsxMDcsNyBAQCBQZ1N0YXRfU3RhdFN1YkVudHJ5ICoKIHBnc3RhdF9m ZXRjaF9zdGF0X3N1YnNjcmlwdGlvbihPaWQgc3ViaWQpCiB7CiAJcmV0dXJuIChQZ1N0YXRfU3Rh dFN1YkVudHJ5ICopCi0JCXBnc3RhdF9mZXRjaF9lbnRyeShQR1NUQVRfS0lORF9TVUJTQ1JJUFRJ T04sIEludmFsaWRPaWQsIHN1YmlkKTsKKwkJcGdzdGF0X2ZldGNoX2VudHJ5KFBHU1RBVF9LSU5E X1NVQlNDUklQVElPTiwgSW52YWxpZE9pZCwgc3ViaWQsIE5VTEwpOwogfQogCiAvKgpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcGdzdGF0LmggYi9zcmMvaW5jbHVkZS9wZ3N0YXQuaAppbmRleCAy Nzg2YTdjNWZmYi4uYTQyZDIxMjQwODAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Bnc3RhdC5o CisrKyBiL3NyYy9pbmNsdWRlL3Bnc3RhdC5oCkBAIC03NjMsNyArNzYzLDggQEAgZXh0ZXJuIHZv aWQgcGdzdGF0X3R3b3BoYXNlX3Bvc3RhYm9ydChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1aW50 MTYgaW5mbywKIAogZXh0ZXJuIFBnU3RhdF9TdGF0VGFiRW50cnkgKnBnc3RhdF9mZXRjaF9zdGF0 X3RhYmVudHJ5KE9pZCByZWxpZCk7CiBleHRlcm4gUGdTdGF0X1N0YXRUYWJFbnRyeSAqcGdzdGF0 X2ZldGNoX3N0YXRfdGFiZW50cnlfZXh0KGJvb2wgc2hhcmVkLAotCQkJCQkJCQkJCQkJCQkgICBP aWQgcmVsb2lkKTsKKwkJCQkJCQkJCQkJCQkJICAgT2lkIHJlbG9pZCwKKwkJCQkJCQkJCQkJCQkJ ICAgYm9vbCAqd2lsbF9mcmVlKTsKIGV4dGVybiBQZ1N0YXRfVGFibGVTdGF0dXMgKmZpbmRfdGFi c3RhdF9lbnRyeShPaWQgcmVsX2lkKTsKIAogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS91dGls cy9wZ3N0YXRfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3Bnc3RhdF9pbnRlcm5hbC5o CmluZGV4IGMwNDk2ZjJjNjljLi4xNjY5NjQ0ZmU4YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUv dXRpbHMvcGdzdGF0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvdXRpbHMvcGdzdGF0X2lu dGVybmFsLmgKQEAgLTY4NSw3ICs2ODUsOCBAQCBleHRlcm4gUGdTdGF0X0VudHJ5UmVmICpwZ3N0 YXRfcHJlcF9wZW5kaW5nX2VudHJ5KFBnU3RhdF9LaW5kIGtpbmQsIE9pZCBkYm9pZCwKIGV4dGVy biBQZ1N0YXRfRW50cnlSZWYgKnBnc3RhdF9mZXRjaF9wZW5kaW5nX2VudHJ5KFBnU3RhdF9LaW5k IGtpbmQsCiAJCQkJCQkJCQkJCQkgICBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCk7CiAKLWV4dGVy biB2b2lkICpwZ3N0YXRfZmV0Y2hfZW50cnkoUGdTdGF0X0tpbmQga2luZCwgT2lkIGRib2lkLCB1 aW50NjQgb2JqaWQpOworZXh0ZXJuIHZvaWQgKnBnc3RhdF9mZXRjaF9lbnRyeShQZ1N0YXRfS2lu ZCBraW5kLCBPaWQgZGJvaWQsIHVpbnQ2NCBvYmppZCwKKwkJCQkJCQkJYm9vbCAqd2lsbF9mcmVl KTsKIGV4dGVybiB2b2lkIHBnc3RhdF9zbmFwc2hvdF9maXhlZChQZ1N0YXRfS2luZCBraW5kKTsK IAogCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3Rlc3RfY3VzdG9tX3N0YXRzL3Rlc3Rf Y3VzdG9tX3Zhcl9zdGF0cy5jIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90 ZXN0X2N1c3RvbV92YXJfc3RhdHMuYwppbmRleCAyZWYwZTkwMzc0NS4uOTVlYzc2ODdjNmMgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L21vZHVsZXMvdGVzdF9jdXN0b21fc3RhdHMvdGVzdF9jdXN0b21f dmFyX3N0YXRzLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy90ZXN0X2N1c3RvbV9zdGF0cy90ZXN0 X2N1c3RvbV92YXJfc3RhdHMuYwpAQCAtNDk0LDcgKzQ5NCw3IEBAIHRlc3RfY3VzdG9tX3N0YXRz X3Zhcl9mZXRjaF9lbnRyeShjb25zdCBjaGFyICpzdGF0X25hbWUpCiAJcmV0dXJuIChQZ1N0YXRf U3RhdEN1c3RvbVZhckVudHJ5ICopCiAJCXBnc3RhdF9mZXRjaF9lbnRyeShQR1NUQVRfS0lORF9U RVNUX0NVU1RPTV9WQVJfU1RBVFMsCiAJCQkJCQkgICBJbnZhbGlkT2lkLAotCQkJCQkJICAgUEdT VEFUX0NVU1RPTV9WQVJfU1RBVFNfSURYKHN0YXRfbmFtZSkpOworCQkJCQkJICAgUEdTVEFUX0NV U1RPTV9WQVJfU1RBVFNfSURYKHN0YXRfbmFtZSksIE5VTEwpOwogfQogCiAvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0tIAoyLjUwLjEKCg== --000000000000a42cf2064efb96b3--