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 1uIAZo-00H2c4-9A for pgsql-bugs@arkaria.postgresql.org; Thu, 22 May 2025 18:23:33 +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 1uIAZm-006Y5I-Es for pgsql-bugs@arkaria.postgresql.org; Thu, 22 May 2025 18:23:30 +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.94.2) (envelope-from ) id 1uIAZl-006Y5A-PS for pgsql-bugs@lists.postgresql.org; Thu, 22 May 2025 18:23:30 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uIAZh-000Lol-1b for pgsql-bugs@lists.postgresql.org; Thu, 22 May 2025 18:23:28 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1747938202; bh=UYr5z0Cmf353Ct1FuwkHSGeB0qOjW16iAZB+kf5bHY0=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=oSiPDuVQoACrXdTghwUW+X7EkfryJ/HNqY46bHMmB0DplFS7G4625yQ7mmNkNAcUQ o/UK7+b4Tz9lCqDcGe+cECDXlQeeMBBwnl79jF4CIuQXgI3DRV5OdFkGQThy3szk7G THkZm26aAKX6Iv/0SbHKagQKfy/347GOHJWCuG5+fiERLEY9jS7rTZXf0vDktBJZB0 kXrcMAuMhloP3/jcI/IowAHTL1MQ2iQvPwNSkw8RJwQ/oufBvmSnhtoL5OqLPNgqAJ qnzvlDmJMcvsjVVTOTI384xRfVgcSxxoagV/stzvwmAVaWT3FCuzbFTZAJQoSu4uyp UupbQ5+xdPjNA== Received: from [172.30.48.82] (unknown [93.174.131.138]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.makhmutov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id E15DB6090E; Thu, 22 May 2025 21:23:21 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------cLP6Q4APxcPKxYHHwXDdp7ls" Message-ID: Date: Thu, 22 May 2025 21:22:02 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Standby server with cascade logical replication could not be properly stopped under load To: Bertrand Drouvot Cc: shveta malik , Ajin Cherian , pgsql-bugs@lists.postgresql.org References: <52138028-7246-421c-9161-4fa108b88070@postgrespro.ru> Content-Language: en-US From: Alexey Makhmutov In-Reply-To: X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2025/05/22 15:36:00 #27750695 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------cLP6Q4APxcPKxYHHwXDdp7ls Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Hi Bertrand, thank you for looking at this issue. On 5/22/25 18:31, Bertrand Drouvot wrote: > I agree with your analysis and I think that your proposed fix make sense. I > wonder if the comment on top of GetStandbyFlushRecPtr() could be updated a bit > though. I've tried to update method comment as well in the updated patch: 0001-Use-only-replayed-position-as-target-flush-point-3-pg-master.patch. The same patch could be applied on top of PG 17 as well. PG 16 does not have the slot synchronization logic, so its implementation of GetStandbyFlushRecPtr is slightly different and comments need to be updated to reflect this discrepancy as well. So, here is a variant of the same patch updated to be compatible with PG 16: 0002-Use-only-replayed-position-as-target-flush-point-3-pg-16.patch Thanks, Alexey --------------cLP6Q4APxcPKxYHHwXDdp7ls Content-Type: text/x-patch; charset=UTF-8; name="0001-Use-only-replayed-position-as-target-flush-point-3-pg-master.patch" Content-Disposition: attachment; filename*0="0001-Use-only-replayed-position-as-target-flush-point-3-pg-m"; filename*1="aster.patch" Content-Transfer-Encoding: base64 RnJvbSA1MmZlMmM1MDk0YzNhNjVmZjhiYWZjZWQ0YjBmNTIyMDA3MDY4ZWJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgTWFraG11dG92IDxhLm1ha2htdXRvdkBw b3N0Z3Jlc3Byby5ydT4KRGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAwNDowMjo1MCArMDMwMApT dWJqZWN0OiBbUEFUQ0hdIFVzZSBvbmx5IHJlcGxheWVkIHBvc2l0aW9uIGFzIHRhcmdldCBm bHVzaCBwb2ludCBmb3IgbG9naWNhbAogcmVwbGljYXRpb24KCkZvciBwaHlzaWNhbCB3YWxz ZW5kZXIgdGhlIEdldFN0YW5kYnlGbHVzaFJlY1B0ciBmdW5jdGlvbiByZXR1cm5zIHBvc2l0 aW9uCm9mIHRoZSBsYXRlc3Qgc3RvcmVkIFdBTCByZWNvcmQsIGFzIHdlIGNhbiBzdHJlYW0g ZGF0YSB0byBkb3duc3RyZWFtIGluc3RhbmNlCndpdGhvdXQgd2FpdGluZyBmb3IgaXQgYmVp bmcgbG9jYWxseSBhcHBsaWVkLiBIb3dldmVyLCBmb3IgbG9naWNhbCByZXBsaWNhdGlvbgp3 ZSBjYW4gc2VudCBkYXRhIHRvIGRvd25zdHJlYW0gY2xpZW50IG9ubHkgdXAgdG8gdGhlIGxv Y2FsbHkgYXBwbGllZCBwb3NpdGlvbi4KVGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQg d2hlbiB3ZSBkZWNpZGUgd2hldGhlciB3YWxzZW5kZXIgaGFzIHNlbnQgYWxsIHRoZQphdmFp bGFibGUgZGF0YSB0byBjbGllbnQgKCdjYXVnaHQgdXAnKS4gRHVyaW5nIHRoZSBzaHV0ZG93 biBwcm9jZXNzIHdhbHNlbmRlcgpiYWNrZW5kcyBhcmUgYWxsb3dlZCB0byB3b3JrIHVudGls IHRoZXkgcmVhY2ggdGhlICdjYXVnaHQgdXAnIHN0YXRlLCB3aGlsZQpyZWNvdmVyeSBwcm9j ZXNzIGlzIGFscmVhZHkgZGVhY3RpdmF0ZWQsIHNvIHRoZSBhcHBsaWVkIHBvc2l0aW9uIHdv bid0IGJlCm1vdmluZy4gSW4gdGhpcyBjYXNlIHdhbHNlbmRlciBmb3IgbG9naWNhbCByZXBs aWNhdGlvbiBzaG91bGQgd29yayBvbmx5IHVudGlsCml0IGNhdWdodCB1cCB3aXRoIHRoZSBs YXRlc3QgYXBwbGllZCByZWNvcmQsIG90aGVyd2lzZSBpdCB3aWxsIHN0dWNrIGluIHRoZQpp bmZpbml0ZSBsb29wIGFuZCBpbmhpYml0IGluc3RhbmNlIHNodXRkb3duLgotLS0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIHwgNDkgKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyOCBpbnNlcnRpb25zKCspLCAyMSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDlmYThi ZWI2MTAzLi40OWQ1YjNmZWE1YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKQEAgLTM1MTksNDIgKzM1MTksNDkgQEAgV2FsU25kRG9uZShXYWxTbmRTZW5kRGF0YUNh bGxiYWNrIHNlbmRfZGF0YSkKIH0KIAogLyoKLSAqIFJldHVybnMgdGhlIGxhdGVzdCBwb2lu dCBpbiBXQUwgdGhhdCBoYXMgYmVlbiBzYWZlbHkgZmx1c2hlZCB0byBkaXNrLgotICogVGhp cyBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBpbiByZWNvdmVyeS4KLSAqCiAgKiBUaGlz IGlzIGNhbGxlZCBlaXRoZXIgYnkgY2FzY2FkaW5nIHdhbHNlbmRlciB0byBmaW5kIFdBTCBw b3NpdGlvbiB0byBiZSBzZW50Ci0gKiB0byBhIGNhc2NhZGVkIHN0YW5kYnkgb3IgYnkgc2xv dCBzeW5jaHJvbml6YXRpb24gb3BlcmF0aW9uIHRvIHZhbGlkYXRlIHJlbW90ZQotICogc2xv dCdzIGxzbiBiZWZvcmUgc3luY2luZyBpdCBsb2NhbGx5LgorICogdG8gYSBkb3duc3RyZWFt IHNlcnZlciBvciBieSBzbG90IHN5bmNocm9uaXphdGlvbiBvcGVyYXRpb24gdG8gdmFsaWRh dGUgcmVtb3RlCisgKiBzbG90J3MgbHNuIGJlZm9yZSBzeW5jaW5nIGl0IGxvY2FsbHkuIEZv ciBzdHJlYW1pbmcgcmVwbGljYXRpb24gaXQgcmV0dXJucworICogbGF0ZXN0IHBvaW50IGlu IFdBTCB0aGF0IGhhcyBiZWVuIHNhZmVseSBmbHVzaGVkIHRvIGRpc2sgYW5kIGZvciBsb2dp Y2FsCisgKiByZXBsaWNhdGlvbiBpdCByZXR1cm5zIGxhdGVzdCByZXBsYXllZCBwb3NpdGlv bi4gVGhpcyBzaG91bGQgb25seSBiZSBjYWxsZWQKKyAqIHdoZW4gaW4gcmVjb3ZlcnkuCiAg KgotICogQXMgYSBzaWRlLWVmZmVjdCwgKnRsaSBpcyB1cGRhdGVkIHRvIHRoZSBUTEkgb2Yg dGhlIGxhc3QKLSAqIHJlcGxheWVkIFdBTCByZWNvcmQuCisgKiBBcyBhIHNpZGUtZWZmZWN0 LCAqdGxpIGlzIHVwZGF0ZWQgdG8gdGhlIFRMSSBvZiB0aGUgbGFzdCByZXBsYXllZCBXQUwg cmVjb3JkLgogICovCiBYTG9nUmVjUHRyCiBHZXRTdGFuZGJ5Rmx1c2hSZWNQdHIoVGltZUxp bmVJRCAqdGxpKQogewotCVhMb2dSZWNQdHIJcmVwbGF5UHRyOwogCVRpbWVMaW5lSUQJcmVw bGF5VExJOwotCVhMb2dSZWNQdHIJcmVjZWl2ZVB0cjsKLQlUaW1lTGluZUlECXJlY2VpdmVU TEk7CiAJWExvZ1JlY1B0cglyZXN1bHQ7CiAKIAlBc3NlcnQoYW1fY2FzY2FkaW5nX3dhbHNl bmRlciB8fCBJc1N5bmNpbmdSZXBsaWNhdGlvblNsb3RzKCkpOwogCi0JLyoKLQkgKiBXZSBj YW4gc2FmZWx5IHNlbmQgd2hhdCdzIGFscmVhZHkgYmVlbiByZXBsYXllZC4gQWxzbywgaWYg d2FscmVjZWl2ZXIKLQkgKiBpcyBzdHJlYW1pbmcgV0FMIGZyb20gdGhlIHNhbWUgdGltZWxp bmUsIHdlIGNhbiBzZW5kIGFueXRoaW5nIHRoYXQgaXQKLQkgKiBoYXMgc3RyZWFtZWQsIGJ1 dCBoYXNuJ3QgYmVlbiByZXBsYXllZCB5ZXQuCi0JICovCi0KLQlyZWNlaXZlUHRyID0gR2V0 V2FsUmN2Rmx1c2hSZWNQdHIoTlVMTCwgJnJlY2VpdmVUTEkpOwotCXJlcGxheVB0ciA9IEdl dFhMb2dSZXBsYXlSZWNQdHIoJnJlcGxheVRMSSk7CisJcmVzdWx0ID0gR2V0WExvZ1JlcGxh eVJlY1B0cigmcmVwbGF5VExJKTsKIAogCWlmICh0bGkpCiAJCSp0bGkgPSByZXBsYXlUTEk7 CiAKLQlyZXN1bHQgPSByZXBsYXlQdHI7Ci0JaWYgKHJlY2VpdmVUTEkgPT0gcmVwbGF5VExJ ICYmIHJlY2VpdmVQdHIgPiByZXBsYXlQdHIpCi0JCXJlc3VsdCA9IHJlY2VpdmVQdHI7CisJ LyoKKwkgKiBGb3IgcGh5c2ljYWwgcmVwbGljYXRpb24gd2UgY2FuIHNlbmQgZG93bnN0cmVh bSBhbnl0aGluZyB0aGF0IGhhcworCSAqIGFscmVhZHkgYmVlbiByZWNlaXZlZCBpZiB3YWxy ZWNlaXZlciBpcyBzdHJlYW1pbmcgV0FMIGZyb20gdGhlIHNhbWUKKwkgKiB0aW1lbGluZS4g VGhpcyBpcyBhbHNvIHRydWUgaWYgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBzbG90 CisJICogc3luY2hyb25pemF0aW9uIHJvdXRpbmVzIChNeVdhbFNuZCBpcyBOVUxMIGluIHN1 Y2ggY2FzZSksIHNpbmNlIHRoZXkKKwkgKiBhbHNvIG9ubHkgdHJhY2sgdGhlIHBoeXNpY2Fs bHkgZmx1c2hlZCBwb3NpdGlvbi4gSG93ZXZlciwgZm9yIGxvZ2ljYWwKKwkgKiByZXBsaWNh dGlvbiB0aGUgc2l0dWF0aW9uIGlzIGRpZmZlcmVudCBhbmQgd2UgY2FuIG9ubHkgZGVjb2Rl IGFuZCBzZW5kCisJICogZG93bnN0cmVhbSBkYXRhIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBh cHBsaWVkIHRvIHRoZSBjdXJyZW50IGluc3RhbmNlLgorCSAqIFRoaXMgZGlzdGluY3Rpb24g aXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZHVyaW5nIHNodXRkb3duLCBhcyB3YWxzZW5kZXIK KwkgKiBpcyBhbGxvd2VkIHRvIGNvbnRpbnVlIGl0cyB3b3JrIHVudGlsIGRhdGEgaXMgc2Vu dCB0byB0aGUgY2xpZW50IHVwIHRvCisJICogdGhlIGZsdXNoIHBvaW50LCBzbyBpdCBjYW4g Z2V0IHN0dWNrIGlmIHdlIHJldHVybiBzdG9yZWQgcmF0aGVyIHRoYW4KKwkgKiByZXBsYXll ZCBkYXRhIHBvc2l0aW9uLgorCSAqLworCWlmICghTXlXYWxTbmQgfHwgTXlXYWxTbmQtPmtp bmQgPT0gUkVQTElDQVRJT05fS0lORF9QSFlTSUNBTCkKKwl7CisJCVRpbWVMaW5lSUQJcmVj ZWl2ZVRMSTsKKwkJWExvZ1JlY1B0cglyZWNlaXZlUHRyID0gR2V0V2FsUmN2Rmx1c2hSZWNQ dHIoTlVMTCwgJnJlY2VpdmVUTEkpOworCisJCWlmIChyZWNlaXZlVExJID09IHJlcGxheVRM SSAmJiByZWNlaXZlUHRyID4gcmVzdWx0KQorCQkJcmVzdWx0ID0gcmVjZWl2ZVB0cjsKKwl9 CiAKIAlyZXR1cm4gcmVzdWx0OwogfQotLSAKMi40OS4wCgo= --------------cLP6Q4APxcPKxYHHwXDdp7ls Content-Type: text/x-patch; charset=UTF-8; name="0002-Use-only-replayed-position-as-target-flush-point-3-pg-16.patch" Content-Disposition: attachment; filename*0="0002-Use-only-replayed-position-as-target-flush-point-3-pg-1"; filename*1="6.patch" Content-Transfer-Encoding: base64 RnJvbSBhZDgwODVkNzY0NjQwMWY2MmQ5YjE3YWY1Mjc0MDQxYmZmNzdhNzIwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4ZXkgTWFraG11dG92IDxhLm1ha2htdXRvdkBw b3N0Z3Jlc3Byby5ydT4KRGF0ZTogVGh1LCAyMiBNYXkgMjAyNSAwNDowMjo1MCArMDMwMApT dWJqZWN0OiBbUEFUQ0hdIFVzZSBvbmx5IHJlcGxheWVkIHBvc2l0aW9uIGFzIHRhcmdldCBm bHVzaCBwb2ludCBmb3IgbG9naWNhbAogcmVwbGljYXRpb24KCkZvciBwaHlzaWNhbCB3YWxz ZW5kZXIgdGhlIEdldFN0YW5kYnlGbHVzaFJlY1B0ciBmdW5jdGlvbiByZXR1cm5zIHBvc2l0 aW9uCm9mIHRoZSBsYXRlc3Qgc3RvcmVkIFdBTCByZWNvcmQsIGFzIHdlIGNhbiBzdHJlYW0g ZGF0YSB0byBkb3duc3RyZWFtIGluc3RhbmNlCndpdGhvdXQgd2FpdGluZyBmb3IgaXQgYmVp bmcgbG9jYWxseSBhcHBsaWVkLiBIb3dldmVyLCBmb3IgbG9naWNhbCByZXBsaWNhdGlvbgp3 ZSBjYW4gc2VudCBkYXRhIHRvIGRvd25zdHJlYW0gY2xpZW50IG9ubHkgdXAgdG8gdGhlIGxv Y2FsbHkgYXBwbGllZCBwb3NpdGlvbi4KVGhpcyBkaXN0aW5jdGlvbiBpcyBpbXBvcnRhbnQg d2hlbiB3ZSBkZWNpZGUgd2hldGhlciB3YWxzZW5kZXIgaGFzIHNlbnQgYWxsIHRoZQphdmFp bGFibGUgZGF0YSB0byBjbGllbnQgKCdjYXVnaHQgdXAnKS4gRHVyaW5nIHRoZSBzaHV0ZG93 biBwcm9jZXNzIHdhbHNlbmRlcgpiYWNrZW5kcyBhcmUgYWxsb3dlZCB0byB3b3JrIHVudGls IHRoZXkgcmVhY2ggdGhlICdjYXVnaHQgdXAnIHN0YXRlLCB3aGlsZQpyZWNvdmVyeSBwcm9j ZXNzIGlzIGFscmVhZHkgZGVhY3RpdmF0ZWQsIHNvIHRoZSBhcHBsaWVkIHBvc2l0aW9uIHdv bid0IGJlCm1vdmluZy4gSW4gdGhpcyBjYXNlIHdhbHNlbmRlciBmb3IgbG9naWNhbCByZXBs aWNhdGlvbiBzaG91bGQgd29yayBvbmx5IHVudGlsCml0IGNhdWdodCB1cCB3aXRoIHRoZSBs YXRlc3QgYXBwbGllZCByZWNvcmQsIG90aGVyd2lzZSBpdCB3aWxsIHN0dWNrIGluIHRoZQpp bmZpbml0ZSBsb29wIGFuZCBpbmhpYml0IGluc3RhbmNlIHNodXRkb3duLgotLS0KIHNyYy9i YWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jIHwgNDMgKysrKysrKysrKysrKysrKy0t LS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCAxOSBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5k ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCmluZGV4IDFlMDQ4 MGIxZDU1Li5mOTFiYTYzNDU0YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVy LmMKQEAgLTMxODksMzcgKzMxODksNDIgQEAgV2FsU25kRG9uZShXYWxTbmRTZW5kRGF0YUNh bGxiYWNrIHNlbmRfZGF0YSkKIH0KIAogLyoKLSAqIFJldHVybnMgdGhlIGxhdGVzdCBwb2lu dCBpbiBXQUwgdGhhdCBoYXMgYmVlbiBzYWZlbHkgZmx1c2hlZCB0byBkaXNrLCBhbmQKLSAq IGNhbiBiZSBzZW50IHRvIHRoZSBzdGFuZGJ5LiBUaGlzIHNob3VsZCBvbmx5IGJlIGNhbGxl ZCB3aGVuIGluIHJlY292ZXJ5LAotICogaWUuIHdlJ3JlIHN0cmVhbWluZyB0byBhIGNhc2Nh ZGVkIHN0YW5kYnkuCisgKiBUaGlzIGlzIGNhbGxlZCBieSBjYXNjYWRpbmcgd2Fsc2VuZGVy IHRvIGZpbmQgV0FMIHBvc2l0aW9uIHRvIGJlIHNlbnQgdG8gYQorICogZG93bnN0cmVhbSBz ZXJ2ZXIuIEZvciBzdHJlYW1pbmcgcmVwbGljYXRpb24gaXQgcmV0dXJucyogbGF0ZXN0IHBv aW50IGluIFdBTAorICogdGhhdCBoYXMgYmVlbiBzYWZlbHkgZmx1c2hlZCB0byBkaXNrIGFu ZCBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBpdCByZXR1cm5zCisgKiBsYXRlc3QgcmVwbGF5 ZWQgcG9zaXRpb24uIFRoaXMgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gaW4gcmVjb3Zl cnkuCiAgKgotICogQXMgYSBzaWRlLWVmZmVjdCwgKnRsaSBpcyB1cGRhdGVkIHRvIHRoZSBU TEkgb2YgdGhlIGxhc3QKLSAqIHJlcGxheWVkIFdBTCByZWNvcmQuCisgKiBBcyBhIHNpZGUt ZWZmZWN0LCAqdGxpIGlzIHVwZGF0ZWQgdG8gdGhlIFRMSSBvZiB0aGUgbGFzdCByZXBsYXll ZCBXQUwgcmVjb3JkLgogICovCiBzdGF0aWMgWExvZ1JlY1B0cgogR2V0U3RhbmRieUZsdXNo UmVjUHRyKFRpbWVMaW5lSUQgKnRsaSkKIHsKLQlYTG9nUmVjUHRyCXJlcGxheVB0cjsKIAlU aW1lTGluZUlECXJlcGxheVRMSTsKLQlYTG9nUmVjUHRyCXJlY2VpdmVQdHI7Ci0JVGltZUxp bmVJRAlyZWNlaXZlVExJOwogCVhMb2dSZWNQdHIJcmVzdWx0OwogCi0JLyoKLQkgKiBXZSBj YW4gc2FmZWx5IHNlbmQgd2hhdCdzIGFscmVhZHkgYmVlbiByZXBsYXllZC4gQWxzbywgaWYg d2FscmVjZWl2ZXIKLQkgKiBpcyBzdHJlYW1pbmcgV0FMIGZyb20gdGhlIHNhbWUgdGltZWxp bmUsIHdlIGNhbiBzZW5kIGFueXRoaW5nIHRoYXQgaXQKLQkgKiBoYXMgc3RyZWFtZWQsIGJ1 dCBoYXNuJ3QgYmVlbiByZXBsYXllZCB5ZXQuCi0JICovCi0KLQlyZWNlaXZlUHRyID0gR2V0 V2FsUmN2Rmx1c2hSZWNQdHIoTlVMTCwgJnJlY2VpdmVUTEkpOwotCXJlcGxheVB0ciA9IEdl dFhMb2dSZXBsYXlSZWNQdHIoJnJlcGxheVRMSSk7CisJcmVzdWx0ID0gR2V0WExvZ1JlcGxh eVJlY1B0cigmcmVwbGF5VExJKTsKIAogCWlmICh0bGkpCiAJCSp0bGkgPSByZXBsYXlUTEk7 CiAKLQlyZXN1bHQgPSByZXBsYXlQdHI7Ci0JaWYgKHJlY2VpdmVUTEkgPT0gcmVwbGF5VExJ ICYmIHJlY2VpdmVQdHIgPiByZXBsYXlQdHIpCi0JCXJlc3VsdCA9IHJlY2VpdmVQdHI7CisJ LyoKKwkgKiBGb3IgcGh5c2ljYWwgcmVwbGljYXRpb24gd2UgY2FuIHNlbmQgZG93bnN0cmVh bSBhbnl0aGluZyB0aGF0IGhhcworCSAqIGFscmVhZHkgYmVlbiByZWNlaXZlZCBpZiB3YWxy ZWNlaXZlciBpcyBzdHJlYW1pbmcgV0FMIGZyb20gdGhlIHNhbWUKKwkgKiB0aW1lbGluZS4g SG93ZXZlciwgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gdGhlIHNpdHVhdGlvbiBpcyBkaWZm ZXJlbnQKKwkgKiBhbmQgd2UgY2FuIG9ubHkgZGVjb2RlIGFuZCBzZW5kIGRvd25zdHJlYW0g ZGF0YSB0aGF0IGhhcyBhbHJlYWR5IGJlZW4KKwkgKiBhcHBsaWVkIHRvIHRoZSBjdXJyZW50 IGluc3RhbmNlLiBUaGlzIGRpc3RpbmN0aW9uIGlzIGVzcGVjaWFsbHkKKwkgKiBpbXBvcnRh bnQgZHVyaW5nIHNodXRkb3duLCBhcyB3YWxzZW5kZXIgaXMgYWxsb3dlZCB0byBjb250aW51 ZSBpdHMgd29yaworCSAqIHVudGlsIGRhdGEgaXMgc2VudCB0byB0aGUgY2xpZW50IHVwIHRv IHRoZSBmbHVzaCBwb2ludCwgc28gaXQgY2FuIGdldAorCSAqIHN0dWNrIGlmIHdlIHJldHVy biBzdG9yZWQgcmF0aGVyIHRoYW4gcmVwbGF5ZWQgZGF0YSBwb3NpdGlvbi4KKwkgKi8KKwlp ZiAoTXlXYWxTbmQtPmtpbmQgPT0gUkVQTElDQVRJT05fS0lORF9QSFlTSUNBTCkKKwl7CisJ CVRpbWVMaW5lSUQJcmVjZWl2ZVRMSTsKKwkJWExvZ1JlY1B0cglyZWNlaXZlUHRyID0gR2V0 V2FsUmN2Rmx1c2hSZWNQdHIoTlVMTCwgJnJlY2VpdmVUTEkpOworCisJCWlmIChyZWNlaXZl VExJID09IHJlcGxheVRMSSAmJiByZWNlaXZlUHRyID4gcmVzdWx0KQorCQkJcmVzdWx0ID0g cmVjZWl2ZVB0cjsKKwl9CiAKIAlyZXR1cm4gcmVzdWx0OwogfQotLSAKMi40OS4wCgo= --------------cLP6Q4APxcPKxYHHwXDdp7ls--