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 1wEl5x-004MoQ-14 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 09:39:09 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wEl5w-001pge-1X for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Apr 2026 09:39:08 +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 1wEl5w-001pgV-07 for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 09:39:08 +0000 Received: from mail-yx1-xb12a.google.com ([2607:f8b0:4864:20::b12a]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wEl5t-00000001u4s-3pRM for pgsql-hackers@lists.postgresql.org; Mon, 20 Apr 2026 09:39:07 +0000 Received: by mail-yx1-xb12a.google.com with SMTP id 956f58d0204a3-650789b22e3so3028601d50.1 for ; Mon, 20 Apr 2026 02:39:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1776677945; cv=none; d=google.com; s=arc-20240605; b=Cnv0he49kOU737oEiCYBVQNmaqBH7wb2hA270ZVdrj+e2ZtOyRyAiaHl6IBc+PpUs/ b+2ildBuhKbTyK6A5/H/1X4gObG38mD6C35qqXrO6P0f0LPX7heBcvJpOD1zQX7JtOw+ WoKyyqeA3aRFTwCHt4A0b15mAeVfXgtexaUpcezboCXUyrPwLEtmj6mXv498nW1u0JHU C1nZe5JOOyCpBqc4UFpoU4R7pbQHKB+hRCarBZ1rfaftNRjPdWVMm1MS96f0Zm/9IZMY jFAAOwiyGbw+HYM+1MCw9la8MoOo9xlviZCe7RXJr0BX2OkP5dt0s4noaUnQQjq4H0ja rZiQ== 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=sZDj/5+0KrTt0wf8dMYEF0LOnql5zEDvLk5ap45i+uk=; fh=B9yDRt5VClUf1sIPgwcNQA9EqGoD49QhefIpyGvcca0=; b=dnTL/dRuMM1GGyb8DDrwsF4jc8+hC7VBcyXSSe7Qr4o0CNn8z7wylOEyj8n3BuqETN CEvaSg46i/qqv2ag7IdziHbSRlAclr1wdoVSjc6jE85kb3dGNjr82cvPrLpC460O2PRW QFV1CXIhkYz8ZuGaMq/XCt8LHHW4myB+ui7P/TKM03W90hdtHal3+pgmixnW8TiLyOA2 1eOzL9tDh5xihQjO8I56hRonxXyJO9L8+WoqBdG6koP0ZSjm9rvh0Autd7ZGseAF+9+x aQdv1jeMfD6ZXmcab+L3nUttvtMRQDsxNmR+Q0YVkKBZtc/frqsSd7B9ycTEw+bEmH2I vahw==; 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=1776677945; x=1777282745; darn=lists.postgresql.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=sZDj/5+0KrTt0wf8dMYEF0LOnql5zEDvLk5ap45i+uk=; b=QsRfatW5WTG9J7nQtW+2n5qJ4jBPYBnaZ5OcfvtNmYH6fSTq2i0I8Mf1oTqFVcHApH w/S2TYvdxU4m4liv1eyup6PdHw3AfYs88tWx1gVqcnzkQZZUGm6gA2JCwxIgkx02bUN3 vc+wuXj62eT8fEQ49wP1RailRSlBEXkqXSnd08L6TOxTAiUrJkDZyUF71N7VxEWT+O6N py5fUpfojMAuG4sCpcfbbPGkFVVHu3OMdnUKqYMw7UnPT6o8KRLCCRLG/GYpwuD8ChdJ K51lKgZ4URyuqsNqLMtn10dXqjF2ftxcMTmNDjjfU+i/HhvotEyDYkDqToFhU3+EEKTI 1xOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776677945; x=1777282745; 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=sZDj/5+0KrTt0wf8dMYEF0LOnql5zEDvLk5ap45i+uk=; b=oOJwZl5xR2x3vCn01qGVyfWIwp3ociSAcx4D00Mufw0J/fn/iED7H4bs2DuKljUTki EN5RWi6/0AH5eu+qLWG2wg0VC1iFha9VXy1eniC6zVQyyoq83d0xRvrRvKecnB/Ifga2 ZA75nfuHrqikGUVC+g+51n7sMALPcceirf0nTImgfl9JibcQR3FOaWtevxBSCY8EY/vt W2jj2zhnrAdqDMRbLhTkxiAE/zg5ZM2UTTnAYSjzvHVp2Glre5sdECvX8fa/ZyaoB+4s p45b550jHlkZ0+BfA8z/al4R+RU5IajCxdze9sEujaexNSiXMp2msRSDt3GtYoxvaSbc DyFA== X-Gm-Message-State: AOJu0YwcvvFkepejTksJnKEQWImEhrT18/2ZSdaDSr/SEijv7OThLZRH AZP88/RaVWSUCm524SrfEv/WeDuvwrn3kbvSf3AU+PXaskyN+GgbZ31A0+8HK/oL/MYmlX6net3 4DoPnfWR3hyUoPL3ss4TYFMQsc3CTioG3ivSX X-Gm-Gg: AeBDieuQsqeo+Of4ScoBfvuWijpBaeSjcscatYknJex3F3nfDA61oOoC0Ho44zl2koe wrz3OkNHWa6ZNii6m4S8gYZk74EuYdrNbo5Zbz4MACIlUuIAjewK2sLAM2s5D//KU3obGkKKhIq AqNuIse6d/UwkG4UtxR+gHdEUfbg0PN+PVKHcmiu2cFbZhULoYyLM7XRXDpc4onzI9G+VdEQDBq 6BShvrdwpPn4gDSZVnnpdKMNrSG4m2xWE78RoFn2PiX8H8xzzCnJZgAE+ys8N5fZ1hMC9Or2401 pQOrt/U2qupQsYHx8OvR8l5JanegmEpSnFLklxPmziJeLNjeGtdbJZENLAOv X-Received: by 2002:a05:690e:4183:b0:64a:e781:891f with SMTP id 956f58d0204a3-6531089ec8dmr9734819d50.28.1776677945381; Mon, 20 Apr 2026 02:39:05 -0700 (PDT) MIME-Version: 1.0 From: JoongHyuk Shin Date: Mon, 20 Apr 2026 18:38:52 +0900 X-Gm-Features: AQROBzCX9LIpw18V6VPw9_zcdVi_NpoHc5gmHdKmfHhm2OomE5EClng43QH3WT8 Message-ID: Subject: [PATCH] Extend MXactCache lifetime from per-transaction to per-session To: "pgsql-hackers@lists.postgresql.org" Content-Type: multipart/mixed; boundary="000000000000d12338064fe1118e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d12338064fe1118e Content-Type: multipart/alternative; boundary="000000000000d12338064fe1118c" --000000000000d12338064fe1118c Content-Type: text/plain; charset="UTF-8" The MultiXact member cache (MXactCache) is allocated under TopTransactionContext and destroyed at every transaction end, so cross-transaction lookups of the same MultiXactId always fall through to SLRU. There is a FIXME comment in multixact.c (added in commit 0ac5ad5134f2) noting this is "plain wrong now that multixact's may contain update Xids." Since MultiXact member lists are immutable once created, cached entries stay valid regardless of transaction boundaries. The attached patch moves the cache to CacheMemoryContext so it persists for the backend session, and adds an oldestMultiXactId staleness check at lookup time to evict truncated entries. The oldestMultiXactId read is lockless; a stale read just keeps an entry slightly longer, which is harmless since the value only advances monotonically. This is consistent with the existing lockless MultiXactId read precedent in AtEOXact_MultiXact. For PostPrepare_MultiXact, explicit MemoryContextDelete is added since the context is no longer auto-destroyed with the transaction. I confirmed the improvement via pg_stat_slru: repeated GetMultiXactIdMembers calls across transactions go from SLRU hits every time to zero additional SLRU accesses after the first lookup. Patch attached. --000000000000d12338064fe1118c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
The MultiXact member cache (MXactCache) is allocated under=
TopTransactionContext and destroyed at every transaction end, so
cro= ss-transaction lookups of the same MultiXactId always fall through
to SL= RU. There is a FIXME comment in multixact.c (added in commit
0ac5ad5134f= 2) noting this is "plain wrong now that multixact's may
contain= update Xids."

Since MultiXact member lists are immutable once = created, cached entries
stay valid regardless of transaction boundaries.= The attached patch
moves the cache to CacheMemoryContext so it persists= for the backend
session, and adds an oldestMultiXactId staleness check = at lookup time
to evict truncated entries.

The oldestMultiXactId = read is lockless; a stale read just keeps an
entry slightly longer, whic= h is harmless since the value only advances
monotonically. This is consi= stent with the existing lockless
MultiXactId read precedent in AtEOXact_= MultiXact.

For PostPrepare_MultiXact, explicit MemoryContextDelete i= s added
since the context is no longer auto-destroyed with the transacti= on.

I confirmed the improvement via pg_stat_slru: repeated
GetMul= tiXactIdMembers calls across transactions go from SLRU hits
every time t= o zero additional SLRU accesses after the first lookup.

Patch attach= ed.
--000000000000d12338064fe1118c-- --000000000000d12338064fe1118e Content-Type: application/octet-stream; name="0001-Extend-MXactCache-lifetime-from-per-transaction-to-p.patch" Content-Disposition: attachment; filename="0001-Extend-MXactCache-lifetime-from-per-transaction-to-p.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mo705isn0 RnJvbSAyMTM5NDJjMzYxNmQ2YTJjMDVjNzE4N2FjMDI4ZWI2ZDdkOWM4ZWY0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKb29uZ0h5dWsgU2hpbiA8c2poOTEwODA1QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAyMCBBcHIgMjAyNiAxMDoyMDo0OSArMDkwMApTdWJqZWN0OiBbUEFUQ0hdIEV4 dGVuZCBNWGFjdENhY2hlIGxpZmV0aW1lIGZyb20gcGVyLXRyYW5zYWN0aW9uIHRvCiBwZXItc2Vz c2lvbgoKVGhlIE11bHRpWGFjdCBtZW1iZXIgY2FjaGUgKE1YYWN0Q2FjaGUpIHdhcyBhbGxvY2F0 ZWQgdW5kZXIKVG9wVHJhbnNhY3Rpb25Db250ZXh0IGFuZCBkZXN0cm95ZWQgYXQgZXZlcnkgdHJh bnNhY3Rpb24gZW5kLCBmb3JjaW5nCmNyb3NzLXRyYW5zYWN0aW9uIGxvb2t1cHMgb2YgdGhlIHNh bWUgTXVsdGlYYWN0SWQgdG8gZmFsbCB0aHJvdWdoIHRvClNMUlUgZXZlcnkgdGltZS4gIFRoaXMg d2FzIGZsYWdnZWQgYnkgYSBGSVhNRSBjb21tZW50IGFkZGVkIGluIGNvbW1pdAowYWM1YWQ1MTM0 ZjIgbm90aW5nIHRoZSBwZXItdHJhbnNhY3Rpb24gcG9saWN5IHdhcyAicGxhaW4gd3Jvbmcgbm93 CnRoYXQgbXVsdGl4YWN0J3MgbWF5IGNvbnRhaW4gdXBkYXRlIFhpZHMuIgoKU2luY2UgTXVsdGlY YWN0IG1lbWJlciBsaXN0cyBhcmUgaW1tdXRhYmxlICh3cml0ZS1vbmNlKSwgY2FjaGVkIGRhdGEK cmVtYWlucyB2YWxpZCBmb3IgYW55IGdpdmVuIE11bHRpWGFjdElkIHJlZ2FyZGxlc3Mgb2YgdHJh bnNhY3Rpb24KYm91bmRhcmllcy4gIE1vdmUgdGhlIGNhY2hlIGFsbG9jYXRpb24gdG8gQ2FjaGVN ZW1vcnlDb250ZXh0IHNvIGl0CnBlcnNpc3RzIGZvciB0aGUgYmFja2VuZCBzZXNzaW9uLiAgQWRk IGFuIG9sZGVzdE11bHRpWGFjdElkIHN0YWxlbmVzcwpjaGVjayBpbiB0aGUgY2FjaGUgbG9va3Vw IGZ1bmN0aW9ucyB0byBldmljdCBlbnRyaWVzIHRoYXQgaGF2ZSBiZWVuCnRydW5jYXRlZC4KClRo ZSBzdGFsZW5lc3MgY2hlY2sgcmVhZHMgTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE11bHRpWGFjdElk IHdpdGhvdXQKbG9jaywgd2hpY2ggaXMgc2FmZSBiZWNhdXNlIHRoZSB2YWx1ZSBvbmx5IGFkdmFu Y2VzIG1vbm90b25pY2FsbHk6IGEKc3RhbGUgcmVhZCBtZXJlbHkga2VlcHMgYW4gZW50cnkgc2xp Z2h0bHkgbG9uZ2VyLCB3aGlsZSBhIGZyZXNoIHJlYWQKY29ycmVjdGx5IGV2aWN0cy4gIFRoaXMg aXMgY29uc2lzdGVudCB3aXRoIHRoZSBleGlzdGluZyBsb2NrbGVzcwpNdWx0aVhhY3RJZCByZWFk IHByZWNlZGVudCBpbiBBdEVPWGFjdF9NdWx0aVhhY3QuCgpGb3IgUG9zdFByZXBhcmVfTXVsdGlY YWN0LCBleHBsaWNpdCBNZW1vcnlDb250ZXh0RGVsZXRlIGlzIG5vdyBuZWVkZWQKc2luY2UgdGhl IGNvbnRleHQgaXMgbm8gbG9uZ2VyIGF1dG8tZGVzdHJveWVkIHdpdGggdGhlIHRyYW5zYWN0aW9u LgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jIHwgNjcgKysrKysr KysrKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCAy MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9t dWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4 IGNiNzhiYTA4NDJkLi41NzhhZDI3ODA5MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVs dGl4YWN0LmMKQEAgLTI3NywxNiArMjc3LDExIEBAIE15T2xkZXN0VmlzaWJsZU1YYWN0SWRTbG90 KHZvaWQpCiAgKiBXZSB1c2UgdGhpcyBjYWNoZSB0byBzdG9yZSBrbm93biBNdWx0aVhhY3RzLCBz byB3ZSBkb24ndCBuZWVkIHRvIGdvIHRvCiAgKiBTTFJVIGFyZWFzIGV2ZXJ5IHRpbWUuCiAgKgot ICogVGhlIGNhY2hlIGxhc3RzIGZvciB0aGUgZHVyYXRpb24gb2YgYSBzaW5nbGUgdHJhbnNhY3Rp b24sIHRoZSByYXRpb25hbGUKLSAqIGZvciB0aGlzIGJlaW5nIHRoYXQgbW9zdCBlbnRyaWVzIHdp bGwgY29udGFpbiBvdXIgb3duIFRyYW5zYWN0aW9uSWQgYW5kCi0gKiBzbyB0aGV5IHdpbGwgYmUg dW5pbnRlcmVzdGluZyBieSB0aGUgdGltZSBvdXIgbmV4dCB0cmFuc2FjdGlvbiBzdGFydHMuCi0g KiAoWFhYIG5vdCBjbGVhciB0aGF0IHRoaXMgaXMgY29ycmVjdCAtLS0gb3RoZXIgbWVtYmVycyBv ZiB0aGUgTXVsdGlYYWN0Ci0gKiBjb3VsZCBoYW5nIGFyb3VuZCBsb25nZXIgdGhhbiB3ZSBkaWQu ICBIb3dldmVyLCBpdCdzIG5vdCBjbGVhciB3aGF0IGEKLSAqIGJldHRlciBwb2xpY3kgZm9yIGZs dXNoaW5nIG9sZCBjYWNoZSBlbnRyaWVzIHdvdWxkIGJlLikJRklYTUUgYWN0dWFsbHkKLSAqIHRo aXMgaXMgcGxhaW4gd3Jvbmcgbm93IHRoYXQgbXVsdGl4YWN0J3MgbWF5IGNvbnRhaW4gdXBkYXRl IFhpZHMuCi0gKgotICogV2UgYWxsb2NhdGUgdGhlIGNhY2hlIGVudHJpZXMgaW4gYSBtZW1vcnkg Y29udGV4dCB0aGF0IGlzIGRlbGV0ZWQgYXQKLSAqIHRyYW5zYWN0aW9uIGVuZCwgc28gd2UgZG9u J3QgbmVlZCB0byBkbyByZXRhaWwgZnJlZWluZyBvZiBlbnRyaWVzLgorICogVGhlIGNhY2hlIGxh c3RzIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGJhY2tlbmQgc2Vzc2lvbi4gIFNpbmNlCisgKiBN dWx0aVhhY3QgbWVtYmVyIGxpc3RzIGFyZSBpbW11dGFibGUgKHdyaXRlLW9uY2UpLCBjYWNoZWQg ZGF0YQorICogcmVtYWlucyBjb3JyZWN0IGZvciBhbnkgZ2l2ZW4gTXVsdGlYYWN0SWQuICBFbnRy aWVzIHRoYXQgaGF2ZSBiZWVuCisgKiB0cnVuY2F0ZWQgKE11bHRpWGFjdElkIG9sZGVyIHRoYW4g b2xkZXN0TXVsdGlYYWN0SWQpIGFyZSBkZXRlY3RlZAorICogYW5kIGV2aWN0ZWQgYXQgbG9va3Vw IHRpbWUuCiAgKi8KIHR5cGVkZWYgc3RydWN0IG1YYWN0Q2FjaGVFbnQKIHsKQEAgLTE0MzgsNyAr MTQzMyw3IEBAIG14YWN0TWVtYmVyQ29tcGFyYXRvcihjb25zdCB2b2lkICphcmcxLCBjb25zdCB2 b2lkICphcmcyKQogc3RhdGljIE11bHRpWGFjdElkCiBtWGFjdENhY2hlR2V0QnlTZXQoaW50IG5t ZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpCiB7Ci0JZGxpc3RfaXRlcglpdGVyOwor CWRsaXN0X211dGFibGVfaXRlciBpdGVyOwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiQ2FjaGVH ZXQ6IGxvb2tpbmcgZm9yICVzIiwKIAkJCQlteGlkX3RvX3N0cmluZyhJbnZhbGlkTXVsdGlYYWN0 SWQsIG5tZW1iZXJzLCBtZW1iZXJzKSk7CkBAIC0xNDQ2LDExICsxNDQxLDIyIEBAIG1YYWN0Q2Fj aGVHZXRCeVNldChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE1lbWJlciAqbWVtYmVycykKIAkvKiBz b3J0IHRoZSBhcnJheSBzbyBjb21wYXJpc29uIGlzIGVhc3kgKi8KIAlxc29ydChtZW1iZXJzLCBu bWVtYmVycywgc2l6ZW9mKE11bHRpWGFjdE1lbWJlciksIG14YWN0TWVtYmVyQ29tcGFyYXRvcik7 CiAKLQlkY2xpc3RfZm9yZWFjaChpdGVyLCAmTVhhY3RDYWNoZSkKKwlkY2xpc3RfZm9yZWFjaF9t b2RpZnkoaXRlciwgJk1YYWN0Q2FjaGUpCiAJewogCQltWGFjdENhY2hlRW50ICplbnRyeSA9IGRj bGlzdF9jb250YWluZXIobVhhY3RDYWNoZUVudCwgbm9kZSwKIAkJCQkJCQkJCQkJCWl0ZXIuY3Vy KTsKIAorCQkvKiBFdmljdCBlbnRyaWVzIHRoYXQgaGF2ZSBiZWVuIHRydW5jYXRlZCAqLworCQlp ZiAoTXVsdGlYYWN0SWRQcmVjZWRlcyhlbnRyeS0+bXVsdGksCisJCQkJCQkJCU11bHRpWGFjdFN0 YXRlLT5vbGRlc3RNdWx0aVhhY3RJZCkpCisJCXsKKwkJCWRlYnVnX2Vsb2czKERFQlVHMiwgIkNh Y2hlR2V0OiAldSBldmljdGVkICh0cnVuY2F0ZWQpIiwKKwkJCQkJCWVudHJ5LT5tdWx0aSk7CisJ CQlkY2xpc3RfZGVsZXRlX2Zyb20oJk1YYWN0Q2FjaGUsIGl0ZXIuY3VyKTsKKwkJCXBmcmVlKGVu dHJ5KTsKKwkJCWNvbnRpbnVlOworCQl9CisKIAkJaWYgKGVudHJ5LT5ubWVtYmVycyAhPSBubWVt YmVycykKIAkJCWNvbnRpbnVlOwogCkBAIC0xNDk1LDYgKzE1MDEsMjIgQEAgbVhhY3RDYWNoZUdl dEJ5SWQoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMpCiAJCQlN dWx0aVhhY3RNZW1iZXIgKnB0cjsKIAkJCVNpemUJCXNpemU7CiAKKwkJCS8qCisJCQkgKiBFdmlj dCB0aGUgZW50cnkgaWYgaXQgaGFzIGJlZW4gdHJ1bmNhdGVkLiAgV2UgcmVhZAorCQkJICogb2xk ZXN0TXVsdGlYYWN0SWQgd2l0aG91dCBsb2NrOyBhIHN0YWxlIHZhbHVlIGp1c3QgbWVhbnMgd2UK KwkJCSAqIGtlZXAgdGhlIGVudHJ5IHNsaWdodGx5IGxvbmdlciwgd2hpY2ggaXMgaGFybWxlc3Mu CisJCQkgKi8KKwkJCWlmIChNdWx0aVhhY3RJZFByZWNlZGVzKGVudHJ5LT5tdWx0aSwKKwkJCQkJ CQkJCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZCkpCisJCQl7CisJCQkJZGVidWdf ZWxvZzMoREVCVUcyLCAiQ2FjaGVHZXQ6ICV1IGV2aWN0ZWQgKHRydW5jYXRlZCkiLAorCQkJCQkJ CWVudHJ5LT5tdWx0aSk7CisJCQkJZGNsaXN0X2RlbGV0ZV9mcm9tKCZNWGFjdENhY2hlLCAmZW50 cnktPm5vZGUpOworCQkJCXBmcmVlKGVudHJ5KTsKKwkJCQkqbWVtYmVycyA9IE5VTEw7CisJCQkJ cmV0dXJuIC0xOworCQkJfQorCiAJCQlzaXplID0gc2l6ZW9mKE11bHRpWGFjdE1lbWJlcikgKiBl bnRyeS0+bm1lbWJlcnM7CiAJCQlwdHIgPSAoTXVsdGlYYWN0TWVtYmVyICopIHBhbGxvYyhzaXpl KTsKIApAQCAtMTUzNSw5ICsxNTU3LDkgQEAgbVhhY3RDYWNoZVB1dChNdWx0aVhhY3RJZCBtdWx0 aSwgaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpCiAKIAlpZiAoTVhhY3RD b250ZXh0ID09IE5VTEwpCiAJewotCQkvKiBUaGUgY2FjaGUgb25seSBsaXZlcyBhcyBsb25nIGFz IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCisJCS8qIFRoZSBjYWNoZSBsaXZlcyBmb3IgdGhl IGR1cmF0aW9uIG9mIHRoZSBiYWNrZW5kIHNlc3Npb24gKi8KIAkJZGVidWdfZWxvZzIoREVCVUcy LCAiQ2FjaGVQdXQ6IGluaXRpYWxpemluZyBtZW1vcnkgY29udGV4dCIpOwotCQlNWGFjdENvbnRl eHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wVHJhbnNhY3Rpb25Db250ZXh0LAorCQlNWGFj dENvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ2FjaGVNZW1vcnlDb250ZXh0LAogCQkJ CQkJCQkJCQkgIk11bHRpWGFjdCBjYWNoZSBjb250ZXh0IiwKIAkJCQkJCQkJCQkJIEFMTE9DU0VU X1NNQUxMX1NJWkVTKTsKIAl9CkBAIC0xNjM4LDExICsxNjYwLDExIEBAIEF0RU9YYWN0X011bHRp WGFjdCh2b2lkKQogCSpNeU9sZGVzdFZpc2libGVNWGFjdElkU2xvdCgpID0gSW52YWxpZE11bHRp WGFjdElkOwogCiAJLyoKLQkgKiBEaXNjYXJkIHRoZSBsb2NhbCBNdWx0aVhhY3RJZCBjYWNoZS4g IFNpbmNlIE1YYWN0Q29udGV4dCB3YXMgY3JlYXRlZCBhcwotCSAqIGEgY2hpbGQgb2YgVG9wVHJh bnNhY3Rpb25Db250ZXh0LCB3ZSBuZWVkbid0IGRlbGV0ZSBpdCBleHBsaWNpdGx5LgorCSAqIFdl IG5vIGxvbmdlciBkaXNjYXJkIHRoZSBsb2NhbCBNdWx0aVhhY3RJZCBjYWNoZSBhdCB0cmFuc2Fj dGlvbiBlbmQuCisJICogTXVsdGlYYWN0IG1lbWJlciBsaXN0cyBhcmUgaW1tdXRhYmxlLCBzbyBj YWNoZWQgZGF0YSByZW1haW5zIHZhbGlkCisJICogYWNyb3NzIHRyYW5zYWN0aW9ucy4gIFN0YWxl IGVudHJpZXMgKG9sZGVyIHRoYW4gb2xkZXN0TXVsdGlYYWN0SWQpIGFyZQorCSAqIGRldGVjdGVk IGFuZCBldmljdGVkIGF0IGxvb2t1cCB0aW1lLgogCSAqLwotCU1YYWN0Q29udGV4dCA9IE5VTEw7 Ci0JZGNsaXN0X2luaXQoJk1YYWN0Q2FjaGUpOwogfQogCiAvKgpAQCAtMTcwNSw5ICsxNzI3LDE0 IEBAIFBvc3RQcmVwYXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkKQogCSpNeU9s ZGVzdFZpc2libGVNWGFjdElkU2xvdCgpID0gSW52YWxpZE11bHRpWGFjdElkOwogCiAJLyoKLQkg KiBEaXNjYXJkIHRoZSBsb2NhbCBNdWx0aVhhY3RJZCBjYWNoZSBsaWtlIGluIEF0RU9YYWN0X011 bHRpWGFjdC4KKwkgKiBEaXNjYXJkIHRoZSBsb2NhbCBNdWx0aVhhY3RJZCBjYWNoZS4gIFNpbmNl IE1YYWN0Q29udGV4dCBpcyB1bmRlcgorCSAqIENhY2hlTWVtb3J5Q29udGV4dCwgd2UgbXVzdCBk ZWxldGUgaXQgZXhwbGljaXRseS4KIAkgKi8KLQlNWGFjdENvbnRleHQgPSBOVUxMOworCWlmIChN WGFjdENvbnRleHQgIT0gTlVMTCkKKwl7CisJCU1lbW9yeUNvbnRleHREZWxldGUoTVhhY3RDb250 ZXh0KTsKKwkJTVhhY3RDb250ZXh0ID0gTlVMTDsKKwl9CiAJZGNsaXN0X2luaXQoJk1YYWN0Q2Fj aGUpOwogfQogCi0tIAoyLjUyLjAKCg== --000000000000d12338064fe1118e--