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 1veQsv-00DI65-0w for pgsql-hackers@arkaria.postgresql.org; Sat, 10 Jan 2026 04:47:34 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1veQsr-009TJK-2P for pgsql-hackers@arkaria.postgresql.org; Sat, 10 Jan 2026 04:47:30 +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 1veQsr-009TJB-0z for pgsql-hackers@lists.postgresql.org; Sat, 10 Jan 2026 04:47:30 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1veQsp-005eMW-0G for pgsql-hackers@lists.postgresql.org; Sat, 10 Jan 2026 04:47:29 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-b8018eba13cso798102966b.1 for ; Fri, 09 Jan 2026 20:47:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768020446; x=1768625246; 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=t8iKz+5CtYnXwJrvy3BD2n0gZkNkjMA4Cv6wWnvcorI=; b=b3rWiBox2dM6YJCvfpfopMlp3A8FxaGK3k4Ef6PIBWa402Uee4ClVlJPC+elE9Fx4M cqulYo5GILqOzs6YQ5SDNk02U5daMOsb9QqnSHzpMJoxD0ex6PKsVM1CUFeofV8TRzfi 8hRfmMmmbg8oP+bUEWBe+MI55UsQmjDggoQNnpQos9nHFvanvo9FGP1sM7uCEcaSu8WF HW+c+eo8G2Bk7diwAzKyt1Y35GBhJsAOAKlzbgS3hsQ8em0J+ETheg0ac8JT6vg8y2aG fAsI43XA97Dq4d8nfxIhnFkEqyS5nba0Hir4iCTnjwnlN0GeDY5+8rPIf1+8V2m07auN 5BwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768020446; x=1768625246; 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=t8iKz+5CtYnXwJrvy3BD2n0gZkNkjMA4Cv6wWnvcorI=; b=nI5ds+VzIgO3rd0nzRXC+kBOEaZfQQY17ZAmKgmHKjQm6xM4wOL9KCP8oSu5Ygcpv7 hAQDQQHCVGP89S2P/PeqRgFmnhLE3xQT3+ZOl7BP+qxWztXIwUgIflm5wJg6F9xXqLEf 2RCGRwEuflrQVK/dYOZR6H6xpjBJNDK6g2RHtl5hy5DGJtRA+ThYiEtOc8ILVe3HAvDS h6aCrLrpoWbvl+RjENx4LbY1QaCXIhQddPAaRH9vmXs3ZkHRsJHAQEfOfQV+rYoo2gzi EeZubJrpQjMm5yQqtTp3C/0kgZ94qtn2zW0HD5K3Aq1un5BQQTlbTObZ8CFFTBrZjhnW oPrg== X-Forwarded-Encrypted: i=1; AJvYcCWwIAuaVK6RnGS0bSeSqhXUuJPbQmo0X9LiXkt6F2ptKrE2y/wxXoVRlaRuHHccQQGwat8Enbi7zvafBhUZ@lists.postgresql.org X-Gm-Message-State: AOJu0YzHF36lzKb2E/YwKR8g0omcenn5GgBjajjWDorBui1EX3gHJlfH JiJjWXAZCNBfHfuxt9Td20Xw2MT9FUTLZx5T4B+iEs1n0+1MxER7EzqFEY3oUFeA+o2O5QP+FQx G1Tl194asfkvsfqvdu7lLL1AGh4iLaRw= X-Gm-Gg: AY/fxX5lMrMNlp5obek0HK2a5hHuUyFT7ILzgw9581Gd+IgXTZ2ZNljme3as24q5eSg I0Nhwf5QJY7cS5xMR6Fzwh+IjNS1u4d5v9M9gdDfs6qRs0mkw1olFpgWKL4SQaz72+AmiMyFB4I y7eFMoP+6r3oxUesTWBVfADgaHbKvSTfQPOwYq4FxEUT6R+mqOCu71kGaqOO3vCxijUO7GmegqQ /6uan0lQjDyjZYU2RR65cfMLUHYapWzmX7zx+6vw4bgpWUkWsmM20YelUo8hwThEVfmmqq/CRtl fTWsnGypGa2hq7XyKCMv8kNbU3a+FKSdEs0G9mMrNATXrQjAFGrBo+UhLltQPHCJa/cItw== X-Google-Smtp-Source: AGHT+IHgUZCwnemlH//+TEfhe/PdnCAVDSzfu+F6ZsnlLi4Zle4CP1F6bu96GpaJ7z7+GVcNLB4Ho5loX1KQrFmLENs= X-Received: by 2002:a17:907:1b05:b0:b80:fa9:674 with SMTP id a640c23a62f3a-b84451f39c6mr1340666566b.54.1768020445872; Fri, 09 Jan 2026 20:47:25 -0800 (PST) MIME-Version: 1.0 References: <202601011659.ikh4ku4p3ovb@alvherre.pgsql> In-Reply-To: From: Xuneng Zhou Date: Sat, 10 Jan 2026 12:47:13 +0800 X-Gm-Features: AZwV_QjDwXZfEdhl0dz_Jso7iULm-nsbo01K-1Zt9DnB0xcUYS1ZKFji60ynr-c 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="000000000000a2204d064801568b" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000a2204d064801568b Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Jan 9, 2026 at 9:44=E2=80=AFPM Xuneng Zhou w= rote: > > 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 wai= t > > > for gets invoked, a simple fallback seems appropriate to me. > > > > Yes, I see. Seems acceptable given this seems the only feasible way to= go. > > > > Here is the updated patch with recovery conflicts handled. V2 corrected the commit message to state " if the WAIT FOR LSN session is interrupted by a recovery conflict (e.g., DROP TABLESPACE triggering conflicts on all backends),". In this case, the statement is canceled when possible; in some states (idle in transaction or subtransaction) the session may be terminated. --=20 Best, Xuneng --000000000000a2204d064801568b Content-Type: application/octet-stream; name="v2-0001-Use-WAIT-FOR-LSN-in-PostgreSQL-Test-Cluster-wait_.patch" Content-Disposition: attachment; filename="v2-0001-Use-WAIT-FOR-LSN-in-PostgreSQL-Test-Cluster-wait_.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk7tnyf50 RnJvbSA4ZDkyNzM1ZDQ3M2I5NzRiZmU1MzE4MzYxNWM0NDg3OTJhZDIwOWRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBhbHRlcmVnbzY1NSA8ODI0NjYyNTI2QHFxLmNvbT4KRGF0ZTog RnJpLCA5IEphbiAyMDI2IDIxOjMyOjEyICswODAwClN1YmplY3Q6IFtQQVRDSCB2Ml0gVXNlIFdB SVQgRk9SIExTTiBpbgogUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlcjo6d2FpdF9mb3JfY2F0Y2h1 cCgpCgpXaGVuIHRoZSBzdGFuZGJ5IGlzIHBhc3NlZCBhcyBhIFBvc3RncmVTUUw6OlRlc3Q6OkNs dXN0ZXIgaW5zdGFuY2UsCnVzZSB0aGUgV0FJVCBGT1IgTFNOIGNvbW1hbmQgb24gdGhlIHN0YW5k Ynkgc2VydmVyIHRvIGltcGxlbWVudAp3YWl0X2Zvcl9jYXRjaHVwKCkgZm9yIHJlcGxheSwgd3Jp dGUsIGFuZCBmbHVzaCBtb2Rlcy4gIFRoaXMgaXMgbW9yZQplZmZpY2llbnQgdGhhbiBwb2xsaW5n IHBnX3N0YXRfcmVwbGljYXRpb24gb24gdGhlIHVwc3RyZWFtLCBhcyB0aGUKV0FJVCBGT1IgTFNO IGNvbW1hbmQgdXNlcyBhIGxhdGNoLWJhc2VkIHdha2V1cCBtZWNoYW5pc20uCgpUaGUgb3B0aW1p emF0aW9uIGFwcGxpZXMgd2hlbjoKLSBUaGUgc3RhbmRieSBpcyBwYXNzZWQgYXMgYSBDbHVzdGVy IG9iamVjdCAobm90IGp1c3QgYSBuYW1lIHN0cmluZykKLSBUaGUgbW9kZSBpcyAncmVwbGF5Jywg J3dyaXRlJywgb3IgJ2ZsdXNoJyAobm90ICdzZW50JykKLSBUaGUgc3RhbmRieSBpcyBpbiByZWNv dmVyeQoKRm9yICdzZW50JyBtb2RlLCB3aGVuIHRoZSBzdGFuZGJ5IGlzIHBhc3NlZCBhcyBhIHN0 cmluZyAoZS5nLiwgYQpzdWJzY3JpcHRpb24gbmFtZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiks IG9yIHdoZW4gdGhlIHN0YW5kYnkgaGFzCmJlZW4gcHJvbW90ZWQsIHRoZSBmdW5jdGlvbiBmYWxs cyBiYWNrIHRvIHRoZSBvcmlnaW5hbCBwb2xsaW5nLWJhc2VkCmFwcHJvYWNoIHVzaW5nIHBnX3N0 YXRfcmVwbGljYXRpb24gb24gdGhlIHVwc3RyZWFtLgoKQWRkaXRpb25hbGx5LCBpZiB0aGUgV0FJ VCBGT1IgTFNOIHNlc3Npb24gaXMgaW50ZXJydXB0ZWQgYnkgYSByZWNvdmVyeQpjb25mbGljdCAo ZS5nLiwgRFJPUCBUQUJMRVNQQUNFIHRyaWdnZXJpbmcgY29uZmxpY3RzIG9uIGFsbCBiYWNrZW5k cyksCnRoZSBmdW5jdGlvbiBjYXRjaGVzIHRoaXMgZXJyb3IgYW5kIGZhbGxzIGJhY2sgdG8gcG9s bGluZy4gIFRoaXMgbWFrZXMKdGhlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgcm9idXN0IGFnYWluc3Qg dGhlIHRpbWluZy1kZXBlbmRlbnQgY29uZmxpY3RzCnRoYXQgY2FuIG9jY3VyIGluIHRlc3RzIGxp a2UgMDMxX3JlY292ZXJ5X2NvbmZsaWN0LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9DQUJQVEY3VWlBcmdXLXNYajlDTndSelVoWU9RcmV2THprWWNnQnlkbVg1b0RlczFzamclNDBt YWlsLmdtYWlsLmNvbQpBdXRob3I6IFh1bmVuZyBaaG91IDx4dW5lbmd6aG91QGdtYWlsLmNvbT4K UmV2aWV3ZWQtYnk6IEFsZXhhbmRlciBLb3JvdGtvdiA8YWVrb3JvdGtvdkBnbWFpbC5jb20+ClJl dmlld2VkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpSZXZpZXdlZC1ieTog QWx2YXJvIEhlcnJlcmEgPGFsdmhlcnJlQGt1cmlsZW11LmRlPgotLS0KIHNyYy90ZXN0L3Blcmwv UG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0gfCA5MSArKysrKysrKysrKysrKysrKysrKysrKy0K IDEgZmlsZSBjaGFuZ2VkLCA5MCBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0t Z2l0IGEvc3JjL3Rlc3QvcGVybC9Qb3N0Z3JlU1FML1Rlc3QvQ2x1c3Rlci5wbSBiL3NyYy90ZXN0 L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0KaW5kZXggOTU1ZGZjMGU3ZjguLjg3YzNk Mjc1MGNiIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9wZXJsL1Bvc3RncmVTUUwvVGVzdC9DbHVzdGVy LnBtCisrKyBiL3NyYy90ZXN0L3BlcmwvUG9zdGdyZVNRTC9UZXN0L0NsdXN0ZXIucG0KQEAgLTMz MjAsNiArMzMyMCwxMyBAQCBJZiB5b3UgcGFzcyBhbiBleHBsaWNpdCB2YWx1ZSBvZiB0YXJnZXRf bHNuLCBpdCBzaG91bGQgYWxtb3N0IGFsd2F5cyBiZQogdGhlIHByaW1hcnkncyB3cml0ZSBMU047 IHNvIHRoaXMgcGFyYW1ldGVyIGlzIHNlbGRvbSBuZWVkZWQgZXhjZXB0IHdoZW4KIHF1ZXJ5aW5n IHNvbWUgaW50ZXJtZWRpYXRlIHJlcGxpY2F0aW9uIG5vZGUgcmF0aGVyIHRoYW4gdGhlIHByaW1h cnkuCiAKK1doZW4gdGhlIHN0YW5kYnkgaXMgcGFzc2VkIGFzIGEgUG9zdGdyZVNRTDo6VGVzdDo6 Q2x1c3RlciBpbnN0YW5jZSBhbmQgaXMKK2luIHJlY292ZXJ5LCB0aGlzIGZ1bmN0aW9uIHVzZXMg dGhlIFdBSVQgRk9SIExTTiBjb21tYW5kIG9uIHRoZSBzdGFuZGJ5Citmb3IgbW9kZXMgcmVwbGF5 LCB3cml0ZSwgYW5kIGZsdXNoLiAgVGhpcyBpcyBtb3JlIGVmZmljaWVudCB0aGFuIHBvbGxpbmcK K3BnX3N0YXRfcmVwbGljYXRpb24gb24gdGhlIHVwc3RyZWFtLCBhcyBXQUlUIEZPUiBMU04gdXNl cyBhIGxhdGNoLWJhc2VkCit3YWtldXAgbWVjaGFuaXNtLiAgRm9yICdzZW50JyBtb2RlLCBvciB3 aGVuIHRoZSBzdGFuZGJ5IGlzIHBhc3NlZCBhcyBhCitzdHJpbmcgKGUuZy4sIGEgc3Vic2NyaXB0 aW9uIG5hbWUpLCBpdCBmYWxscyBiYWNrIHRvIHBvbGxpbmcuCisKIElmIHRoZXJlIGlzIG5vIGFj dGl2ZSByZXBsaWNhdGlvbiBjb25uZWN0aW9uIGZyb20gdGhpcyBwZWVyLCB3YWl0cyB1bnRpbAog cG9sbF9xdWVyeV91bnRpbCB0aW1lb3V0LgogCkBAIC0zMzM5LDEwICszMzQ2LDEzIEBAIHN1YiB3 YWl0X2Zvcl9jYXRjaHVwCiAJICAuIGpvaW4oJywgJywga2V5cygldmFsaWRfbW9kZXMpKQogCSAg dW5sZXNzIGV4aXN0cygkdmFsaWRfbW9kZXN7JG1vZGV9KTsKIAotCSMgQWxsb3cgcGFzc2luZyBv ZiBhIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXIgaW5zdGFuY2UgYXMgc2hvcnRoYW5kCisJIyBL ZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBzdGFuZGJ5IG5vZGUgaWYgcGFzc2VkIGFzIGFuIG9iamVj dCwgc28gd2UgY2FuCisJIyB1c2UgV0FJVCBGT1IgTFNOIG9uIGl0IGxhdGVyLgorCW15ICRzdGFu ZGJ5X25vZGU7CiAJaWYgKGJsZXNzZWQoJHN0YW5kYnlfbmFtZSkKIAkJJiYgJHN0YW5kYnlfbmFt ZS0+aXNhKCJQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyIikpCiAJeworCQkkc3RhbmRieV9ub2Rl ID0gJHN0YW5kYnlfbmFtZTsKIAkJJHN0YW5kYnlfbmFtZSA9ICRzdGFuZGJ5X25hbWUtPm5hbWU7 CiAJfQogCWlmICghZGVmaW5lZCgkdGFyZ2V0X2xzbikpCkBAIC0zMzY3LDYgKzMzNzcsODUgQEAg c3ViIHdhaXRfZm9yX2NhdGNodXAKIAkgIC4gJHNlbGYtPm5hbWUgLiAiXG4iOwogCSMgQmVmb3Jl IHJlbGVhc2UgMTIgd2FscmVjZWl2ZXIganVzdCBzZXQgdGhlIGFwcGxpY2F0aW9uIG5hbWUgdG8K IAkjICJ3YWxyZWNlaXZlciIKKworCSMgVXNlIFdBSVQgRk9SIExTTiBvbiB0aGUgc3RhbmRieSB3 aGVuOgorCSMgLSBUaGUgc3RhbmRieSB3YXMgcGFzc2VkIGFzIGEgQ2x1c3RlciBvYmplY3QgKHNv IHdlIGNhbiBjb25uZWN0IHRvIGl0KQorCSMgLSBUaGUgbW9kZSBpcyByZXBsYXksIHdyaXRlLCBv ciBmbHVzaCAobm90ICdzZW50JykKKwkjIC0gVGhlIHN0YW5kYnkgaXMgaW4gcmVjb3ZlcnkKKwkj IFRoaXMgaXMgbW9yZSBlZmZpY2llbnQgdGhhbiBwb2xsaW5nIHBnX3N0YXRfcmVwbGljYXRpb24g b24gdGhlIHVwc3RyZWFtLAorCSMgYXMgV0FJVCBGT1IgTFNOIHVzZXMgYSBsYXRjaC1iYXNlZCB3 YWtldXAgbWVjaGFuaXNtLgorCWlmIChkZWZpbmVkKCRzdGFuZGJ5X25vZGUpICYmICgkbW9kZSBu ZSAnc2VudCcpKQorCXsKKwkJbXkgJHN0YW5kYnlfaW5fcmVjb3ZlcnkgPQorCQkgICRzdGFuZGJ5 X25vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHBnX2lzX2luX3JlY292ZXJ5KCki KTsKKwkJY2hvbXAoJHN0YW5kYnlfaW5fcmVjb3ZlcnkpOworCisJCWlmICgkc3RhbmRieV9pbl9y ZWNvdmVyeSBlcSAndCcpCisJCXsKKwkJCSMgTWFwIG1vZGUgbmFtZXMgdG8gV0FJVCBGT1IgTFNO IG1vZGUgbmFtZXMKKwkJCW15ICVtb2RlX21hcCA9ICgKKwkJCQkncmVwbGF5JyA9PiAnc3RhbmRi eV9yZXBsYXknLAorCQkJCSd3cml0ZScgID0+ICdzdGFuZGJ5X3dyaXRlJywKKwkJCQknZmx1c2gn ICA9PiAnc3RhbmRieV9mbHVzaCcsCisJCQkpOworCQkJbXkgJHdhaXRfbW9kZSA9ICRtb2RlX21h cHskbW9kZX07CisJCQlteSAkdGltZW91dCA9ICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGlt ZW91dF9kZWZhdWx0OworCQkJbXkgJHdhaXRfcXVlcnkgPQorCQkJICBxcVtXQUlUIEZPUiBMU04g JyR7dGFyZ2V0X2xzbn0nIFdJVEggKE1PREUgJyR7d2FpdF9tb2RlfScsIHRpbWVvdXQgJyR7dGlt ZW91dH1zJywgbm9fdGhyb3cpO107CisKKwkJCSMgVHJ5IFdBSVQgRk9SIExTTi4gSWYgaXQgc3Vj Y2VlZHMsIHdlJ3JlIGRvbmUuIElmIGl0IHJldHVybnMgYQorCQkJIyBub24tc3VjY2VzcyBzdGF0 dXMgKHRpbWVvdXQsIG5vdF9pbl9yZWNvdmVyeSksIGZhaWwgaW1tZWRpYXRlbHkuCisJCQkjIElm IHRoZSBzZXNzaW9uIGlzIGludGVycnVwdGVkIChlLmcuLCBraWxsZWQgYnkgcmVjb3ZlcnkgY29u ZmxpY3QpLAorCQkJIyBmYWxsIGJhY2sgdG8gcG9sbGluZyBvbiB0aGUgdXBzdHJlYW0gd2hpY2gg aXMgaW1tdW5lIHRvIHN0YW5kYnktCisJCQkjIHNpZGUgY29uZmxpY3RzLgorCQkJbXkgJG91dHB1 dDsKKwkJCWxvY2FsICRAOworCQkJbXkgJHdhaXRfc3VjY2VlZGVkID0gZXZhbCB7CisJCQkJJG91 dHB1dCA9ICRzdGFuZGJ5X25vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkd2FpdF9xdWVyeSk7 CisJCQkJY2hvbXAoJG91dHB1dCk7CisJCQkJMTsKKwkJCX07CisKKwkJCWlmICgkd2FpdF9zdWNj ZWVkZWQgJiYgJG91dHB1dCBlcSAnc3VjY2VzcycpCisJCQl7CisJCQkJcHJpbnQgImRvbmVcbiI7 CisJCQkJcmV0dXJuOworCQkJfQorCisJCQkjIElmIFdBSVQgRk9SIExTTiBleGVjdXRlZCBidXQg cmV0dXJuZWQgbm9uLXN1Y2Nlc3MgKGUuZy4sIHRpbWVvdXQsCisJCQkjIG5vdF9pbl9yZWNvdmVy eSksIGZhaWwgaW1tZWRpYXRlbHkgd2l0aCBkaWFnbm9zdGljIGluZm8uIEZhbGxpbmcKKwkJCSMg YmFjayB0byBwb2xsaW5nIHdvdWxkIGp1c3Qgd2FzdGUgdGltZS4KKwkJCWlmICgkd2FpdF9zdWNj ZWVkZWQpCisJCQl7CisJCQkJbXkgJGRldGFpbHMgPSAkc2VsZi0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCQkJCSJTRUxFQ1QgKiBGUk9NIHBnX2NhdGFsb2cucGdfc3RhdF9yZXBsaWNhdGlvbiIp OworCQkJCWRpYWcgcXEoV0FJVCBGT1IgTFNOIHJldHVybmVkICckb3V0cHV0JworcGdfc3RhdF9y ZXBsaWNhdGlvbiBvbiB1cHN0cmVhbToKKyR7ZGV0YWlsc30pOworCQkJCWNyb2FrICJXQUlUIEZP UiBMU04gJyR3YWl0X21vZGUnIHRvICckdGFyZ2V0X2xzbicgcmV0dXJuZWQgJyRvdXRwdXQnIjsK KwkJCX0KKworCQkJIyBXQUlUIEZPUiBMU04gd2FzIGludGVycnVwdGVkLiBPbmx5IGZhbGwgYmFj ayB0byBwb2xsaW5nIGlmIHRoaXMKKwkJCSMgbG9va3MgbGlrZSBhIHJlY292ZXJ5IGNvbmZsaWN0 IC0gdGhlIGNhbm9uaWNhbCBQb3N0Z3JlU1FMIGVycm9yCisJCQkjIG1lc3NhZ2UgY29udGFpbnMg ImNvbmZsaWN0IHdpdGggcmVjb3ZlcnkiLiBPdGhlciBlcnJvcnMgc2hvdWxkCisJCQkjIGZhaWwg aW1tZWRpYXRlbHkgcmF0aGVyIHRoYW4gYmVpbmcgbWFza2VkIGJ5IGEgc2lsZW50IGZhbGxiYWNr LgorCQkJaWYgKCRAID1+IC9jb25mbGljdCB3aXRoIHJlY292ZXJ5L2kpCisJCQl7CisJCQkJZGlh ZyBxcShXQUlUIEZPUiBMU04gaW50ZXJydXB0ZWQsIGZhbGxpbmcgYmFjayB0byBwb2xsaW5nOgor JEApOworCQkJfQorCQkJZWxzZQorCQkJeworCQkJCWNyb2FrICJXQUlUIEZPUiBMU04gZmFpbGVk OiAkQCI7CisJCQl9CisJCX0KKwl9CisKKwkjIEZhbGwgYmFjayB0byBwb2xsaW5nIHBnX3N0YXRf cmVwbGljYXRpb24gb24gdGhlIHVwc3RyZWFtIGZvcjoKKwkjIC0gJ3NlbnQnIG1vZGUgKG5vIGNv cnJlc3BvbmRpbmcgV0FJVCBGT1IgTFNOIG1vZGUpCisJIyAtIFdoZW4gc3RhbmRieV9uYW1lIGlz IGEgc3RyaW5nIChlLmcuLCBzdWJzY3JpcHRpb24gbmFtZSkKKwkjIC0gV2hlbiB0aGUgc3RhbmRi eSBpcyBubyBsb25nZXIgaW4gcmVjb3ZlcnkgKHdhcyBwcm9tb3RlZCkKKwkjIC0gV2hlbiBXQUlU IEZPUiBMU04gd2FzIGludGVycnVwdGVkIChlLmcuLCBraWxsZWQgYnkgYSByZWNvdmVyeSBjb25m bGljdCkKIAlteSAkcXVlcnkgPSBxcVtTRUxFQ1QgJyR0YXJnZXRfbHNuJyA8PSAke21vZGV9X2xz biBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJwogICAgICAgICAgRlJPTSBwZ19jYXRhbG9nLnBnX3N0 YXRfcmVwbGljYXRpb24KICAgICAgICAgIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgSU4gKCckc3Rh bmRieV9uYW1lJywgJ3dhbHJlY2VpdmVyJyldOwotLSAKMi41MS4wCgo= --000000000000a2204d064801568b--