Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piBJP-0004ac-Cy for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Mar 2023 09:44:47 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1piBJN-00018d-GW for pgsql-hackers@arkaria.postgresql.org; Fri, 31 Mar 2023 09:44:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1piBJN-00018U-12 for pgsql-hackers@lists.postgresql.org; Fri, 31 Mar 2023 09:44:45 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1piBJF-00013b-Ok for pgsql-hackers@postgresql.org; Fri, 31 Mar 2023 09:44:44 +0000 Received: by mail-pf1-x42c.google.com with SMTP id q20so3261407pfs.2 for ; Fri, 31 Mar 2023 02:44:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20210112.gappssmtp.com; s=20210112; t=1680255876; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=R0cJiKvp4ricRDkaulGrukhtzRFKSYYPaWt2pW8Z45I=; b=rCZiIB2gE93j5P5ru80gI9YURJo4h4aYfkU5U7eGQkiq3YqgHhVobZsv4HDBWSd+KM ycQSwnPnDhe0+69Uoil2qYv3V+YVDRJL6cINFA4Sj4lohQ99ioGxsDPRIUc77u2hXeor 9/WKb5saGlCWc8ZSfmiLM3xKaX9PvYsA9aqwVJ0Id75kUhrTyFKXsuIeyUGemvXHKCnV AFFwgOySCulQho5Q+wr0X3FAZBR6Xlas4cC/dNXCPS0kPzMgfvreGLNoNtAC9RgC5NJR /5sDEQ0MFPhCc/bcaRzszoPXlw9MpMNRGV/z8xCpmnNLCIPlQ/IiHfymoayVnt+qZ6J9 ymWQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1680255876; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=R0cJiKvp4ricRDkaulGrukhtzRFKSYYPaWt2pW8Z45I=; b=AMjRQB7EXTpfL/t/gKpklS8C+b4aVEBs9Xx4s1LtTDEQxPxx5A9Ed9SSVpEb8FSUD4 aF5vaivk+9sCckaOoEcyb2VYkFRH6jTw0GNDuo3FGq5EWEfgCtFVRC7Dgq3LlVAWhoRK Wh9iDdPsF5Gb1F/L+9Pc1PsO+91WmRUcmyWXdgD2xGYJCFBnUddxFoI6WVjUa/Vc3xUX fQoTp0WjWQlWA+e56zaRGuYKC6Bdr2N5+zgtMAdvrHyThUmQIk20DCrNSz0m3Imh+bHM ab1/zJxQ+duq7Iw7+LqepA72eymwRSRkHUi5VHxk8OW+xnxC4cGPLwLtHLM/TpPVCudN E98g== X-Gm-Message-State: AAQBX9f74NpcypjZDj1iWeV5PZ17c6hM88/wRK0wAZbEKHi9EgDjiHKO /QH2EBkIczuH9BEVIGW99yNoYQ== X-Google-Smtp-Source: AKy350al36tH/4BuJKwa58xVnYgLOvlI4zK0E9wT5iLjIrCUsTuJ4JQHkZhH2XTmlnibd/lh+9DgDQ== X-Received: by 2002:aa7:9423:0:b0:627:f0b9:d5c1 with SMTP id y3-20020aa79423000000b00627f0b9d5c1mr24770655pfo.17.1680255875824; Fri, 31 Mar 2023 02:44:35 -0700 (PDT) Received: from jeff-laptop.lan (c-73-170-46-202.hsd1.ca.comcast.net. [73.170.46.202]) by smtp.gmail.com with ESMTPSA id u4-20020a62ed04000000b005a84ef49c63sm1327418pfh.214.2023.03.31.02.44.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 31 Mar 2023 02:44:35 -0700 (PDT) Message-ID: Subject: Re: Minimal logical decoding on standbys From: Jeff Davis To: "Drouvot, Bertrand" , Andres Freund Cc: Robert Haas , Thomas Munro , Alvaro Herrera , Ibrar Ahmed , Amit Khandekar , fabriziomello@gmail.com, tushar , Rahila Syed , pgsql-hackers Date: Fri, 31 Mar 2023 02:44:33 -0700 In-Reply-To: References: <05c0c4f3-82eb-bc6d-c876-5a265c05927b@gmail.com> <20230106034036.2m4qnn7ep7b5ipet@awork3.anarazel.de> <490206c5-bcde-e558-628a-dc67dae4d439@gmail.com> <20230119024617.jzsgpcrgjdc6ysge@awork3.anarazel.de> <94d9d47e-72f4-393a-246e-e3fe8db7b741@gmail.com> <2d314c22b9e03415aa1c7d8fd1f698dae60effa7.camel@j-davis.com> <061eeb26-156e-6011-02b6-b4b1422e2aa6@gmail.com> <8a7da0c2-b7fe-1c78-4e47-a16239bf4839@gmail.com> <6ab352de1553c1e3d0c7d97c038dc470ca51e772.camel@j-davis.com> <4df984c8-3adb-3b69-0e4e-a491097862ce@gmail.com> Content-Type: multipart/mixed; boundary="=-L0xav3YRM/42e9R+aI7D" User-Agent: Evolution 3.44.4-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-L0xav3YRM/42e9R+aI7D Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2023-03-08 at 11:25 +0100, Drouvot, Bertrand wrote: > - Maybe ConditionVariableEventSleep() should take care of the > =E2=80=9CWaitEventSetWait returns 1 and cvEvent.event =3D=3D WL_POSTMASTE= R_DEATH=E2=80=9D > case? Thank you, done. I think the nearby line was also wrong, returning true when there was no timeout. I combined the lines and got rid of the early return so it can check the list and timeout condition like normal. Attached. > - Maybe ConditionVariableEventSleep() could accept and deal with the > CV being NULL? > I used it in the POC attached to handle logical decoding on the > primary server case. > One option should be to create a dedicated CV for that case though. I don't think it's a good idea to have a CV-based API that doesn't need a CV. Wouldn't that just be a normal WaitEventSet? > - In the POC attached I had to add this extra condition =E2=80=9C(cv && > !RecoveryInProgress())=E2=80=9D to avoid waiting on the timeout when ther= e is > a promotion. > That makes me think that we may want to add 2 extra parameters (as 2 > functions returning a bool?) to ConditionVariableEventSleep() > to check whether or not we still want to test the socket or the CV > wake up in each loop iteration. That seems like a complex API. Would it work to signal the CV during promotion instead? > Also 3 additional remarks: >=20 > 1) About InitializeConditionVariableWaitSet() and > ConditionVariableWaitSetCreate(): I'm not sure about the naming as > there is no CV yet (they "just" deal with WaitEventSet). It's a WaitEventSet that contains the conditions always required for any CV, and allows you to add in more. > 3) >=20 > I wonder if there is no race conditions: ConditionVariableWaitSet is > being initialized with PGINVALID_SOCKET > as WL_LATCH_SET and might be also (if IsUnderPostmaster) be > initialized with PGINVALID_SOCKET as WL_EXIT_ON_PM_DEATH. >=20 > So IIUC, the patch is introducing 2 new possible source of wake up. Those should be the same conditions already required by ConditionVariableTimedSleep() in master, right? Regards, Jeff Davis --=-L0xav3YRM/42e9R+aI7D Content-Disposition: attachment; filename="v2-0001-Introduce-ConditionVariableEventSleep.patch" Content-Transfer-Encoding: base64 Content-Type: text/x-patch; name="v2-0001-Introduce-ConditionVariableEventSleep.patch"; charset="UTF-8" RnJvbSAyZjA1Y2FiOTAxMjk1MGFlOTI5MGZjY2JiNjM2NmQ1MGZjMDE1NTNlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBX ZWQsIDEgTWFyIDIwMjMgMjA6MDI6NDIgLTA4MDAKU3ViamVjdDogW1BBVENIIHYyXSBJbnRyb2R1 Y2UgQ29uZGl0aW9uVmFyaWFibGVFdmVudFNsZWVwKCkuCgpUaGUgbmV3IEFQSSB0YWtlcyBhIFdh aXRFdmVudFNldCB3aGljaCBjYW4gaW5jbHVkZSBzb2NrZXQgZXZlbnRzLiBUaGUKV2FpdEV2ZW50 U2V0IG11c3QgaGF2ZSBiZWVuIGNyZWF0ZWQgYnkKQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0Q3Jl YXRlKCksIGFub3RoZXIgbmV3IGZ1bmN0aW9uLCBzbyB0aGF0IGl0CmluY2x1ZGVzIHRoZSB3YWl0 IGV2ZW50cyBuZWNlc3NhcnkgZm9yIGEgY29uZGl0aW9uIHZhcmlhYmxlLgotLS0KIHNyYy9iYWNr ZW5kL3N0b3JhZ2UvbG1nci9jb25kaXRpb25fdmFyaWFibGUuYyB8IDEwNiArKysrKysrKysrKysr KysrLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMgICAgICAgICAgICAgICB8ICAg NiArCiBzcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMgICAgICAgICAgICAgfCAgIDEg Kwogc3JjL2luY2x1ZGUvc3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaCAgICAgIHwgIDEwICsr CiA0IGZpbGVzIGNoYW5nZWQsIDExNSBpbnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9jb25kaXRpb25fdmFyaWFibGUuYyBi L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9jb25kaXRpb25fdmFyaWFibGUuYwppbmRleCA3ZTJi YmY0NmQ5Li4zZGJmYTc0NjhiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv Y29uZGl0aW9uX3ZhcmlhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2NvbmRp dGlvbl92YXJpYWJsZS5jCkBAIC0yNyw5ICsyNywyOSBAQAogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bp bi5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKKyNkZWZpbmUgQ29uZGl0aW9uVmFy aWFibGVXYWl0U2V0TGF0Y2hQb3MJMAorCiAvKiBJbml0aWFsbHksIHdlIGFyZSBub3QgcHJlcGFy ZWQgdG8gc2xlZXAgb24gYW55IGNvbmRpdGlvbiB2YXJpYWJsZS4gKi8KIHN0YXRpYyBDb25kaXRp b25WYXJpYWJsZSAqY3Zfc2xlZXBfdGFyZ2V0ID0gTlVMTDsKIAorLyogVXNlZCBieSBDb25kaXRp b25WYXJpYWJsZVNsZWVwKCkgYW5kIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVlcCgpLiAqLwor c3RhdGljIFdhaXRFdmVudFNldCAqQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0ID0gTlVMTDsKKwor LyoKKyAqIEluaXRpYWxpemUgdGhlIHByb2Nlc3MtbG9jYWwgY29uZGl0aW9uIHZhcmlhYmxlIFdh aXRFdmVudFNldC4KKyAqCisgKiBUaGlzIG11c3QgYmUgY2FsbGVkIG9uY2UgZHVyaW5nIHN0YXJ0 dXAgb2YgYW55IHByb2Nlc3MgdGhhdCBjYW4gd2FpdCBvbgorICogY29uZGl0aW9uIHZhcmlhYmxl cywgYmVmb3JlIGl0IGlzc3VlcyBhbnkgQ29uZGl0aW9uVmFyaWFibGVJbml0KCkgY2FsbHMuCisg Ki8KK3ZvaWQKK0luaXRpYWxpemVDb25kaXRpb25WYXJpYWJsZVdhaXRTZXQodm9pZCkKK3sKKwlB c3NlcnQoQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0ID09IE5VTEwpOworCisJQ29uZGl0aW9uVmFy aWFibGVXYWl0U2V0ID0gQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0Q3JlYXRlKAorCQlUb3BNZW1v cnlDb250ZXh0LCAwKTsKK30KKwogLyoKICAqIEluaXRpYWxpemUgYSBjb25kaXRpb24gdmFyaWFi bGUuCiAgKi8KQEAgLTQwLDYgKzYwLDUxIEBAIENvbmRpdGlvblZhcmlhYmxlSW5pdChDb25kaXRp b25WYXJpYWJsZSAqY3YpCiAJcHJvY2xpc3RfaW5pdCgmY3YtPndha2V1cCk7CiB9CiAKKy8qCisg KiBDcmVhdGUgYSBXYWl0RXZlbnRTZXQgZm9yIENvbmRpdGlvblZhcmlhYmxlRXZlbnRTbGVlcCgp LiBUaGlzIHNob3VsZCBiZQorICogdXNlZCB3aGVuIHRoZSBjYWxsZXIgb2YgQ29uZGl0aW9uVmFy aWFibGVFdmVudFNsZWVwKCkgd291bGQgbGlrZSB0byB3YWtlIHVwCisgKiBvbiBlaXRoZXIgdGhl IGNvbmRpdGlvbiB2YXJpYWJsZSBzaWduYWwgb3IgYSBzb2NrZXQgZXZlbnQuIEZvciBleGFtcGxl OgorICoKKyAqICAgQ29uZGl0aW9uVmFyaWFibGVJbml0KCZjdik7CisgKiAgIHdhaXRzZXQgPSBD b25kaXRpb25WYXJpYWJsZVdhaXRTZXRDcmVhdGUobWN4dCwgMSk7CisgKiAgIGV2ZW50X3BvcyA9 IEFkZFdhaXRFdmVudFRvU2V0KHdhaXRzZXQsIDAsIHNvY2ssIE5VTEwsIE5VTEwpOworICogICAu Li4KKyAqICAgQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmY3YpOworICogICB3aGls ZSAoLi4uY29uZGl0aW9uIG5vdCBtZXQuLi4pCisgKiAgIHsKKyAqICAgICAgIHNvY2tldF93YWl0 X2V2ZW50cyA9IC4uLgorICogICAgICAgTW9kaWZ5V2FpdEV2ZW50KHdhaXRzZXQsIGV2ZW50X3Bv cywgc29ja2V0X3dhaXRfZXZlbnRzLCBOVUxMKTsKKyAqICAgICAgIENvbmRpdGlvblZhcmlhYmxl RXZlbnRTbGVlcCgmY3YsIHdhaXRzZXQsIC4uLik7CisgKiAgIH0KKyAqICAgQ29uZGl0aW9uVmFy aWFibGVDYW5jZWxTbGVlcCgpOworICoKKyAqIFRoZSB3YWl0c2V0IGlzIGNyZWF0ZWQgd2l0aCB0 aGUgc3RhbmRhcmQgZXZlbnRzIGZvciBhIGNvbmRpdGlvbiB2YXJpYWJsZSwKKyAqIGFuZCByb29t IGZvciBhZGRpbmcgbl9zb2NrZXRfZXZlbnRzIGFkZGl0aW9uYWwgc29ja2V0IGV2ZW50cy4gVGhl CisgKiBpbml0aWFsbHktZmlsbGVkIGV2ZW50IHBvc2l0aW9ucyBzaG91bGQgbm90IGJlIG1vZGlm aWVkLCBidXQgYWRkZWQgc29ja2V0CisgKiBldmVudHMgY2FuIGJlIG1vZGlmaWVkLiBUaGUgc2Ft ZSB3YWl0c2V0IGNhbiBiZSB1c2VkIGZvciBtdWx0aXBsZSBjb25kaXRpb24KKyAqIHZhcmlhYmxl cyBhcyBsb25nIGFzIHRoZSBjYWxsZXJzIG9mIENvbmRpdGlvblZhcmlhYmxlRXZlbnRTbGVlcCgp IGFyZQorICogaW50ZXJlc3RlZCBpbiB0aGUgc2FtZSBzb2NrZXRzLgorICovCitXYWl0RXZlbnRT ZXQgKgorQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0Q3JlYXRlKE1lbW9yeUNvbnRleHQgbWN4dCwg aW50IG5fc29ja2V0X2V2ZW50cykKK3sKKwlpbnQJCQkJIGxhdGNoX3BvcyAgIFBHX1VTRURfRk9S X0FTU0VSVFNfT05MWTsKKwlpbnQJCQkJIG5fY3ZfZXZlbnRzID0gSXNVbmRlclBvc3RtYXN0ZXIg PyAyIDogMTsKKwlpbnQJCQkJIG5ldmVudHMJID0gbl9jdl9ldmVudHMgKyBuX3NvY2tldF9ldmVu dHM7CisJV2FpdEV2ZW50U2V0ICAgICp3YWl0c2V0CSA9IENyZWF0ZVdhaXRFdmVudFNldChtY3h0 LCBuZXZlbnRzKTsKKworCWxhdGNoX3BvcyA9IEFkZFdhaXRFdmVudFRvU2V0KHdhaXRzZXQsIFdM X0xBVENIX1NFVCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJCQkJICBNeUxhdGNoLCBOVUxMKTsK KworCWlmIChJc1VuZGVyUG9zdG1hc3RlcikKKwkJQWRkV2FpdEV2ZW50VG9TZXQod2FpdHNldCwg V0xfRVhJVF9PTl9QTV9ERUFUSCwgUEdJTlZBTElEX1NPQ0tFVCwKKwkJCQkJCSAgTlVMTCwgTlVM TCk7CisKKwlBc3NlcnQobGF0Y2hfcG9zID09IENvbmRpdGlvblZhcmlhYmxlV2FpdFNldExhdGNo UG9zKTsKKworCXJldHVybiB3YWl0c2V0OworfQorCiAvKgogICogUHJlcGFyZSB0byB3YWl0IG9u IGEgZ2l2ZW4gY29uZGl0aW9uIHZhcmlhYmxlLgogICoKQEAgLTk3LDcgKzE2Miw4IEBAIENvbmRp dGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2KQogdm9pZAog Q29uZGl0aW9uVmFyaWFibGVTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIHVpbnQzMiB3YWl0 X2V2ZW50X2luZm8pCiB7Ci0JKHZvaWQpIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVlcChjdiwg LTEgLyogbm8gdGltZW91dCAqLyAsCisJKHZvaWQpIENvbmRpdGlvblZhcmlhYmxlRXZlbnRTbGVl cChjdiwgQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0LAorCQkJCQkJCQkJICAgLTEgLyogbm8gdGlt ZW91dCAqLyAsCiAJCQkJCQkJCQkgICB3YWl0X2V2ZW50X2luZm8pOwogfQogCkBAIC0xMTEsMTEg KzE3NywyNyBAQCBDb25kaXRpb25WYXJpYWJsZVNsZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwg dWludDMyIHdhaXRfZXZlbnRfaW5mbykKIGJvb2wKIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVl cChDb25kaXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJCQkJCQl1aW50MzIgd2Fp dF9ldmVudF9pbmZvKQoreworCXJldHVybiBDb25kaXRpb25WYXJpYWJsZUV2ZW50U2xlZXAoY3Ys IENvbmRpdGlvblZhcmlhYmxlV2FpdFNldCwgdGltZW91dCwKKwkJCQkJCQkJCSAgIHdhaXRfZXZl bnRfaW5mbyk7Cit9CisKKy8qCisgKiBXYWl0IGZvciBhIGNvbmRpdGlvbiB2YXJpYWJsZSB0byBi ZSBzaWduYWxlZCwgYSB0aW1lb3V0IHRvIGJlIHJlYWNoZWQsIG9yIGEKKyAqIHNvY2tldCBldmVu dCBpbiB0aGUgZ2l2ZW4gd2FpdHNldC4gVGhlIHdhaXRzZXQgbXVzdCBoYXZlIGJlZW4gY3JlYXRl ZCBieQorICogQ29uZGl0aW9uVmFyaWFibGVXYWl0U2V0Q3JlYXRlKCkuCisgKgorICogUmV0dXJu cyB0cnVlIHdoZW4gdGltZW91dCBleHBpcmVzLCBvdGhlcndpc2UgcmV0dXJucyBmYWxzZS4KKyAq CisgKiBTZWUgQ29uZGl0aW9uVmFyaWFibGVTbGVlcCgpIGZvciBnZW5lcmFsIHVzYWdlLgorICov Citib29sCitDb25kaXRpb25WYXJpYWJsZUV2ZW50U2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2 LCBXYWl0RXZlbnRTZXQgKndhaXRzZXQsCisJCQkJCQkJbG9uZyB0aW1lb3V0LCB1aW50MzIgd2Fp dF9ldmVudF9pbmZvKQogewogCWxvbmcJCWN1cl90aW1lb3V0ID0gLTE7CiAJaW5zdHJfdGltZQlz dGFydF90aW1lOwogCWluc3RyX3RpbWUJY3VyX3RpbWU7Ci0JaW50CQkJd2FpdF9ldmVudHM7CiAK IAkvKgogCSAqIElmIHRoZSBjYWxsZXIgZGlkbid0IHByZXBhcmUgdG8gc2xlZXAgZXhwbGljaXRs eSwgdGhlbiBkbyBzbyBub3cgYW5kCkBAIC0xNDcsMjQgKzIyOSwzMiBAQCBDb25kaXRpb25WYXJp YWJsZVRpbWVkU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJCUlO U1RSX1RJTUVfU0VUX0NVUlJFTlQoc3RhcnRfdGltZSk7CiAJCUFzc2VydCh0aW1lb3V0ID49IDAg JiYgdGltZW91dCA8PSBJTlRfTUFYKTsKIAkJY3VyX3RpbWVvdXQgPSB0aW1lb3V0OwotCQl3YWl0 X2V2ZW50cyA9IFdMX0xBVENIX1NFVCB8IFdMX1RJTUVPVVQgfCBXTF9FWElUX09OX1BNX0RFQVRI OwogCX0KLQllbHNlCi0JCXdhaXRfZXZlbnRzID0gV0xfTEFUQ0hfU0VUIHwgV0xfRVhJVF9PTl9Q TV9ERUFUSDsKIAogCXdoaWxlICh0cnVlKQogCXsKIAkJYm9vbAkJZG9uZSA9IGZhbHNlOworCQlX YWl0RXZlbnQJY3ZFdmVudDsKKwkJaW50CQkJbmV2ZW50czsKIAogCQkvKgotCQkgKiBXYWl0IGZv ciBsYXRjaCB0byBiZSBzZXQuICAoSWYgd2UncmUgYXdha2VuZWQgZm9yIHNvbWUgb3RoZXIKLQkJ ICogcmVhc29uLCB0aGUgY29kZSBiZWxvdyB3aWxsIGNvcGUgYW55d2F5LikKKwkJICogV2FpdCBm b3IgbGF0Y2ggdG8gYmUgc2V0LCBvciBvdGhlciBldmVudHMgd2hpY2ggd2lsbCBiZSBoYW5kbGVk CisJCSAqIGJlbG93LgogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRjaChNeUxhdGNoLCB3YWl0X2V2 ZW50cywgY3VyX3RpbWVvdXQsIHdhaXRfZXZlbnRfaW5mbyk7CisJCW5ldmVudHMgPSBXYWl0RXZl bnRTZXRXYWl0KHdhaXRzZXQsIGN1cl90aW1lb3V0LCAmY3ZFdmVudCwKKwkJCQkJCQkJICAgMSwg d2FpdF9ldmVudF9pbmZvKTsKIAogCQkvKiBSZXNldCBsYXRjaCBiZWZvcmUgZXhhbWluaW5nIHRo ZSBzdGF0ZSBvZiB0aGUgd2FpdCBsaXN0LiAqLwogCQlSZXNldExhdGNoKE15TGF0Y2gpOwogCisJ CS8qCisJCSAqIElmIHRoZSB3YWtldXAgd2FzIGR1ZSB0byBhIHNvY2tldCBldmVudCBvciBwb3N0 bWFzdGVyIGRlYXRoLCB0aGVuCisJCSAqIHdlIG11c3QgcmV0dXJuIHRvIHRoZSBjYWxsZXIuCisJ CSAqLworCQlpZiAobmV2ZW50cyA9PSAxICYmCisJCQkoY3ZFdmVudC5ldmVudHMgJiAoV0xfU09D S0VUX01BU0sgfCBXTF9QT1NUTUFTVEVSX0RFQVRIKSkgIT0gMCkKKwkJCWRvbmUgPSB0cnVlOwor CiAJCS8qCiAJCSAqIElmIHRoaXMgcHJvY2VzcyBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhlIHdh aXQgbGlzdCwgdGhlbiB3ZSBrbm93CiAJCSAqIHRoYXQgaXQgaGFzIGJlZW4gc2lnbmFsZWQgYnkg Q29uZGl0aW9uVmFyaWFibGVTaWduYWwgKG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9y YWdlL2xtZ3IvcHJvYy5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL3Byb2MuYwppbmRleCAy MmI0Mjc4NjEwLi5hZTRhN2FlY2Q0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xt Z3IvcHJvYy5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9wcm9jLmMKQEAgLTQ0MCw2 ICs0NDAsOSBAQCBJbml0UHJvY2Vzcyh2b2lkKQogCU93bkxhdGNoKCZNeVByb2MtPnByb2NMYXRj aCk7CiAJU3dpdGNoVG9TaGFyZWRMYXRjaCgpOwogCisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzLWxv Y2FsIGNvbmRpdGlvbiB2YXJpYWJsZSBzdXBwb3J0ICovCisJSW5pdGlhbGl6ZUNvbmRpdGlvblZh cmlhYmxlV2FpdFNldCgpOworCiAJLyogbm93IHRoYXQgd2UgaGF2ZSBhIHByb2MsIHJlcG9ydCB3 YWl0IGV2ZW50cyB0byBzaGFyZWQgbWVtb3J5ICovCiAJcGdzdGF0X3NldF93YWl0X2V2ZW50X3N0 b3JhZ2UoJk15UHJvYy0+d2FpdF9ldmVudF9pbmZvKTsKIApAQCAtNTk2LDYgKzU5OSw5IEBAIElu aXRBdXhpbGlhcnlQcm9jZXNzKHZvaWQpCiAJT3duTGF0Y2goJk15UHJvYy0+cHJvY0xhdGNoKTsK IAlTd2l0Y2hUb1NoYXJlZExhdGNoKCk7CiAKKwkvKiBJbml0aWFsaXplIHByb2Nlc3MtbG9jYWwg Y29uZGl0aW9uIHZhcmlhYmxlIHN1cHBvcnQgKi8KKwlJbml0aWFsaXplQ29uZGl0aW9uVmFyaWFi bGVXYWl0U2V0KCk7CisKIAkvKiBub3cgdGhhdCB3ZSBoYXZlIGEgcHJvYywgcmVwb3J0IHdhaXQg ZXZlbnRzIHRvIHNoYXJlZCBtZW1vcnkgKi8KIAlwZ3N0YXRfc2V0X3dhaXRfZXZlbnRfc3RvcmFn ZSgmTXlQcm9jLT53YWl0X2V2ZW50X2luZm8pOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9pbml0L21pc2Npbml0LmMgYi9zcmMvYmFja2VuZC91dGlscy9pbml0L21pc2Npbml0LmMK aW5kZXggYTYwNDQzMjEyNi4uMDU0NTA0NDIyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvaW5pdC9taXNjaW5pdC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2luaXQvbWlzY2luaXQu YwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgInBvc3RtYXN0ZXIvaW50ZXJydXB0LmgiCiAj aW5jbHVkZSAicG9zdG1hc3Rlci9wZ2FyY2guaCIKICNpbmNsdWRlICJwb3N0bWFzdGVyL3Bvc3Rt YXN0ZXIuaCIKKyNpbmNsdWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogI2luY2x1 ZGUgInN0b3JhZ2UvZmQuaCIKICNpbmNsdWRlICJzdG9yYWdlL2lwYy5oIgogI2luY2x1ZGUgInN0 b3JhZ2UvbGF0Y2guaCIKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvY29uZGl0aW9u X3ZhcmlhYmxlLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oCmlu ZGV4IDU4OWJkZDMyM2MuLjk0YWRiNTRiOTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3Jh Z2UvY29uZGl0aW9uX3ZhcmlhYmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9jb25kaXRp b25fdmFyaWFibGUuaApAQCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBDT05ESVRJT05fVkFSSUFC TEVfSAogI2RlZmluZSBDT05ESVRJT05fVkFSSUFCTEVfSAogCisjaW5jbHVkZSAic3RvcmFnZS9s YXRjaC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvY2xpc3RfdHlwZXMuaCIKICNpbmNsdWRlICJz dG9yYWdlL3NwaW4uaCIKIApAQCAtNDIsOSArNDMsMTQgQEAgdHlwZWRlZiB1bmlvbiBDb25kaXRp b25WYXJpYWJsZU1pbmltYWxseVBhZGRlZAogCWNoYXIJCXBhZFtDVl9NSU5JTUFMX1NJWkVdOwog fSBDb25kaXRpb25WYXJpYWJsZU1pbmltYWxseVBhZGRlZDsKIAorZXh0ZXJuIHZvaWQgSW5pdGlh bGl6ZUNvbmRpdGlvblZhcmlhYmxlV2FpdFNldCh2b2lkKTsKKwogLyogSW5pdGlhbGl6ZSBhIGNv bmRpdGlvbiB2YXJpYWJsZS4gKi8KIGV4dGVybiB2b2lkIENvbmRpdGlvblZhcmlhYmxlSW5pdChD b25kaXRpb25WYXJpYWJsZSAqY3YpOwogCitleHRlcm4gV2FpdEV2ZW50U2V0ICpDb25kaXRpb25W YXJpYWJsZVdhaXRTZXRDcmVhdGUoTWVtb3J5Q29udGV4dCBtY3h0LAorCQkJCQkJCQkJCQkJCWlu dCBuX3NvY2tldF9ldmVudHMpOworCiAvKgogICogVG8gc2xlZXAgb24gYSBjb25kaXRpb24gdmFy aWFibGUsIGEgcHJvY2VzcyBzaG91bGQgdXNlIGEgbG9vcCB3aGljaCBmaXJzdAogICogY2hlY2tz IHRoZSBjb25kaXRpb24sIGV4aXRpbmcgdGhlIGxvb3AgaWYgaXQgaXMgbWV0LCBhbmQgdGhlbiBj YWxscwpAQCAtNTYsNiArNjIsMTAgQEAgZXh0ZXJuIHZvaWQgQ29uZGl0aW9uVmFyaWFibGVJbml0 KENvbmRpdGlvblZhcmlhYmxlICpjdik7CiBleHRlcm4gdm9pZCBDb25kaXRpb25WYXJpYWJsZVNs ZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwgdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7CiBleHRl cm4gYm9vbCBDb25kaXRpb25WYXJpYWJsZVRpbWVkU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2 LCBsb25nIHRpbWVvdXQsCiAJCQkJCQkJCQkJdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7CitleHRl cm4gYm9vbCBDb25kaXRpb25WYXJpYWJsZUV2ZW50U2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2 LAorCQkJCQkJCQkJCVdhaXRFdmVudFNldCAqY3ZFdmVudFNldCwKKwkJCQkJCQkJCQlsb25nIHRp bWVvdXQsCisJCQkJCQkJCQkJdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7CiBleHRlcm4gdm9pZCBD b25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKHZvaWQpOwogCiAvKgotLSAKMi4zNC4xCgo= --=-L0xav3YRM/42e9R+aI7D--