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 1wrX8P-000P1G-0L for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Aug 2026 08:37:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wrX8M-009btc-0Y for pgsql-hackers@arkaria.postgresql.org; Wed, 05 Aug 2026 08:37:54 +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 1wrX5P-008ls3-2C for pgsql-hackers@lists.postgresql.org; Wed, 05 Aug 2026 08:34:51 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wrWhx-00000000LJh-205t for pgsql-hackers@lists.postgresql.org; Wed, 05 Aug 2026 08:10:40 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1785917437; bh=tZUiVW/0OQwKhYsJzSAQdfz1AaYd9KIHCPC2tMMxW/4=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=SHwi6W9Rng52YHJ0u9ZHImMl48JFJGXtvtHny9GZs46W8KM028NhK6pHU8HxSTsAL RX8SgOtZvk2NUb14UXxM4iBcRyT3A4LuGawcbpXB5SExGyu8cDabkF6oyqAFOkQFyV aoqsbe83edeBNGIMGGqqXflOnM+dcJJ2XwK3h/gf5jrt4MUksocMcFn0nwjt83QYVs SR7bgbGBOH8rdO9fZWfkaCM999s9VAhsK93yTVHQTq3dvxEnzRjBFKaHn2wW5Xpbr5 QpIRJn6xZPLQKd7Jc+1fiaLY3eECSGyxrA0n8P1dW/u/x1b9x2k2ESz7OHA8+vxVh+ yqrBDKuyxReww== Received: from [192.168.23.100] (unknown [46.31.28.254]) (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: v.davydov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id DDBBD61749; Wed, 05 Aug 2026 11:10:36 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------3rvtTOWO4siKlLEhgRPGpzDa" Message-ID: <52971629-dcda-4687-90c8-bbba3ce05636@postgrespro.ru> Date: Wed, 5 Aug 2026 11:10:34 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Deadlock detector fails to activate on a hot standby replica To: Xuneng Zhou , JoongHyuk Shin Cc: pgsql-hackers@lists.postgresql.org, Fujii Masao References: <44c24dcf-5710-410f-b1b6-d10b315f3d51@postgrespro.ru> <279402b1-7f16-43fa-9dbf-df96a93245dd@postgrespro.ru> <16cdffd4-f06c-4957-9132-1849a719f3d4@postgrespro.ru> <790719db-f518-4300-8ce7-8f168cd0af84@postgrespro.ru> <7b1e8353-3d0a-48a1-bac6-2ac6ca91fbde@postgrespro.ru> <5c50d50c-5a9c-4a9e-9592-183cf4de1c80@postgrespro.ru> Content-Language: en-US From: Vitaly Davydov 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 3.0.0.9059, bases: 2026/08/05 05:33:00 #28649951 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. --------------3rvtTOWO4siKlLEhgRPGpzDa Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Dear Xuneng Zhou, All I've updated the patch for the master branch taking into account Xuneng Zhou's review notes. Please, take a look. Key notes are: 1. Renamed BufferIsReadyForCleanup to PinCountWaiterCheckReadyForCleanup and removed some asserts just after LockBufHdr to avoid stalling of other processes accessing this buffer if assert is activated. I'm not sure what are the adopted rules for asserts - should we avoid indefinite locks or other issues due to assert activation in general? 2. Removed elog(ERROR) from RegisterPinCountWaiter. I kept the asserts unchanged but I'm not sure about it. 3. Fixed the issue with fast path in ResolveRecoveryConflictWithBufferPin. I reused got_standby_delay_timeout variable in fast path when current time is greater than ltime. There is no need to check this condition every time in the for() loop. Checking the condition once and set got_standby_delay_timeout is enough. With best regards, Vitaly vitcpp@mail.ru (aka v.davydov@postgrespro.ru) --------------3rvtTOWO4siKlLEhgRPGpzDa Content-Type: text/x-patch; charset=UTF-8; name="v7-0001-Fix-recovery-conflict-wait-loop-for-buffer-pins-o.patch" Content-Disposition: attachment; filename*0="v7-0001-Fix-recovery-conflict-wait-loop-for-buffer-pins-o.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBhZTMxZmVkNmZhYTY1MDQ1NzM3YTc5MTIwNzQ4NjVjNTg1M2NiN2RjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBWaXRhbHkgRGF2eWRvdiA8di5kYXZ5ZG92QHBvc3Rn cmVzcHJvLnJ1PgpEYXRlOiBXZWQsIDEwIEp1biAyMDI2IDEyOjEyOjU0ICswOTAwClN1Ympl Y3Q6IFtQQVRDSCB2N10gRml4IHJlY292ZXJ5LWNvbmZsaWN0IHdhaXQgbG9vcCBmb3IgYnVm ZmVyIHBpbnMgb24gaG90CiBzdGFuZGJ5CgpXaGVuIHRoZSBzdGFydHVwIHByb2Nlc3Mgd2Fp dHMgb24gYSBidWZmZXIgcGluIGR1cmluZyByZWNvdmVyeSwgdGhlCmJ1ZmZlci1waW4gd2Fp dCBjb2RlIHRyZWF0cyBhbnkgbGF0Y2ggd2FrZXVwIGFzIGEgcmVsZXZhbnQgZXZlbnQsCnJl c2V0dGluZyBhbGwgdGltZW91dHMgYW5kIHJldHJ5aW5nLiBPbiBob3Qgc3RhbmRieSwgcGVy aW9kaWMgU0lHQUxSTQpzaWduYWxzIGZyb20gdW5yZWxhdGVkIHRpbWVycyAoc3VjaCBhcyBw cm9ncmVzcyByZXBvcnRpbmcpIGNhbiBhcnJpdmUKYmVmb3JlIHRoZSBkZWFkbG9jayB0aW1l b3V0IGV4cGlyZXMsIGNhdXNpbmcgdGhlIHdhaXQgbG9vcCB0byByZXNldAppbmRlZmluaXRl bHkgd2l0aG91dCBldmVyIHRyaWdnZXJpbmcgdGhlIGRlYWRsb2NrIGRldGVjdG9yLiBUaGlz IHJlc3VsdHMKaW4gYW4gaW5maW5pdGUgbG9vcCBpbiBMb2NrQnVmZmVyRm9yQ2xlYW51cCBh bmQgc3RhbGxzIHJlY292ZXJ5CmluZGVmaW5pdGVseSwgcGFydGljdWxhcmx5IHdoZW4gbWF4 X3N0YW5kYnlfc3RyZWFtaW5nX2RlbGF5ID0gLTEuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFn ZS9idWZmZXIvYnVmbWdyLmMgfCA3MyArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgICB8IDg0ICsrKysrKysrKysrKysrKysr KysrLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAgICAgICB8ICAx ICsKIDMgZmlsZXMgY2hhbmdlZCwgMTMyIGluc2VydGlvbnMoKyksIDI2IGRlbGV0aW9ucygt KQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggMTY5ODI5ZWIwMjAu LmVkNjk4OTZkNDMxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9i dWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAt MzQ2OSw2ICszNDY5LDI1IEBAIFdha2VQaW5Db3VudFdhaXRlcihCdWZmZXJEZXNjICpidWYp CiAJCVVubG9ja0J1ZkhkcihidWYpOwogfQogCisvKgorICogUmVnaXN0ZXIgdGhlIGN1cnJl bnQgcHJvY2VzcyBhcyB0aGUgcGluY291bnQgd2FpdGVyIGZvciBhIHNoYXJlZCBidWZmZXIs CisgKiBzZXQgdGhlIEJNX1BJTl9DT1VOVF9XQUlURVIgZmxhZywgYW5kIHVubG9jayB0aGUg YnVmZmVyIGhlYWRlci4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCB0aGUgYnVmZmVy IGhlYWRlciBsb2NrLCBwYXNzIHRoZSBjdXJyZW50IGJ1ZmZlciBzdGF0ZQorICogcmV0dXJu ZWQgYnkgTG9ja0J1ZkhkcigpLCBhbmQgZW5zdXJlIHRoYXQgbm8gb3RoZXIgYmFja2VuZCBp cyBhbHJlYWR5CisgKiByZWdpc3RlcmVkIGFzIHRoZSB3YWl0ZXIuCisgKi8KK3N0YXRpYyB2 b2lkCitSZWdpc3RlclBpbkNvdW50V2FpdGVyKEJ1ZmZlckRlc2MgKmJ1ZkhkciwgdWludDY0 IGJ1Zl9zdGF0ZSkKK3sKKwlBc3NlcnQoKGJ1Zl9zdGF0ZSAmIEJNX1BJTl9DT1VOVF9XQUlU RVIpID09IDAgfHwKKwkJICAgYnVmSGRyLT53YWl0X2JhY2tlbmRfcGdwcm9jbm8gPT0gTXlQ cm9jTnVtYmVyKTsKKworCWJ1Zkhkci0+d2FpdF9iYWNrZW5kX3BncHJvY25vID0gTXlQcm9j TnVtYmVyOworCVBpbkNvdW50V2FpdEJ1ZiA9IGJ1ZkhkcjsKKwlVbmxvY2tCdWZIZHJFeHQo YnVmSGRyLCBidWZfc3RhdGUsIEJNX1BJTl9DT1VOVF9XQUlURVIsIDAsIDApOworfQorCiAv KgogICogVW5waW5CdWZmZXIgLS0gbWFrZSBidWZmZXIgYXZhaWxhYmxlIGZvciByZXBsYWNl bWVudC4KICAqCkBAIC00NzYzLDYgKzQ3ODIsNjAgQEAgQnVmZmVyR2V0TFNOQXRvbWljKEJ1 ZmZlciBidWZmZXIpCiAjZW5kaWYKIH0KIAorLyoKKyAqIFBpbkNvdW50V2FpdGVyQ2hlY2tS ZWFkeUZvckNsZWFudXAKKyAqCQlSZWNoZWNrIHdoZXRoZXIgcGluIGNvdW50IHdhaXRlciBw cm9jZXNzICh0aGUgc3RhcnR1cCBwcm9jZXNzKQorICoJCWNhbiByZXRyeSBjbGVhbnVwIGxv Y2sgYWNxdWlzaXRpb24uCisgKgorICogVGhpcyBpcyBvbmx5IGZvciB0aGUgaG90LXN0YW5k YnkgcGF0aCBpbiBMb2NrQnVmZmVyRm9yQ2xlYW51cCgpLCB2aWEKKyAqIFJlc29sdmVSZWNv dmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbigpLCBhZnRlciBQcm9jV2FpdEZvclNpZ25hbCgp IHJldHVybnMuCisgKiBUaGUgY2FsbGVyIG11c3QgYWxyZWFkeSBiZSByZWdpc3RlcmVkIGFz IHRoZSBzaGFyZWQgYnVmZmVyJ3MKKyAqIEJNX1BJTl9DT1VOVF9XQUlURVIuCisgKgorICog UmV0dXJucyB0cnVlIHdoZW4gdGhlIGNhbGxlciBpdHNlbGYgaXMgdGhlIG9ubHkgcmVtYWlu aW5nIHBpbiBob2xkZXIsIHNvIGl0CisgKiBjYW4gcmV0cnkgdGFraW5nIHRoZSBjbGVhbnVw IGxvY2suIFJldHVybnMgZmFsc2UgaWYgb3RoZXIgYmFja2VuZHMgc3RpbGwKKyAqIHBpbiB0 aGUgc2hhcmVkIGJ1ZmZlci4gSW4gdGhhdCBjYXNlLCB0aGlzIGZ1bmN0aW9uIGd1YXJhbnRl ZXMgdGhhdCB0aGUKKyAqIGN1cnJlbnQgYmFja2VuZCByZW1haW5zIHJlZ2lzdGVyZWQgYXMg dGhlIHBpbmNvdW50IHdhaXRlciB0byBiZSB3b2tlbiB3aGVuCisgKiB0aGUgYnVmZmVyIHJl ZmNvdW50IGRyb3BzIHRvIDEuCisgKi8KK2Jvb2wKK1BpbkNvdW50V2FpdGVyQ2hlY2tSZWFk eUZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcikKK3sKKwlCdWZmZXJEZXNjICpidWZIZHI7CisJ dWludDY0CQlidWZfc3RhdGU7CisJdWludDMyCQlidWZfcmVmY291bnQ7CisKKwlBc3NlcnQo QnVmZmVySXNWYWxpZChidWZmZXIpKTsKKwlBc3NlcnQoIUJ1ZmZlcklzTG9jYWwoYnVmZmVy KSk7CisKKwlidWZIZHIgPSBHZXRCdWZmZXJEZXNjcmlwdG9yKGJ1ZmZlciAtIDEpOworCUFz c2VydChQaW5Db3VudFdhaXRCdWYgPT0gYnVmSGRyKTsKKworCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoYnVmSGRyKTsKKwlidWZfcmVmY291bnQgPSBCVUZfU1RBVEVfR0VUX1JFRkNPVU5U KGJ1Zl9zdGF0ZSk7CisKKwlpZiAoYnVmX3JlZmNvdW50ID09IDEpCisJeworCQlVbmxvY2tC dWZIZHIoYnVmSGRyKTsKKwkJcmV0dXJuIHRydWU7CisJfQorCisJaWYgKChidWZfc3RhdGUg JiBCTV9QSU5fQ09VTlRfV0FJVEVSKSAhPSAwICYmCisJCWJ1Zkhkci0+d2FpdF9iYWNrZW5k X3BncHJvY25vICE9IE15UHJvY051bWJlcikKKwl7CisJCVVubG9ja0J1ZkhkcihidWZIZHIp OworCQllbG9nKEVSUk9SLCAibXVsdGlwbGUgcHJvY2Vzc2VzIGF0dGVtcHRpbmcgdG8gd2Fp dCBmb3IgcGluY291bnQgMSIpOworCX0KKworCS8qCisJICogSWYgb3RoZXIgcHJvY2Vzc2Vz IHN0aWxsIHBpbiB0aGUgYnVmZmVyLCByZWdpc3RlciB0aGlzIHByb2Nlc3MgYWdhaW4gYXMK KwkgKiB0aGUgcGluY291bnQgd2FpdGVyIHRvIHdhaXQgYWdhaW4uCisJICovCisJUmVnaXN0 ZXJQaW5Db3VudFdhaXRlcihidWZIZHIsIGJ1Zl9zdGF0ZSk7CisKKwlyZXR1cm4gZmFsc2U7 Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoJCURyb3BSZWxhdGlvbkJ1ZmZlcnMKICAq CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMKaW5kZXggN2YwMTFlMDQ5OTAuLjA0NDI4 NGI3YmE1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2lwYy9zdGFuZGJ5LmMK KysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9pcGMvc3RhbmRieS5jCkBAIC03OTAsMjIgKzc5 MCwzNiBAQCBjbGVhbnVwOgogICogRGVhZGxvY2tzIGFyZSBleHRyZW1lbHkgcmFyZSwgYW5k IHJlbGF0aXZlbHkgZXhwZW5zaXZlIHRvIGNoZWNrIGZvciwKICAqIHNvIHdlIGRvbid0IGRv IGEgZGVhZGxvY2sgY2hlY2sgcmlnaHQgYXdheSAuLi4gb25seSBpZiB3ZSBoYXZlIGhhZCB0 byB3YWl0CiAgKiBhdCBsZWFzdCBkZWFkbG9ja190aW1lb3V0LgorICoKKyAqIFRoZSBjdXJy ZW50IHByb2Nlc3Mgc2hvdWxkIGJlIHRoZSB3YWl0ZXIgcHJvY2VzcyBhbmQgc2hvdWxkIGhh dmUKKyAqIHB1Ymxpc2hlZCB0aGUgd2FpdGVkIGJ1ZmZlciB2aWEgU2V0U3RhcnR1cEJ1ZmZl clBpbldhaXRCdWZJZCgpLgogICovCiB2b2lkCiBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdp dGhCdWZmZXJQaW4odm9pZCkKIHsKIAlUaW1lc3RhbXBUeiBsdGltZTsKKwlpbnQJCQlidWZp ZDsKIAogCUFzc2VydChJbkhvdFN0YW5kYnkpOwogCisJYnVmaWQgPSBHZXRTdGFydHVwQnVm ZmVyUGluV2FpdEJ1ZklkKCk7CisJQXNzZXJ0KGJ1ZmlkID49IDApOworCiAJbHRpbWUgPSBH ZXRTdGFuZGJ5TGltaXRUaW1lKCk7CiAKLQlpZiAoR2V0Q3VycmVudFRpbWVzdGFtcCgpID49 IGx0aW1lICYmIGx0aW1lICE9IDApCisJaWYgKGx0aW1lICE9IDAgJiYgR2V0Q3VycmVudFRp bWVzdGFtcCgpID49IGx0aW1lKQogCXsKIAkJLyoKIAkJICogV2UncmUgYWxyZWFkeSBiZWhp bmQsIHNvIGNsZWFyIGEgcGF0aCBhcyBxdWlja2x5IGFzIHBvc3NpYmxlLgogCQkgKi8KIAkJ U2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFJFQ09WRVJZX0NPTkZMSUNUX0JV RkZFUlBJTik7CisKKwkJLyoKKwkJICogU2V0IGRlbGF5IHRpbWVvdXQgZmxhZyBvbmNlIHRo ZSB0aW1lb3V0IGlzIHJlYWNoZWQgKHRoZSBjdXJyZW50CisJCSAqIHRpbWVzdGFtcCBpcyBn cmVhdGVyIHRoYW4gdGhlIHN0YW5kYnkgbGltaXQgdGltZSkuIFRoaXMgdmFyaWFibGUgaXMK KwkJICogdXNlIGJ5IHRpbWVvdXQgaGFuZGxlcnMgd2l0aCB0aGUgc2FtZSBwdXJwb3NlLgor CQkgKi8KKwkJZ290X3N0YW5kYnlfZGVsYXlfdGltZW91dCA9IHRydWU7CiAJfQogCWVsc2UK IAl7CkBAIC04MzMsMzUgKzg0Nyw1MyBAQCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhC dWZmZXJQaW4odm9pZCkKIAkJZW5hYmxlX3RpbWVvdXRzKHRpbWVvdXRzLCBjbnQpOwogCX0K IAotCS8qCi0JICogV2FpdCB0byBiZSBzaWduYWxlZCBieSBVbnBpbkJ1ZmZlcigpIG9yIGZv ciB0aGUgd2FpdCB0byBiZSBpbnRlcnJ1cHRlZAotCSAqIGJ5IG9uZSBvZiB0aGUgdGltZW91 dHMgZXN0YWJsaXNoZWQgYWJvdmUuCi0JICoKLQkgKiBXZSBhc3N1bWUgdGhhdCBvbmx5IFVu cGluQnVmZmVyKCkgYW5kIHRoZSB0aW1lb3V0IHJlcXVlc3RzIGVzdGFibGlzaGVkCi0JICog YWJvdmUgY2FuIHdha2UgdXMgdXAgaGVyZS4gV2FrZXVwUmVjb3ZlcnkoKSBjYWxsZWQgYnkg d2FscmVjZWl2ZXIgb3IKLQkgKiBTSUdIVVAgc2lnbmFsIGhhbmRsZXIsIGV0YyBjYW5ub3Qg ZG8gdGhhdCBiZWNhdXNlIGl0IHVzZXMgdGhlIGRpZmZlcmVudAotCSAqIGxhdGNoIGZyb20g dGhhdCBQcm9jV2FpdEZvclNpZ25hbCgpIHdhaXRzIG9uLgotCSAqLwotCVByb2NXYWl0Rm9y U2lnbmFsKFdBSVRfRVZFTlRfQlVGRkVSX0NMRUFOVVApOwotCi0JaWYgKGdvdF9zdGFuZGJ5 X2RlbGF5X3RpbWVvdXQpCi0JCVNlbmRSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbihS RUNPVkVSWV9DT05GTElDVF9CVUZGRVJQSU4pOwotCWVsc2UgaWYgKGdvdF9zdGFuZGJ5X2Rl YWRsb2NrX3RpbWVvdXQpCisJZm9yICg7OykKIAl7CiAJCS8qCi0JCSAqIFNlbmQgb3V0IGEg cmVxdWVzdCBmb3IgaG90LXN0YW5kYnkgYmFja2VuZHMgdG8gY2hlY2sgdGhlbXNlbHZlcyBm b3IKLQkJICogZGVhZGxvY2tzLgorCQkgKiBXYWl0IHRvIGJlIHNpZ25hbGVkIGJ5IFVucGlu QnVmZmVyKCkgb3IgZm9yIHRoZSB3YWl0IHRvIGJlCisJCSAqIGludGVycnVwdGVkIGJ5IG9u ZSBvZiB0aGUgdGltZW91dHMgZXN0YWJsaXNoZWQgYWJvdmUuCiAJCSAqCi0JCSAqIFhYWCBU aGUgc3Vic2VxdWVudCBSZXNvbHZlUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oKSB3 aWxsIHdhaXQKLQkJICogdG8gYmUgc2lnbmFsZWQgYnkgVW5waW5CdWZmZXIoKSBhZ2FpbiBh bmQgc2VuZCBhIHJlcXVlc3QgZm9yCi0JCSAqIGRlYWRsb2NrcyBjaGVjayBpZiBkZWFkbG9j a190aW1lb3V0IGhhcHBlbnMuIFRoaXMgY2F1c2VzIHRoZQotCQkgKiByZXF1ZXN0IHRvIGNv bnRpbnVlIHRvIGJlIHNlbnQgZXZlcnkgZGVhZGxvY2tfdGltZW91dCB1bnRpbCB0aGUKLQkJ ICogYnVmZmVyIGlzIHVucGlubmVkIG9yIGx0aW1lIGlzIHJlYWNoZWQuIFRoaXMgd291bGQg aW5jcmVhc2UgdGhlCi0JCSAqIHdvcmtsb2FkIGluIHRoZSBzdGFydHVwIHByb2Nlc3MgYW5k IGJhY2tlbmRzLiBJbiBwcmFjdGljZSBpdCBtYXkKLQkJICogbm90IGJlIHNvIGhhcm1mdWwg YmVjYXVzZSB0aGUgcGVyaW9kIHRoYXQgdGhlIGJ1ZmZlciBpcyBrZXB0IHBpbm5lZAotCQkg KiBpcyBiYXNpY2FsbHkgbm8gc28gbG9uZy4gQnV0IHdlIHNob3VsZCBmaXggdGhpcz8KKwkJ ICogUHJvY1dhaXRGb3JTaWduYWwoKSBjYW4gYWxzbyB3YWtlIHVwIGZvciB1bnJlbGF0ZWQg cmVhc29ucywgc28KKwkJICogcmVjaGVjayBsYXRlciB3aGV0aGVyIGNsZWFudXAgY2FuIHBy b2NlZWQuCiAJCSAqLwotCQlTZW5kUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUkVD T1ZFUllfQ09ORkxJQ1RfQlVGRkVSUElOX0RFQURMT0NLKTsKKwkJUHJvY1dhaXRGb3JTaWdu YWwoV0FJVF9FVkVOVF9CVUZGRVJfQ0xFQU5VUCk7CisKKwkJLyoKKwkJICogT25jZSB0aGUg cmVmZXJlbmNlIGNvdW50IGlzIDEsIHRoZSB3YWl0ZXIgcHJvY2VzcyBpdHNlbGYgaXMgdGhl CisJCSAqIG9ubHkgYmFja2VuZCBwaW5uaW5nIHRoZSBidWZmZXIgYXQgdGhlIG1vbWVudC4g VGhlcmUgaXMgYSBjaGFuY2UgdG8KKwkJICogbG9jayB0aGUgYnVmZmVyIGV4Y2x1c2l2ZWx5 LgorCQkgKi8KKwkJaWYgKFBpbkNvdW50V2FpdGVyQ2hlY2tSZWFkeUZvckNsZWFudXAoYnVm aWQgKyAxKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFNlbmQgdGhlIHJlY292ZXJ5IGNv bmZsaWN0IGlmIHRoZSBzdGFuZGJ5IGRlbGF5IHRpbWVvdXQgaXMgYWN0aXZhdGVkIG9yCisJ CSAqIHN0YW5kYnkgbGltaXQgdGltZSB3YXMgYWxyZWFkeSByZWFjaGVkLiBUaGUgc2Vjb25k IGNvbmRpdGlvbiBoYW5kbGVzIHRoZQorCQkgKiBmYXN0IHBhdGggd2hlbiB0aW1lb3V0cyBh cmUgbm90IGFjdGl2YXRlZC4KKwkJICovCisJCWlmIChnb3Rfc3RhbmRieV9kZWxheV90aW1l b3V0KQorCQl7CisJCQlTZW5kUmVjb3ZlcnlDb25mbGljdFdpdGhCdWZmZXJQaW4oUkVDT1ZF UllfQ09ORkxJQ1RfQlVGRkVSUElOKTsKKwkJCWJyZWFrOworCQl9CisJCWVsc2UgaWYgKGdv dF9zdGFuZGJ5X2RlYWRsb2NrX3RpbWVvdXQpCisJCXsKKwkJCS8qCisJCQkgKiBTZW5kIG91 dCBhIHJlcXVlc3QgZm9yIGhvdC1zdGFuZGJ5IGJhY2tlbmRzIHRvIGNoZWNrIHRoZW1zZWx2 ZXMKKwkJCSAqIGZvciBkZWFkbG9ja3MuCisJCQkgKgorCQkJICogWFhYIFRoZSBzdWJzZXF1 ZW50IFJlc29sdmVSZWNvdmVyeUNvbmZsaWN0V2l0aEJ1ZmZlclBpbigpIHdpbGwKKwkJCSAq IHdhaXQgdG8gYmUgc2lnbmFsZWQgYnkgVW5waW5CdWZmZXIoKSBhZ2FpbiBhbmQgc2VuZCBh IHJlcXVlc3QKKwkJCSAqIGZvciBkZWFkbG9ja3MgY2hlY2sgaWYgZGVhZGxvY2tfdGltZW91 dCBoYXBwZW5zLiBUaGlzIGNhdXNlcworCQkJICogdGhlIHJlcXVlc3QgdG8gY29udGludWUg dG8gYmUgc2VudCBldmVyeSBkZWFkbG9ja190aW1lb3V0IHVudGlsCisJCQkgKiB0aGUgYnVm ZmVyIGlzIHVucGlubmVkIG9yIGx0aW1lIGlzIHJlYWNoZWQuIFRoaXMgd291bGQgaW5jcmVh c2UKKwkJCSAqIHRoZSB3b3JrbG9hZCBpbiB0aGUgc3RhcnR1cCBwcm9jZXNzIGFuZCBiYWNr ZW5kcy4gSW4gcHJhY3RpY2UKKwkJCSAqIGl0IG1heSBub3QgYmUgc28gaGFybWZ1bCBiZWNh dXNlIHRoZSBwZXJpb2QgdGhhdCB0aGUgYnVmZmVyIGlzCisJCQkgKiBrZXB0IHBpbm5lZCBp cyBiYXNpY2FsbHkgbm8gc28gbG9uZy4gQnV0IHdlIHNob3VsZCBmaXggdGhpcz8KKwkJCSAq LworCQkJU2VuZFJlY292ZXJ5Q29uZmxpY3RXaXRoQnVmZmVyUGluKFJFQ09WRVJZX0NPTkZM SUNUX0JVRkZFUlBJTl9ERUFETE9DSyk7CisJCQlicmVhazsKKwkJfQogCX0KIAogCS8qCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZtZ3IuaAppbmRleCA2ODM3YjM1ZmM2ZC4uY2Y4ZWY1NGFlZGMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2luY2x1ZGUv c3RvcmFnZS9idWZtZ3IuaApAQCAtMzEzLDYgKzMxMyw3IEBAIGV4dGVybiBib29sIEJ1ZmZl cklzUGVybWFuZW50KEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIFhMb2dSZWNQdHIgQnVmZmVy R2V0TFNOQXRvbWljKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgQnVmZmVyR2V0VGFn KEJ1ZmZlciBidWZmZXIsIFJlbEZpbGVMb2NhdG9yICpybG9jYXRvciwKIAkJCQkJCSBGb3Jr TnVtYmVyICpmb3JrbnVtLCBCbG9ja051bWJlciAqYmxrbnVtKTsKK2V4dGVybiBib29sIFBp bkNvdW50V2FpdGVyQ2hlY2tSZWFkeUZvckNsZWFudXAoQnVmZmVyIGJ1ZmZlcik7CiAKIGV4 dGVybiB2b2lkIE1hcmtCdWZmZXJEaXJ0eUhpbnQoQnVmZmVyIGJ1ZmZlciwgYm9vbCBidWZm ZXJfc3RkKTsKIAotLSAKMi40My4wCgo= --------------3rvtTOWO4siKlLEhgRPGpzDa--