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 1veCn6-00ADk2-1w for pgsql-hackers@arkaria.postgresql.org; Fri, 09 Jan 2026 13:44:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1veCn5-007KGS-1h for pgsql-hackers@arkaria.postgresql.org; Fri, 09 Jan 2026 13:44:36 +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 1veCn5-007KGK-0b for pgsql-hackers@lists.postgresql.org; Fri, 09 Jan 2026 13:44:36 +0000 Received: from mail-ej1-x629.google.com ([2a00:1450:4864:20::629]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1veCn3-005TUv-1j for pgsql-hackers@lists.postgresql.org; Fri, 09 Jan 2026 13:44:35 +0000 Received: by mail-ej1-x629.google.com with SMTP id a640c23a62f3a-b728a43e410so757872966b.1 for ; Fri, 09 Jan 2026 05:44:33 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1767966271; x=1768571071; darn=lists.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=jbVPQHo9oI73GTV7ZQxCuHWpNLLXL/lLOxkvCcw7fRU=; b=dzy1XaQSlG+3ktMt25VusYULRUE2OX7cGUsIvJKzmekRwuhwwXUGXis2RkAg41pEeU CVeJ5xYizto3bIXxhJz8avJXLjVwiIUyoozdQpJV+YrEk523mrRsEc3T5Ujo/D8SAv/g WE0dfX10tTpVTGbohaVzUN8lHoXiNv6U7e+Xrq0JB4a36ZjI1VbXUsBOqrem0mh5nJJY v1uSF7PKEycGWsnpw0bTY+lefpEOCh7cqwGY+Nii1ZefYsvbLIPbxMxG3XOzC4/xI8KG /ier2t0kmAJxCPOfZQgXzBc9RRbFQguN/ZMDNOOJUe0Wh9QLMRCiTWFfoEvoPxdRnzwQ uFxw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767966271; x=1768571071; 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=jbVPQHo9oI73GTV7ZQxCuHWpNLLXL/lLOxkvCcw7fRU=; b=qnz3Hxi71bActh9g2DCYCRHVv6yuhzgWL1eTlEoTQeZOJe1hx7AWVZN2gsoQ40NeM2 vJnagVI2Sou+etBmdPskz3wuGyYZMqRmJuzyRHGkrnnUUvWP8fuBDxPmK+IDYVFMOvmv qZraZs7Gra0OgmhVqxASTCO/dvy0SW+2POQ4y7402p7IhXrwPwTmXNKgSPhMJxh2bLxu dZXy2WWUDEz+wQjy3RPrs1DM9eQKjOmGaSIcwwr6keJ2E0o71WYfyh1PwhTTdQnrvtY8 V7bhi8jC/zvj2R4c7FMH7n86slkkZ+KZeK6MwmtfqEkyq2wHYvw0GfDfqViZj96am59K LZZQ== X-Forwarded-Encrypted: i=1; AJvYcCV40xYyGYK1Pd4UBW9yvoHQDyStxrpcbot7qZM4hPioXw4ZKpl/CByYyRh88y3Yf4/cn0jC/M3C4FAKHbur@lists.postgresql.org X-Gm-Message-State: AOJu0YznejLwd46i9tnUQrKU6mKyPlAIbXw0l48Ss82JPhU8/OYk/Rwq 0C0FrltdDG0QlNGmwVb5cvuiHdP3WIm0HqmUl4GDXIkywXdkiv9tEkw6S2L1rfqSpXeaVXCLeZz fJE4QbaIIOqtb+r77RGDQ4BbV8+TC720= X-Gm-Gg: AY/fxX5D8S7wojeWfDsDfXrXiW+cTtl6Lwt+Jlm00/YpHCiqB2jHpMorMMWBAPVenDs /CnEkI04kIpKadn8F4gcp0HmsRwy1gDcLO6/sL/WiF8rGSnCPVChzSC6wDQ0I2ZKymu7DhGK27C hQkneI7YKNwmT2woGi+K6UBbtYX3Bx8jzfoiYiE456GlKScecXUOadXAX+4f/8PXGUZGB5u47iN cgWtcwN7cVBdLW0K2wjIb/Vxw5hemvcsi/g5BGGCpcR9CZW+FkA3qF9gcFzbiwGPJve2MRnFXsn mMVYJ9UVP62DL75Gb9wbdqLUJDlupSIOYvp/QIqejaudWGo25gopcS74CxWIUBx+HKIYzw== X-Google-Smtp-Source: AGHT+IEJ6rPHG2TOreZSY/FlAQ1t7pJRckdQ1ugDD1/L6FrHub9k+JiCkAPmAB3dbLLBjgfhSqh5Dvc5UD4WyPFWg5k= X-Received: by 2002:a17:907:1c94:b0:b72:8489:7e65 with SMTP id a640c23a62f3a-b84453386edmr1115513466b.31.1767966270859; Fri, 09 Jan 2026 05:44:30 -0800 (PST) MIME-Version: 1.0 References: <202601011659.ikh4ku4p3ovb@alvherre.pgsql> In-Reply-To: From: Xuneng Zhou Date: Fri, 9 Jan 2026 21:44:17 +0800 X-Gm-Features: AZwV_QhmDRT4UM2WOPXb0-n5XqlHhOTIB5VX51inhRSzyzTRf_IojDBHydInVFw Message-ID: Subject: Re: Implement waiting for wal lsn replay: reloaded To: Alexander Korotkov Cc: Andres Freund , Thomas Munro , =?UTF-8?Q?=C3=81lvaro_Herrera?= , Chao Li , pgsql-hackers , Michael Paquier , jian he , Tomas Vondra , Yura Sokolov Content-Type: multipart/mixed; boundary="0000000000008d05640647f4b9a7" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008d05640647f4b9a7 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Fri, Jan 9, 2026 at 4:42=E2=80=AFAM Alexander Korotkov wrote: > > On Thu, Jan 8, 2026 at 6:29=E2=80=AFPM Xuneng Zhou = wrote: > > On Thu, Jan 8, 2026 at 10:19=E2=80=AFPM Alexander Korotkov wrote: > > > I see, you were right. This is not related to the MyProc->xmin. > > > ResolveRecoveryConflictWithTablespace() calls > > > GetConflictingVirtualXIDs(InvalidTransactionId, InvalidOid). That > > > would kill WAIT FOR LSN query independently on its xmin. > > > > I think the concern is valid --- conflicts like > > PROCSIG_RECOVERY_CONFLICT_SNAPSHOT could occur and terminate the > > backend if the timing is unlucky. It's more difficult to reproduce > > though. A check for the log containing "conflict with recovery" would > > likely catch these conflicts as well. > > Yes, I found multiple reasons why xmin gets temporarily set during > processing of WAIT FOR LSN query. I'll soon post a draft patch to fix > that. > > > > I guess your > > > patch is the only way to go. It's clumsy to wrap WAIT FOR LSN call > > > with retry loop, but it would still consume less resources than > > > polling. > > > > > > > Assuming recovery conflicts are relatively rare in tap tests, except > > for the explicitly designed tests like 031_recovery_conflict and the > > narrow timing window that the standby has not caught up while the wait > > for gets invoked, a simple fallback seems appropriate to me. > > Yes, I see. Seems acceptable given this seems the only feasible way to g= o. > Here is the updated patch with recovery conflicts handled. --=20 Best, Xuneng --0000000000008d05640647f4b9a7 Content-Type: application/octet-stream; name="v1-0001-Use-WAIT-FOR-LSN-in-PostgreSQL-Test-Cluster-wait_.patch" Content-Disposition: attachment; filename="v1-0001-Use-WAIT-FOR-LSN-in-PostgreSQL-Test-Cluster-wait_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk6xf4460 RnJvbSAxYjFhYTY1MmFmZjY2ODFlNWY0M2ViYTRmNDY5MGIxNzQwNTJkNDc4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog RnJpLCA5IEphbiAyMDI2IDIxOjMyOjEyICswODAwClN1YmplY3Q6IFtQQVRDSCB2MV0gVXNlIFdB SVQgRk9SIExTTiBpbgogUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlcjo6d2FpdF9mb3JfY2F0Y2h1 cCgpCgpXaGVuIHRoZSBzdGFuZGJ5IGlzIHBhc3NlZCBhcyBhIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXIgaW5zdGFuY2UsCnVzZSB0aGUgV0FJVCBGT1IgTFNOIGNvbW1hbmQgb24gdGhlIHN0YW5k Ynkgc2VydmVyIHRvIGltcGxlbWVudAp3YWl0X2Zvcl9jYXRjaHVwKCkgZm9yIHJlcGxheSwgd3Jp dGUsIGFuZCBmbHVzaCBtb2Rlcy4gIFRoaXMgaXMgbW9yZQplZmZpY2llbnQgdGhhbiBwb2xsaW5n IHBnX3N0YXRfcmVwbGljYXRpb24gb24gdGhlIHVwc3RyZWFtLCBhcyB0aGUKV0FJVCBGT1IgTFNO IGNvbW1hbmQgdXNlcyBhIGxhdGNoLWJhc2VkIHdha2V1cCBtZWNoYW5pc20uCgpUaGUgb3B0aW1p emF0aW9uIGFwcGxpZXMgd2hlbjoKLSBUaGUgc3RhbmRieSBpcyBwYXNzZWQgYXMgYSBDbHVzdGVy IG9iamVjdCAobm90IGp1c3QgYSBuYW1lIHN0cmluZykKLSBUaGUgbW9kZSBpcyAncmVwbGF5Jywg J3dyaXRlJywgb3IgJ2ZsdXNoJyAobm90ICdzZW50JykKLSBUaGUgc3RhbmRieSBpcyBpbiByZWNv dmVyeQoKRm9yICdzZW50JyBtb2RlLCB3aGVuIHRoZSBzdGFuZGJ5IGlzIHBhc3NlZCBhcyBhIHN0 cmluZyAoZS5nLiwgYQpzdWJzY3JpcHRpb24gbmFtZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiks IG9yIHdoZW4gdGhlIHN0YW5kYnkgaGFzCmJlZW4gcHJvbW90ZWQsIHRoZSBmdW5jdGlvbiBmYWxs cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwb2xsaW5nLWJhc2VkCmFwcHJvYWNoIHVzaW5nIHBnX3N0 YXRfcmVwbGljYXRpb24gb24gdGhlIHVwc3RyZWFtLgoKQWRkaXRpb25hbGx5LCBpZiB0aGUgV0FJ VCBGT1IgTFNOIHNlc3Npb24gaXMga2lsbGVkIGJ5IGEgcmVjb3ZlcnkKY29uZmxpY3QgKGUuZy4s IERST1AgVEFCTEVTUEFDRSBraWxsaW5nIGFsbCBiYWNrZW5kcyBpbmRpc2NyaW1pbmF0ZWx5KSwK dGhlIGZ1bmN0aW9uIGNhdGNoZXMgdGhpcyBlcnJvciBhbmQgZmFsbHMgYmFjayB0byBwb2xsaW5n LiAgVGhpcyBtYWtlcwp0aGUgdGVzdCBpbmZyYXN0cnVjdHVyZSByb2J1c3QgYWdhaW5zdCB0aGUg dGltaW5nLWRlcGVuZGVudCBjb25mbGljdHMKdGhhdCBjYW4gb2NjdXIgaW4gdGVzdHMgbGlrZSAw MzFfcmVjb3ZlcnlfY29uZmxpY3QuCgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NB QlBURjdVaUFyZ1ctc1hqOUNOd1J6VWhZT1FyZXZMemtZY2dCeWRtWDVvRGVzMXNqZyU0MG1haWwu Z21haWwuY29tCkF1dGhvcjogWHVuZW5nIFpob3UgPHh1bmVuZ3pob3VAZ21haWwuY29tPgpSZXZp ZXdlZC1ieTogQWxleGFuZGVyIEtvcm90a292IDxhZWtvcm90a292QGdtYWlsLmNvbT4KUmV2aWV3 ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmlld2VkLWJ5OiBBbHZh cm8gSGVycmVyYSA8YWx2aGVycmVAa3VyaWxlbXUuZGU+Ci0tLQogc3JjL3Rlc3QvcGVybC9Qb3N0 Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbSB8IDkxICsrKysrKysrKysrKysrKysrKysrKysrLQogMSBm aWxlIGNoYW5nZWQsIDkwIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQg YS9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVyLnBtIGIvc3JjL3Rlc3QvcGVy bC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQppbmRleCA5NTVkZmMwZTdmOC4uODdjM2QyNzUw Y2IgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0K KysrIGIvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbQpAQCAtMzMyMCw2 ICszMzIwLDEzIEBAIElmIHlvdSBwYXNzIGFuIGV4cGxpY2l0IHZhbHVlIG9mIHRhcmdldF9sc24s IGl0IHNob3VsZCBhbG1vc3QgYWx3YXlzIGJlCiB0aGUgcHJpbWFyeSdzIHdyaXRlIExTTjsgc28g dGhpcyBwYXJhbWV0ZXIgaXMgc2VsZG9tIG5lZWRlZCBleGNlcHQgd2hlbgogcXVlcnlpbmcgc29t ZSBpbnRlcm1lZGlhdGUgcmVwbGljYXRpb24gbm9kZSByYXRoZXIgdGhhbiB0aGUgcHJpbWFyeS4K IAorV2hlbiB0aGUgc3RhbmRieSBpcyBwYXNzZWQgYXMgYSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVz dGVyIGluc3RhbmNlIGFuZCBpcworaW4gcmVjb3ZlcnksIHRoaXMgZnVuY3Rpb24gdXNlcyB0aGUg V0FJVCBGT1IgTFNOIGNvbW1hbmQgb24gdGhlIHN0YW5kYnkKK2ZvciBtb2RlcyByZXBsYXksIHdy aXRlLCBhbmQgZmx1c2guICBUaGlzIGlzIG1vcmUgZWZmaWNpZW50IHRoYW4gcG9sbGluZworcGdf c3RhdF9yZXBsaWNhdGlvbiBvbiB0aGUgdXBzdHJlYW0sIGFzIFdBSVQgRk9SIExTTiB1c2VzIGEg bGF0Y2gtYmFzZWQKK3dha2V1cCBtZWNoYW5pc20uICBGb3IgJ3NlbnQnIG1vZGUsIG9yIHdoZW4g dGhlIHN0YW5kYnkgaXMgcGFzc2VkIGFzIGEKK3N0cmluZyAoZS5nLiwgYSBzdWJzY3JpcHRpb24g bmFtZSksIGl0IGZhbGxzIGJhY2sgdG8gcG9sbGluZy4KKwogSWYgdGhlcmUgaXMgbm8gYWN0aXZl IHJlcGxpY2F0aW9uIGNvbm5lY3Rpb24gZnJvbSB0aGlzIHBlZXIsIHdhaXRzIHVudGlsCiBwb2xs X3F1ZXJ5X3VudGlsIHRpbWVvdXQuCiAKQEAgLTMzMzksMTAgKzMzNDYsMTMgQEAgc3ViIHdhaXRf Zm9yX2NhdGNodXAKIAkgIC4gam9pbignLCAnLCBrZXlzKCV2YWxpZF9tb2RlcykpCiAJICB1bmxl c3MgZXhpc3RzKCR2YWxpZF9tb2Rlc3skbW9kZX0pOwogCi0JIyBBbGxvdyBwYXNzaW5nIG9mIGEg UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlciBpbnN0YW5jZSBhcyBzaG9ydGhhbmQKKwkjIEtlZXAg YSByZWZlcmVuY2UgdG8gdGhlIHN0YW5kYnkgbm9kZSBpZiBwYXNzZWQgYXMgYW4gb2JqZWN0LCBz byB3ZSBjYW4KKwkjIHVzZSBXQUlUIEZPUiBMU04gb24gaXQgbGF0ZXIuCisJbXkgJHN0YW5kYnlf bm9kZTsKIAlpZiAoYmxlc3NlZCgkc3RhbmRieV9uYW1lKQogCQkmJiAkc3RhbmRieV9uYW1lLT5p c2EoIlBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIiKSkKIAl7CisJCSRzdGFuZGJ5X25vZGUgPSAk c3RhbmRieV9uYW1lOwogCQkkc3RhbmRieV9uYW1lID0gJHN0YW5kYnlfbmFtZS0+bmFtZTsKIAl9 CiAJaWYgKCFkZWZpbmVkKCR0YXJnZXRfbHNuKSkKQEAgLTMzNjcsNiArMzM3Nyw4NSBAQCBzdWIg d2FpdF9mb3JfY2F0Y2h1cAogCSAgLiAkc2VsZi0+bmFtZSAuICJcbiI7CiAJIyBCZWZvcmUgcmVs ZWFzZSAxMiB3YWxyZWNlaXZlciBqdXN0IHNldCB0aGUgYXBwbGljYXRpb24gbmFtZSB0bwogCSMg IndhbHJlY2VpdmVyIgorCisJIyBVc2UgV0FJVCBGT1IgTFNOIG9uIHRoZSBzdGFuZGJ5IHdoZW46 CisJIyAtIFRoZSBzdGFuZGJ5IHdhcyBwYXNzZWQgYXMgYSBDbHVzdGVyIG9iamVjdCAoc28gd2Ug Y2FuIGNvbm5lY3QgdG8gaXQpCisJIyAtIFRoZSBtb2RlIGlzIHJlcGxheSwgd3JpdGUsIG9yIGZs dXNoIChub3QgJ3NlbnQnKQorCSMgLSBUaGUgc3RhbmRieSBpcyBpbiByZWNvdmVyeQorCSMgVGhp cyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHBvbGxpbmcgcGdfc3RhdF9yZXBsaWNhdGlvbiBvbiB0 aGUgdXBzdHJlYW0sCisJIyBhcyBXQUlUIEZPUiBMU04gdXNlcyBhIGxhdGNoLWJhc2VkIHdha2V1 cCBtZWNoYW5pc20uCisJaWYgKGRlZmluZWQoJHN0YW5kYnlfbm9kZSkgJiYgKCRtb2RlIG5lICdz ZW50JykpCisJeworCQlteSAkc3RhbmRieV9pbl9yZWNvdmVyeSA9CisJCSAgJHN0YW5kYnlfbm9k ZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcGdfaXNfaW5fcmVjb3ZlcnkoKSIpOwor CQljaG9tcCgkc3RhbmRieV9pbl9yZWNvdmVyeSk7CisKKwkJaWYgKCRzdGFuZGJ5X2luX3JlY292 ZXJ5IGVxICd0JykKKwkJeworCQkJIyBNYXAgbW9kZSBuYW1lcyB0byBXQUlUIEZPUiBMU04gbW9k ZSBuYW1lcworCQkJbXkgJW1vZGVfbWFwID0gKAorCQkJCSdyZXBsYXknID0+ICdzdGFuZGJ5X3Jl cGxheScsCisJCQkJJ3dyaXRlJyAgPT4gJ3N0YW5kYnlfd3JpdGUnLAorCQkJCSdmbHVzaCcgID0+ ICdzdGFuZGJ5X2ZsdXNoJywKKwkJCSk7CisJCQlteSAkd2FpdF9tb2RlID0gJG1vZGVfbWFweyRt b2RlfTsKKwkJCW15ICR0aW1lb3V0ID0gJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0aW1lb3V0 X2RlZmF1bHQ7CisJCQlteSAkd2FpdF9xdWVyeSA9CisJCQkgIHFxW1dBSVQgRk9SIExTTiAnJHt0 YXJnZXRfbHNufScgV0lUSCAoTU9ERSAnJHt3YWl0X21vZGV9JywgdGltZW91dCAnJHt0aW1lb3V0 fXMnLCBub190aHJvdyk7XTsKKworCQkJIyBUcnkgV0FJVCBGT1IgTFNOLiBJZiBpdCBzdWNjZWVk cywgd2UncmUgZG9uZS4gSWYgaXQgcmV0dXJucyBhCisJCQkjIG5vbi1zdWNjZXNzIHN0YXR1cyAo dGltZW91dCwgbm90X2luX3JlY292ZXJ5KSwgZmFpbCBpbW1lZGlhdGVseS4KKwkJCSMgSWYgdGhl IHNlc3Npb24gaXMgaW50ZXJydXB0ZWQgKGUuZy4sIGtpbGxlZCBieSByZWNvdmVyeSBjb25mbGlj dCksCisJCQkjIGZhbGwgYmFjayB0byBwb2xsaW5nIG9uIHRoZSB1cHN0cmVhbSB3aGljaCBpcyBp bW11bmUgdG8gc3RhbmRieS0KKwkJCSMgc2lkZSBjb25mbGljdHMuCisJCQlteSAkb3V0cHV0Owor CQkJbG9jYWwgJEA7CisJCQlteSAkd2FpdF9zdWNjZWVkZWQgPSBldmFsIHsKKwkJCQkkb3V0cHV0 ID0gJHN0YW5kYnlfbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICR3YWl0X3F1ZXJ5KTsKKwkJ CQljaG9tcCgkb3V0cHV0KTsKKwkJCQkxOworCQkJfTsKKworCQkJaWYgKCR3YWl0X3N1Y2NlZWRl ZCAmJiAkb3V0cHV0IGVxICdzdWNjZXNzJykKKwkJCXsKKwkJCQlwcmludCAiZG9uZVxuIjsKKwkJ CQlyZXR1cm47CisJCQl9CisKKwkJCSMgSWYgV0FJVCBGT1IgTFNOIGV4ZWN1dGVkIGJ1dCByZXR1 cm5lZCBub24tc3VjY2VzcyAoZS5nLiwgdGltZW91dCwKKwkJCSMgbm90X2luX3JlY292ZXJ5KSwg ZmFpbCBpbW1lZGlhdGVseSB3aXRoIGRpYWdub3N0aWMgaW5mby4gRmFsbGluZworCQkJIyBiYWNr IHRvIHBvbGxpbmcgd291bGQganVzdCB3YXN0ZSB0aW1lLgorCQkJaWYgKCR3YWl0X3N1Y2NlZWRl ZCkKKwkJCXsKKwkJCQlteSAkZGV0YWlscyA9ICRzZWxmLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkJCQkJIlNFTEVDVCAqIEZST00gcGdfY2F0YWxvZy5wZ19zdGF0X3JlcGxpY2F0aW9uIik7CisJ CQkJZGlhZyBxcShXQUlUIEZPUiBMU04gcmV0dXJuZWQgJyRvdXRwdXQnCitwZ19zdGF0X3JlcGxp Y2F0aW9uIG9uIHVwc3RyZWFtOgorJHtkZXRhaWxzfSk7CisJCQkJY3JvYWsgIldBSVQgRk9SIExT TiAnJHdhaXRfbW9kZScgdG8gJyR0YXJnZXRfbHNuJyByZXR1cm5lZCAnJG91dHB1dCciOworCQkJ fQorCisJCQkjIFdBSVQgRk9SIExTTiB3YXMgaW50ZXJydXB0ZWQuIE9ubHkgZmFsbCBiYWNrIHRv IHBvbGxpbmcgaWYgdGhpcworCQkJIyBsb29rcyBsaWtlIGEgcmVjb3ZlcnkgY29uZmxpY3QgLSB0 aGUgY2Fub25pY2FsIFBvc3RncmVTUUwgZXJyb3IKKwkJCSMgbWVzc2FnZSBjb250YWlucyAiY29u ZmxpY3Qgd2l0aCByZWNvdmVyeSIuIE90aGVyIGVycm9ycyBzaG91bGQKKwkJCSMgZmFpbCBpbW1l ZGlhdGVseSByYXRoZXIgdGhhbiBiZWluZyBtYXNrZWQgYnkgYSBzaWxlbnQgZmFsbGJhY2suCisJ CQlpZiAoJEAgPX4gL2NvbmZsaWN0IHdpdGggcmVjb3ZlcnkvaSkKKwkJCXsKKwkJCQlkaWFnIHFx KFdBSVQgRk9SIExTTiBpbnRlcnJ1cHRlZCwgZmFsbGluZyBiYWNrIHRvIHBvbGxpbmc6CiskQCk7 CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJY3JvYWsgIldBSVQgRk9SIExTTiBmYWlsZWQ6ICRA IjsKKwkJCX0KKwkJfQorCX0KKworCSMgRmFsbCBiYWNrIHRvIHBvbGxpbmcgcGdfc3RhdF9yZXBs aWNhdGlvbiBvbiB0aGUgdXBzdHJlYW0gZm9yOgorCSMgLSAnc2VudCcgbW9kZSAobm8gY29ycmVz cG9uZGluZyBXQUlUIEZPUiBMU04gbW9kZSkKKwkjIC0gV2hlbiBzdGFuZGJ5X25hbWUgaXMgYSBz dHJpbmcgKGUuZy4sIHN1YnNjcmlwdGlvbiBuYW1lKQorCSMgLSBXaGVuIHRoZSBzdGFuZGJ5IGlz IG5vIGxvbmdlciBpbiByZWNvdmVyeSAod2FzIHByb21vdGVkKQorCSMgLSBXaGVuIFdBSVQgRk9S IExTTiB3YXMgaW50ZXJydXB0ZWQgKGUuZy4sIGtpbGxlZCBieSBhIHJlY292ZXJ5IGNvbmZsaWN0 KQogCW15ICRxdWVyeSA9IHFxW1NFTEVDVCAnJHRhcmdldF9sc24nIDw9ICR7bW9kZX1fbHNuIEFO RCBzdGF0ZSA9ICdzdHJlYW1pbmcnCiAgICAgICAgICBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF9y ZXBsaWNhdGlvbgogICAgICAgICAgV0hFUkUgYXBwbGljYXRpb25fbmFtZSBJTiAoJyRzdGFuZGJ5 X25hbWUnLCAnd2FscmVjZWl2ZXInKV07Ci0tIAoyLjUxLjAKCg== --0000000000008d05640647f4b9a7--