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 1pab0d-0003DO-Pc for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Mar 2023 11:34:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1pab0c-0008Mf-Lq for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Mar 2023 11:34:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1pab0c-0008MM-3p for pgsql-hackers@lists.postgresql.org; Fri, 10 Mar 2023 11:34:02 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1pab0U-0000lM-6M for pgsql-hackers@postgresql.org; Fri, 10 Mar 2023 11:34:00 +0000 Received: by mail-wr1-x42d.google.com with SMTP id l25so4744811wrb.3 for ; Fri, 10 Mar 2023 03:33:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; t=1678448033; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=ObFljjcXOcfSMfIlH4onSdcosCsw64ptbQa3p/jjMbg=; b=pimQDnbT9mBEudV9+Szs/YBOoTrq5RJWwANEtBaPUcfC4jGlUgWdPr9zszXjG4MJ/R s59YbAbJ3M5En69v8BJpT5L4ujkjgFkRED0XRvs4RR0bx3pnRxo4IM/QqsKYDOKXCO7j ImWetUP+X2VZpbrHGCzZuZazK/0dlQYHlk03M1/KvTjtbPRZ+LGvvoPcWehxHx9omlT9 /fHaiNlr1PmTklWOyCCBfX6VGlhZWVFtCy4TgbkpAT+yF0oip+/AgiRvk3+MKTLlRWbS 1OD4zHygQ1vmIUaev9qvZHlYAXU2D3waqSJUbb2TKwPtLDGWC7YnugkthIq2ui+7PJaz 3A/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1678448033; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=ObFljjcXOcfSMfIlH4onSdcosCsw64ptbQa3p/jjMbg=; b=CxTSZB+TOBpLJx9oXswCYoIVcziDHRfE/B11TCGAGtNSdYl2txWVZZ0v6zIZdVaxiR Pe2/vUfNKkYugrMq540tNYIXd0bVNyxjIAiXN7/+ud/hX0gvXt5RSEVDwamcOJ0tMHRJ d3YsbNXko7Wg3sV+73kmXe1G9iuaMQccLvHCmoUTZ3bYFuycN6qXzABVJBD1MmReaZ8q LbVjnw2UalDHQbV4lRsd9i/y9jg3fY9/qDRYT7WGMpJzzVsL/HKRfYShbEZdN/5ViLd2 CZevdXf9Kgqa3LznfZCoT1fyAnVhjKc3PqSvOrIBa2lbyJszA4ppzlHNETAocXLZ5nQN js7w== X-Gm-Message-State: AO0yUKUxeCOnFMa4Cb14iR8vQsv7YypPvmuXK0wcSpthrdxHnMaL1Lff ItZTm8GFwbH79re7czYjZfo= X-Google-Smtp-Source: AK7set+owy9YpnAW87MMzNMZhulmvtM+WPnXxqsN0jZcKTTecQRi58xQmHdz1V9+ND8wspNbYumzuA== X-Received: by 2002:adf:cc84:0:b0:2c7:9ddd:1d37 with SMTP id p4-20020adfcc84000000b002c79ddd1d37mr15990180wrj.21.1678448032551; Fri, 10 Mar 2023 03:33:52 -0800 (PST) Received: from [192.168.5.231] ([54.239.6.186]) by smtp.gmail.com with ESMTPSA id f19-20020a5d58f3000000b002c56179d39esm1974887wrd.44.2023.03.10.03.33.51 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 10 Mar 2023 03:33:52 -0800 (PST) Content-Type: multipart/mixed; boundary="------------CFOiUNyRQYyht3gNbk4OxaSO" Message-ID: Date: Fri, 10 Mar 2023 12:33:50 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Subject: Re: Minimal logical decoding on standbys From: "Drouvot, Bertrand" To: Jeff Davis , Andres Freund Cc: Robert Haas , Thomas Munro , Alvaro Herrera , Ibrar Ahmed , Amit Khandekar , fabriziomello@gmail.com, tushar , Rahila Syed , pgsql-hackers 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-Language: en-US In-Reply-To: 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. --------------CFOiUNyRQYyht3gNbk4OxaSO Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, On 3/8/23 11:25 AM, Drouvot, Bertrand wrote: > Hi, > > On 3/3/23 5:26 PM, Drouvot, Bertrand wrote: >> Hi, >> >> On 3/3/23 8:58 AM, Jeff Davis wrote: >>> On Thu, 2023-03-02 at 11:45 -0800, Jeff Davis wrote: >>>> In this case it looks easier to add the right API than to be sure >>>> about >>>> whether it's needed or not. >>> >>> I attached a sketch of one approach. >> >> Oh, that's very cool, thanks a lot! >> >>> I'm not very confident that it's >>> the right API or even that it works as I intended it, but if others >>> like the approach I can work on it some more. >>> >> >> I'll look at it early next week. >> > > So, I took your patch and as an example I tried a quick integration in 0004, > (see 0004_new_API.txt attached) to put it in the logical decoding on standby context. > > Based on this, I've 3 comments: > > - Maybe ConditionVariableEventSleep() should take care of the “WaitEventSetWait returns 1 and cvEvent.event == WL_POSTMASTER_DEATH” case? > > - 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. > > - In the POC attached I had to add this extra condition “(cv && !RecoveryInProgress())” to avoid waiting on the timeout when there 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. > > Also 3 additional remarks: > > 1) About InitializeConditionVariableWaitSet() and ConditionVariableWaitSetCreate(): I'm not sure about the naming as there is no CV yet (they "just" deal with WaitEventSet). > > So, what about renaming? > > +static WaitEventSet *ConditionVariableWaitSet = NULL; > > to say, "LocalWaitSet" and then rename ConditionVariableWaitSetLatchPos, InitializeConditionVariableWaitSet() and ConditionVariableWaitSetCreate() accordingly? > > But it might be not needed (see 3) below). > > 2) > >  /* >   * Prepare to wait on a given condition variable. >   * > @@ -97,7 +162,8 @@ ConditionVariablePrepareToSleep(ConditionVariable *cv) >  void >  ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info) >  { > -       (void) ConditionVariableTimedSleep(cv, -1 /* no timeout */ , > +       (void) ConditionVariableEventSleep(cv, ConditionVariableWaitSet, > +                                                                          -1 /* no timeout */ , >                                                                            wait_event_info); >  } > > @@ -111,11 +177,27 @@ ConditionVariableSleep(ConditionVariable *cv, uint32 wait_event_info) >  bool >  ConditionVariableTimedSleep(ConditionVariable *cv, long timeout, >                                                         uint32 wait_event_info) > +{ > +       return ConditionVariableEventSleep(cv, ConditionVariableWaitSet, timeout, > +                                                                          wait_event_info); > +} > + > > I like the idea of making use of the new ConditionVariableEventSleep() here, but on the other hand... > > 3) > > 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. > > So IIUC, the patch is introducing 2 new possible source of wake up. > > Then, what about? > > - not create ConditionVariableWaitSet, ConditionVariableWaitSetLatchPos, InitializeConditionVariableWaitSet() and ConditionVariableWaitSetCreate() at all? > - call ConditionVariableEventSleep() with a NULL parameter in ConditionVariableSleep() and ConditionVariableTimedSleep()? > - handle the case where the WaitEventSet parameter is NULL in ConditionVariableEventSleep()? (That could also make sense if we handle the case of the CV being NULL as proposed above) > I gave it a try, so please find attached v2-0001-Introduce-ConditionVariableEventSleep.txt (implementing the comments above) and 0004_new_API.txt to put the new API in the logical decoding on standby context. There is no change in v2-0001-Introduce-ConditionVariableEventSleep.txt regarding the up-thread comment related to WL_POSTMASTER_DEATH. What do you think? Regards, -- Bertrand Drouvot PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --------------CFOiUNyRQYyht3gNbk4OxaSO Content-Type: text/plain; charset=UTF-8; name="0004_new_API.txt" Content-Disposition: attachment; filename="0004_new_API.txt" Content-Transfer-Encoding: base64 RnJvbSA5YTgyMDE0MGI3MzU2YWI5NDQ3OTQ5OWE4MGZjNDc0MjQwM2YzY2E1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZXJ0cmFuZGRyb3V2 b3QucGdAZ21haWwuY29tPgpEYXRlOiBGcmksIDEwIE1hciAyMDIzIDEwOjU4OjIzICswMDAw ClN1YmplY3Q6IFtQQVRDSCB2OTkgNS83XSBGaXhpbmcgV2Fsc2VuZGVyIGNvcm5lciBjYXNl IHdpdGggbG9naWNhbCBkZWNvZGluZyBvbgogc3RhbmRieS4KClRoZSBwcm9ibGVtIGlzIHRo YXQgV2FsU25kV2FpdEZvcldhbCgpIHdhaXRzIGZvciB0aGUgKnJlcGxheSogTFNOIHRvCmlu Y3JlYXNlLCBidXQgZ2V0cyB3b2tlbiB1cCBieSB3YWxyZWNlaXZlciB3aGVuIG5ldyBXQUwg aGFzIGJlZW4KZmx1c2hlZC4gV2hpY2ggbWVhbnMgdGhhdCB0eXBpY2FsbHkgd2Fsc2VuZGVy cyB3aWxsIGdldCB3b2tlbiB1cCBhdCB0aGUKc2FtZSB0aW1lIHRoYXQgdGhlIHN0YXJ0dXAg cHJvY2VzcyB3aWxsIGJlIC0gd2hpY2ggbWVhbnMgdGhhdCBieSB0aGUKdGltZSB0aGUgbG9n aWNhbCB3YWxzZW5kZXIgY2hlY2tzIEdldFhMb2dSZXBsYXlSZWNQdHIoKSBpdCdzIHVubGlr ZWx5CnRoYXQgdGhlIHN0YXJ0dXAgcHJvY2VzcyBhbHJlYWR5IHJlcGxheWVkIHRoZSByZWNv cmQgYW5kIHVwZGF0ZWQKWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyLgoKSW50cm9k dWNpbmcgYSBuZXcgY29uZGl0aW9uIHZhcmlhYmxlIGFuZCBhIG5ldyBBUEkgQ29uZGl0aW9u VmFyaWFibGVFdmVudFNsZWVwKCkKdG8gZml4IHRoaXMgY29ybmVyIGNhc2UuCi0tLQogZG9j L3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbCAgICAgICAgICAgICAgfCAgNCArKysrCiBzcmMv YmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyB8IDI4ICsrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYyAgICAg ICB8IDE4ICsrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2Fp dF9ldmVudC5jICAgfCAgMyArKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3Zlcnku aCAgICAgICAgIHwgIDMgKysrCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93YWxzZW5kZXIu aCAgICAgICB8ICAxICsKIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAg ICAgIHwgIDEgKwogNyBmaWxlcyBjaGFuZ2VkLCA1NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0 aW9uKC0pCiAgIDcuOCUgZG9jL3NyYy9zZ21sLwogIDUyLjElIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtLwogIDI3LjElIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uLwogICA0LjUlIHNy Yy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5LwogICA0LjUlIHNyYy9pbmNsdWRlL2FjY2Vzcy8K ICAgMy43JSBzcmMvaW5jbHVkZS8KCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvbW9uaXRv cmluZy5zZ21sIGIvZG9jL3NyYy9zZ21sL21vbml0b3Jpbmcuc2dtbAppbmRleCBjZGY3YzA5 YjRiLi45YWY4ZDU4ZGEyIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvbW9uaXRvcmluZy5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9tb25pdG9yaW5nLnNnbWwKQEAgLTE4NTcsNiArMTg1 NywxMCBAQCBwb3N0Z3JlcyAgIDI3MDkzICAwLjAgIDAuMCAgMzAwOTYgIDI3NTIgPyAgICAg ICAgU3MgICAxMTozNCAgIDA6MDAgcG9zdGdyZXM6IHNlcgogICAgICAgPGVudHJ5PldhaXRp bmcgZm9yIHN0YXJ0dXAgcHJvY2VzcyB0byBzZW5kIGluaXRpYWwgZGF0YSBmb3Igc3RyZWFt aW5nCiAgICAgICAgcmVwbGljYXRpb24uPC9lbnRyeT4KICAgICAgPC9yb3c+CisgICAgIDxy b3c+CisgICAgICA8ZW50cnk+PGxpdGVyYWw+V2FsU2VuZGVyV2FpdFJlcGxheTwvbGl0ZXJh bD48L2VudHJ5PgorICAgICAgPGVudHJ5PldhaXRpbmcgZm9yIHN0YXJ0dXAgcHJvY2VzcyB0 byByZXBsYXkgd3JpdGUtYWhlYWQgbG9nLjwvZW50cnk+CisgICAgIDwvcm93PgogICAgICA8 cm93PgogICAgICAgPGVudHJ5PjxsaXRlcmFsPlhhY3RHcm91cFVwZGF0ZTwvbGl0ZXJhbD48 L2VudHJ5PgogICAgICAgPGVudHJ5PldhaXRpbmcgZm9yIHRoZSBncm91cCBsZWFkZXIgdG8g dXBkYXRlIHRyYW5zYWN0aW9uIHN0YXR1cyBhdApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS94bG9ncmVjb3ZlcnkuYwppbmRleCBkYmU5Mzk0NzYyLi44YTk1MDVhNTJkIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtMzU4LDYg KzM1OCw5IEBAIHR5cGVkZWYgc3RydWN0IFhMb2dSZWNvdmVyeUN0bERhdGEKIAlSZWNvdmVy eVBhdXNlU3RhdGUgcmVjb3ZlcnlQYXVzZVN0YXRlOwogCUNvbmRpdGlvblZhcmlhYmxlIHJl Y292ZXJ5Tm90UGF1c2VkQ1Y7CiAKKwkvKiBSZXBsYXkgc3RhdGUgKHNlZSBjaGVja19mb3Jf cmVwbGF5KCkgZm9yIG1vcmUgZXhwbGFuYXRpb24pICovCisJQ29uZGl0aW9uVmFyaWFibGUg cmVwbGF5ZWRDVjsKKwogCXNsb2NrX3QJCWluZm9fbGNrOwkJLyogbG9ja3Mgc2hhcmVkIHZh cmlhYmxlcyBzaG93biBhYm92ZSAqLwogfSBYTG9nUmVjb3ZlcnlDdGxEYXRhOwogCkBAIC00 NjgsNiArNDcxLDcgQEAgWExvZ1JlY292ZXJ5U2htZW1Jbml0KHZvaWQpCiAJU3BpbkxvY2tJ bml0KCZYTG9nUmVjb3ZlcnlDdGwtPmluZm9fbGNrKTsKIAlJbml0U2hhcmVkTGF0Y2goJlhM b2dSZWNvdmVyeUN0bC0+cmVjb3ZlcnlXYWtldXBMYXRjaCk7CiAJQ29uZGl0aW9uVmFyaWFi bGVJbml0KCZYTG9nUmVjb3ZlcnlDdGwtPnJlY292ZXJ5Tm90UGF1c2VkQ1YpOworCUNvbmRp dGlvblZhcmlhYmxlSW5pdCgmWExvZ1JlY292ZXJ5Q3RsLT5yZXBsYXllZENWKTsKIH0KIAog LyoKQEAgLTE5MzUsNiArMTkzOSwxMSBAQCBBcHBseVdhbFJlY29yZChYTG9nUmVhZGVyU3Rh dGUgKnhsb2dyZWFkZXIsIFhMb2dSZWNvcmQgKnJlY29yZCwgVGltZUxpbmVJRCAqcmVwbAog CVhMb2dSZWNvdmVyeUN0bC0+bGFzdFJlcGxheWVkVExJID0gKnJlcGxheVRMSTsKIAlTcGlu TG9ja1JlbGVhc2UoJlhMb2dSZWNvdmVyeUN0bC0+aW5mb19sY2spOwogCisJLyoKKwkgKiB3 YWtlIHVwIHdhbHNlbmRlcihzKSB1c2VkIGJ5IGxvZ2ljYWwgZGVjb2Rpbmcgb24gc3RhbmRi eS4KKwkgKi8KKwlDb25kaXRpb25WYXJpYWJsZUJyb2FkY2FzdCgmWExvZ1JlY292ZXJ5Q3Rs LT5yZXBsYXllZENWKTsKKwogCS8qCiAJICogSWYgcm1fcmVkbyBjYWxsZWQgWExvZ1JlcXVl c3RXYWxSZWNlaXZlclJlcGx5LCB0aGVuIHdlIHdha2UgdXAgdGhlCiAJICogcmVjZWl2ZXIg c28gdGhhdCBpdCBub3RpY2VzIHRoZSB1cGRhdGVkIGxhc3RSZXBsYXllZEVuZFJlY1B0ciBh bmQgc2VuZHMKQEAgLTQ5NDIsMyArNDk1MSwyMiBAQCBhc3NpZ25fcmVjb3ZlcnlfdGFyZ2V0 X3hpZChjb25zdCBjaGFyICpuZXd2YWwsIHZvaWQgKmV4dHJhKQogCWVsc2UKIAkJcmVjb3Zl cnlUYXJnZXQgPSBSRUNPVkVSWV9UQVJHRVRfVU5TRVQ7CiB9CisKKy8qCisgKiBSZXR1cm4g dGhlIENvbmRpdGlvblZhcmlhYmxlIGluZGljYXRpbmcgdGhhdCBhIHJlcGxheSBoYXMgYmVl biBkb25lLgorICoKKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBsb2dpY2FsIGRlY29kaW5nIG9u IHN0YW5kYnkuIEluZGVlZCB0aGUgInByb2JsZW0iIGlzIHRoYXQKKyAqIFdhbFNuZFdhaXRG b3JXYWwoKSB3YWl0cyBmb3IgdGhlICpyZXBsYXkqIExTTiB0byBpbmNyZWFzZSwgYnV0IGdl dHMgd29rZW4gdXAKKyAqIGJ5IHdhbHJlY2VpdmVyIHdoZW4gbmV3IFdBTCBoYXMgYmVlbiBm bHVzaGVkLiBXaGljaCBtZWFucyB0aGF0IHR5cGljYWxseQorICogd2Fsc2VuZGVycyB3aWxs IGdldCB3b2tlbiB1cCBhdCB0aGUgc2FtZSB0aW1lIHRoYXQgdGhlIHN0YXJ0dXAgcHJvY2Vz cworICogd2lsbCBiZSAtIHdoaWNoIG1lYW5zIHRoYXQgYnkgdGhlIHRpbWUgdGhlIGxvZ2lj YWwgd2Fsc2VuZGVyIGNoZWNrcworICogR2V0WExvZ1JlcGxheVJlY1B0cigpIGl0J3MgdW5s aWtlbHkgdGhhdCB0aGUgc3RhcnR1cCBwcm9jZXNzIGFscmVhZHkgcmVwbGF5ZWQKKyAqIHRo ZSByZWNvcmQgYW5kIHVwZGF0ZWQgWExvZ0N0bC0+bGFzdFJlcGxheWVkRW5kUmVjUHRyLgor ICoKKyAqIFRoZSBDb25kaXRpb25WYXJpYWJsZSBYTG9nUmVjb3ZlcnlDdGwtPnJlcGxheWVk Q1Ygc29sdmVzIHRoaXMgY29ybmVyIGNhc2UuCisgKi8KK0NvbmRpdGlvblZhcmlhYmxlICoK K2NoZWNrX2Zvcl9yZXBsYXkodm9pZCkKK3sKKwlyZXR1cm4gJlhMb2dSZWNvdmVyeUN0bC0+ cmVwbGF5ZWRDVjsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dh bHNlbmRlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMKaW5kZXgg MzA0MmU1YmQ2NC4uOGVmMjI2MTZiYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGlj YXRpb24vd2Fsc2VuZGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2Vu ZGVyLmMKQEAgLTE1NTEsNyArMTU1MSw5IEBAIHN0YXRpYyBYTG9nUmVjUHRyCiBXYWxTbmRX YWl0Rm9yV2FsKFhMb2dSZWNQdHIgbG9jKQogewogCWludAkJCXdha2VFdmVudHM7CisJdWlu dDMyCQl3YWl0X2V2ZW50OwogCXN0YXRpYyBYTG9nUmVjUHRyIFJlY2VudEZsdXNoUHRyID0g SW52YWxpZFhMb2dSZWNQdHI7CisJQ29uZGl0aW9uVmFyaWFibGUgKmN2ID0gTlVMTDsKIAog CS8qCiAJICogRmFzdCBwYXRoIHRvIGF2b2lkIGFjcXVpcmluZyB0aGUgc3BpbmxvY2sgaW4g Y2FzZSB3ZSBhbHJlYWR5IGtub3cgd2UKQEAgLTE1NjQsOSArMTU2NiwyMCBAQCBXYWxTbmRX YWl0Rm9yV2FsKFhMb2dSZWNQdHIgbG9jKQogCiAJLyogR2V0IGEgbW9yZSByZWNlbnQgZmx1 c2ggcG9pbnRlci4gKi8KIAlpZiAoIVJlY292ZXJ5SW5Qcm9ncmVzcygpKQorCXsKIAkJUmVj ZW50Rmx1c2hQdHIgPSBHZXRGbHVzaFJlY1B0cihOVUxMKTsKKwkJd2FpdF9ldmVudCA9IFdB SVRfRVZFTlRfV0FMX1NFTkRFUl9XQUlUX1dBTDsKKwl9CiAJZWxzZQorCXsKIAkJUmVjZW50 Rmx1c2hQdHIgPSBHZXRYTG9nUmVwbGF5UmVjUHRyKE5VTEwpOworCQl3YWl0X2V2ZW50ID0g V0FJVF9FVkVOVF9XQUxfU0VOREVSX1dBSVRfUkVQTEFZOworCQljdiA9IGNoZWNrX2Zvcl9y ZXBsYXkoKTsKKwl9CisKKwkvKiBQcmVwYXJlIHRoZSBjdiB0byBzbGVlcCAqLworCWlmIChj dikKKwkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcChjdik7CiAKIAlmb3IgKDs7 KQogCXsKQEAgLTE2NjcsOSArMTY4MCwxMiBAQCBXYWxTbmRXYWl0Rm9yV2FsKFhMb2dSZWNQ dHIgbG9jKQogCQlpZiAocHFfaXNfc2VuZF9wZW5kaW5nKCkpCiAJCQl3YWtlRXZlbnRzIHw9 IFdMX1NPQ0tFVF9XUklURUFCTEU7CiAKLQkJV2FsU25kV2FpdCh3YWtlRXZlbnRzLCBzbGVl cHRpbWUsIFdBSVRfRVZFTlRfV0FMX1NFTkRFUl9XQUlUX1dBTCk7CisJCU1vZGlmeVdhaXRF dmVudChGZUJlV2FpdFNldCwgRmVCZVdhaXRTZXRTb2NrZXRQb3MsIHdha2VFdmVudHMsIE5V TEwpOworCQlDb25kaXRpb25WYXJpYWJsZUV2ZW50U2xlZXAoY3YsIFJlY292ZXJ5SW5Qcm9n cmVzcywgRmVCZVdhaXRTZXQsIE5VTEwsCisJCQkJCQkJCQlzbGVlcHRpbWUsIHdhaXRfZXZl bnQpOwogCX0KIAorCUNvbmRpdGlvblZhcmlhYmxlQ2FuY2VsU2xlZXAoKTsKIAkvKiByZWFj dGl2YXRlIGxhdGNoIHNvIFdhbFNuZExvb3Aga25vd3MgdG8gY29udGludWUgKi8KIAlTZXRM YXRjaChNeUxhdGNoKTsKIAlyZXR1cm4gUmVjZW50Rmx1c2hQdHI7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMgYi9zcmMvYmFja2VuZC91 dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50LmMKaW5kZXggY2I5OWNjNjMzOS4uYTEwZGNkNGU2 MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5j CisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwpAQCAtNDY2 LDYgKzQ2Niw5IEBAIHBnc3RhdF9nZXRfd2FpdF9pcGMoV2FpdEV2ZW50SVBDIHcpCiAJCWNh c2UgV0FJVF9FVkVOVF9XQUxfUkVDRUlWRVJfV0FJVF9TVEFSVDoKIAkJCWV2ZW50X25hbWUg PSAiV2FsUmVjZWl2ZXJXYWl0U3RhcnQiOwogCQkJYnJlYWs7CisJCWNhc2UgV0FJVF9FVkVO VF9XQUxfU0VOREVSX1dBSVRfUkVQTEFZOgorCQkJZXZlbnRfbmFtZSA9ICJXYWxTZW5kZXJX YWl0UmVwbGF5IjsKKwkJCWJyZWFrOwogCQljYXNlIFdBSVRfRVZFTlRfWEFDVF9HUk9VUF9V UERBVEU6CiAJCQlldmVudF9uYW1lID0gIlhhY3RHcm91cFVwZGF0ZSI7CiAJCQlicmVhazsK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy94bG9ncmVjb3ZlcnkuaAppbmRleCA0N2MyOTM1MGY1Li4yYmZlYWFh MDBmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlY292ZXJ5LmgKKysr IGIvc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWNvdmVyeS5oCkBAIC0xNSw2ICsxNSw3IEBA CiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19jb250cm9sLmgiCiAjaW5jbHVkZSAibGliL3N0cmlu Z2luZm8uaCIKICNpbmNsdWRlICJ1dGlscy90aW1lc3RhbXAuaCIKKyNpbmNsdWRlICJzdG9y YWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogCiAvKgogICogUmVjb3ZlcnkgdGFyZ2V0IHR5 cGUuCkBAIC0xNTUsNCArMTU2LDYgQEAgZXh0ZXJuIHZvaWQgUmVjb3ZlcnlSZXF1aXJlc0lu dFBhcmFtZXRlcihjb25zdCBjaGFyICpwYXJhbV9uYW1lLCBpbnQgY3VyclZhbHVlLAogCiBl eHRlcm4gdm9pZCB4bG9nX291dGRlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0 ZSAqcmVjb3JkKTsKIAorZXh0ZXJuIENvbmRpdGlvblZhcmlhYmxlICpjaGVja19mb3JfcmVw bGF5KHZvaWQpOworCiAjZW5kaWYJCQkJCQkJLyogWExPR1JFQ09WRVJZX0ggKi8KZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5oIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmgKaW5kZXggNTJiYjNlMmFhZS4uMmZkNzQ1ZmU3 MiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmgKQEAgLTEzLDYgKzEzLDcg QEAKICNkZWZpbmUgX1dBTFNFTkRFUl9ICiAKICNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNs dWRlICJzdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oIgogCiAvKgogICogV2hhdCB0byBk byB3aXRoIGEgc25hcHNob3QgaW4gY3JlYXRlIHJlcGxpY2F0aW9uIHNsb3QgY29tbWFuZC4K ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCBiL3NyYy9pbmNs dWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCA5YWIyM2UxYzRhLi41NDhlZjQxZGNhIDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKKysrIGIvc3JjL2lu Y2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC0xMzEsNiArMTMxLDcgQEAgdHlwZWRlZiBl bnVtCiAJV0FJVF9FVkVOVF9TWU5DX1JFUCwKIAlXQUlUX0VWRU5UX1dBTF9SRUNFSVZFUl9F WElULAogCVdBSVRfRVZFTlRfV0FMX1JFQ0VJVkVSX1dBSVRfU1RBUlQsCisJV0FJVF9FVkVO VF9XQUxfU0VOREVSX1dBSVRfUkVQTEFZLAogCVdBSVRfRVZFTlRfWEFDVF9HUk9VUF9VUERB VEUKIH0gV2FpdEV2ZW50SVBDOwogCi0tIAoyLjM0LjEKCg== --------------CFOiUNyRQYyht3gNbk4OxaSO Content-Type: text/plain; charset=UTF-8; name="v2-0001-Introduce-ConditionVariableEventSleep.txt" Content-Disposition: attachment; filename="v2-0001-Introduce-ConditionVariableEventSleep.txt" Content-Transfer-Encoding: base64 RnJvbSAwMDQ0MDc4YTU0MGZjYjJiNWY1YzcyOGRjYjdlNDkxMWIwMDBkNmQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCZXJ0cmFuZCBEcm91dm90IDxiZXJ0cmFuZGRyb3V2 b3QucGdAZ21haWwuY29tPgpEYXRlOiBGcmksIDEwIE1hciAyMDIzIDEwOjU3OjIyICswMDAw ClN1YmplY3Q6IFtQQVRDSCB2OTkgNC83XSBJbnRyb2R1Y2UtQ29uZGl0aW9uVmFyaWFibGVF dmVudFNsZWVwCgotLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9jb25kaXRpb25fdmFy aWFibGUuYyB8IDY1ICsrKysrKysrKysrKysrLS0tLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2Uv Y29uZGl0aW9uX3ZhcmlhYmxlLmggICAgICB8ICA3ICsrCiAyIGZpbGVzIGNoYW5nZWQsIDU3 IGluc2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQogIDg5LjAlIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvbG1nci8KICAxMC45JSBzcmMvaW5jbHVkZS9zdG9yYWdlLwoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvbG1nci9jb25kaXRpb25fdmFyaWFibGUuYyBiL3NyYy9i YWNrZW5kL3N0b3JhZ2UvbG1nci9jb25kaXRpb25fdmFyaWFibGUuYwppbmRleCA3ZTJiYmY0 NmQ5Li5hZjI0MWU3MzE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2xtZ3Iv Y29uZGl0aW9uX3ZhcmlhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9sbWdyL2Nv bmRpdGlvbl92YXJpYWJsZS5jCkBAIC05Nyw3ICs5Nyw4IEBAIENvbmRpdGlvblZhcmlhYmxl UHJlcGFyZVRvU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2KQogdm9pZAogQ29uZGl0aW9u VmFyaWFibGVTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIHVpbnQzMiB3YWl0X2V2ZW50 X2luZm8pCiB7Ci0JKHZvaWQpIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVlcChjdiwgLTEg Lyogbm8gdGltZW91dCAqLyAsCisJKHZvaWQpIENvbmRpdGlvblZhcmlhYmxlRXZlbnRTbGVl cChjdiwgTlVMTCwgTlVMTCwgTlVMTCwKKwkJCQkJCQkJCSAgIC0xIC8qIG5vIHRpbWVvdXQg Ki8gLAogCQkJCQkJCQkJICAgd2FpdF9ldmVudF9pbmZvKTsKIH0KIApAQCAtMTExLDExICsx MTIsMjggQEAgQ29uZGl0aW9uVmFyaWFibGVTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3Ys IHVpbnQzMiB3YWl0X2V2ZW50X2luZm8pCiBib29sCiBDb25kaXRpb25WYXJpYWJsZVRpbWVk U2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJCQkJCQkJdWlu dDMyIHdhaXRfZXZlbnRfaW5mbykKK3sKKwlyZXR1cm4gQ29uZGl0aW9uVmFyaWFibGVFdmVu dFNsZWVwKGN2LCBOVUxMLCBOVUxMLCBOVUxMLCB0aW1lb3V0LAorCQkJCQkJCQkJICAgd2Fp dF9ldmVudF9pbmZvKTsKK30KKworLyoKKyAqIFdhaXQgZm9yIGEgY29uZGl0aW9uIHZhcmlh YmxlIHRvIGJlIHNpZ25hbGVkLCBhIHRpbWVvdXQgdG8gYmUgcmVhY2hlZCwgb3IgYQorICog c29ja2V0IGV2ZW50IGluIHRoZSBnaXZlbiB3YWl0c2V0LgorICoKKyAqIFJldHVybnMgdHJ1 ZSB3aGVuIHRpbWVvdXQgZXhwaXJlcywgb3RoZXJ3aXNlIHJldHVybnMgZmFsc2UuCisgKgor ICogU2VlIENvbmRpdGlvblZhcmlhYmxlU2xlZXAoKSBmb3IgZ2VuZXJhbCB1c2FnZS4KKyAq LworYm9vbAorQ29uZGl0aW9uVmFyaWFibGVFdmVudFNsZWVwKENvbmRpdGlvblZhcmlhYmxl ICpjdiwgYm9vbCAoKmN2X3Jlc3VtZV93YWl0aW5nKSh2b2lkKSwKKwkJCQkJCQlXYWl0RXZl bnRTZXQgKndhaXRzZXQsCisJCQkJCQkJYm9vbCAoKndhaXRzZXRfcmVzdW1lX3dhaXRpbmcp KHZvaWQpLAorCQkJCQkJCWxvbmcgdGltZW91dCwgdWludDMyIHdhaXRfZXZlbnRfaW5mbykK IHsKIAlsb25nCQljdXJfdGltZW91dCA9IC0xOwogCWluc3RyX3RpbWUJc3RhcnRfdGltZTsK IAlpbnN0cl90aW1lCWN1cl90aW1lOwotCWludAkJCXdhaXRfZXZlbnRzOwogCiAJLyoKIAkg KiBJZiB0aGUgY2FsbGVyIGRpZG4ndCBwcmVwYXJlIHRvIHNsZWVwIGV4cGxpY2l0bHksIHRo ZW4gZG8gc28gbm93IGFuZApAQCAtMTMyLDcgKzE1MCw3IEBAIENvbmRpdGlvblZhcmlhYmxl VGltZWRTbGVlcChDb25kaXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkgKiBJ ZiB3ZSBhcmUgY3VycmVudGx5IHByZXBhcmVkIHRvIHNsZWVwIG9uIHNvbWUgb3RoZXIgQ1Ys IHdlIGp1c3QgY2FuY2VsCiAJICogdGhhdCBhbmQgcHJlcGFyZSB0aGlzIG9uZTsgc2VlIENv bmRpdGlvblZhcmlhYmxlUHJlcGFyZVRvU2xlZXAuCiAJICovCi0JaWYgKGN2X3NsZWVwX3Rh cmdldCAhPSBjdikKKwlpZiAoY3YgJiYgY3Zfc2xlZXBfdGFyZ2V0ICE9IGN2KQogCXsKIAkJ Q29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcChjdik7CiAJCXJldHVybiBmYWxzZTsK QEAgLTE0NywyNCArMTY1LDI5IEBAIENvbmRpdGlvblZhcmlhYmxlVGltZWRTbGVlcChDb25k aXRpb25WYXJpYWJsZSAqY3YsIGxvbmcgdGltZW91dCwKIAkJSU5TVFJfVElNRV9TRVRfQ1VS UkVOVChzdGFydF90aW1lKTsKIAkJQXNzZXJ0KHRpbWVvdXQgPj0gMCAmJiB0aW1lb3V0IDw9 IElOVF9NQVgpOwogCQljdXJfdGltZW91dCA9IHRpbWVvdXQ7Ci0JCXdhaXRfZXZlbnRzID0g V0xfTEFUQ0hfU0VUIHwgV0xfVElNRU9VVCB8IFdMX0VYSVRfT05fUE1fREVBVEg7CiAJfQot CWVsc2UKLQkJd2FpdF9ldmVudHMgPSBXTF9MQVRDSF9TRVQgfCBXTF9FWElUX09OX1BNX0RF QVRIOwogCiAJd2hpbGUgKHRydWUpCiAJewogCQlib29sCQlkb25lID0gZmFsc2U7CisJCVdh aXRFdmVudAljdkV2ZW50OworCQlpbnQJCQluZXZlbnRzID0gMDsKIAogCQkvKgotCQkgKiBX YWl0IGZvciBsYXRjaCB0byBiZSBzZXQuICAoSWYgd2UncmUgYXdha2VuZWQgZm9yIHNvbWUg b3RoZXIKLQkJICogcmVhc29uLCB0aGUgY29kZSBiZWxvdyB3aWxsIGNvcGUgYW55d2F5LikK KwkJICogV2FpdCBmb3IgbGF0Y2ggdG8gYmUgc2V0LCBvciBvdGhlciBldmVudHMgd2hpY2gg d2lsbCBiZSBoYW5kbGVkCisJCSAqIGJlbG93LgogCQkgKi8KLQkJKHZvaWQpIFdhaXRMYXRj aChNeUxhdGNoLCB3YWl0X2V2ZW50cywgY3VyX3RpbWVvdXQsIHdhaXRfZXZlbnRfaW5mbyk7 CisJCWlmICh3YWl0c2V0KQorCQkJbmV2ZW50cyA9IFdhaXRFdmVudFNldFdhaXQod2FpdHNl dCwgY3VyX3RpbWVvdXQsICZjdkV2ZW50LAorCQkJCQkJCQkJICAgMSwgd2FpdF9ldmVudF9p bmZvKTsKIAogCQkvKiBSZXNldCBsYXRjaCBiZWZvcmUgZXhhbWluaW5nIHRoZSBzdGF0ZSBv ZiB0aGUgd2FpdCBsaXN0LiAqLwogCQlSZXNldExhdGNoKE15TGF0Y2gpOwogCisJCS8qIElm IGEgc29ja2V0IGV2ZW50IG9jY3VycmVkLCBubyBuZWVkIHRvIGNoZWNrIHdhaXQgbGlzdC4g Ki8KKwkJaWYgKG5ldmVudHMgPT0gMSAmJiAoY3ZFdmVudC5ldmVudHMgJiBXTF9TT0NLRVRf TUFTSykgIT0gMCkKKwkJCXJldHVybiB0cnVlOworCiAJCS8qCiAJCSAqIElmIHRoaXMgcHJv Y2VzcyBoYXMgYmVlbiB0YWtlbiBvdXQgb2YgdGhlIHdhaXQgbGlzdCwgdGhlbiB3ZSBrbm93 CiAJCSAqIHRoYXQgaXQgaGFzIGJlZW4gc2lnbmFsZWQgYnkgQ29uZGl0aW9uVmFyaWFibGVT aWduYWwgKG9yCkBAIC0xODAsMTMgKzIwMywyNSBAQCBDb25kaXRpb25WYXJpYWJsZVRpbWVk U2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJCSAqIGJ5IHNv bWV0aGluZyBvdGhlciB0aGFuIENvbmRpdGlvblZhcmlhYmxlU2lnbmFsOyB0aG91Z2ggd2Ug ZG9uJ3QKIAkJICogZ3VhcmFudGVlIG5vdCB0byByZXR1cm4gc3B1cmlvdXNseSwgd2UnbGwg YXZvaWQgdGhpcyBvYnZpb3VzIGNhc2UuCiAJCSAqLwotCQlTcGluTG9ja0FjcXVpcmUoJmN2 LT5tdXRleCk7Ci0JCWlmICghcHJvY2xpc3RfY29udGFpbnMoJmN2LT53YWtldXAsIE15UHJv Yy0+cGdwcm9jbm8sIGN2V2FpdExpbmspKQorCisJCWlmIChjdikKIAkJewotCQkJZG9uZSA9 IHRydWU7Ci0JCQlwcm9jbGlzdF9wdXNoX3RhaWwoJmN2LT53YWtldXAsIE15UHJvYy0+cGdw cm9jbm8sIGN2V2FpdExpbmspOworCQkJU3BpbkxvY2tBY3F1aXJlKCZjdi0+bXV0ZXgpOwor CQkJaWYgKCFwcm9jbGlzdF9jb250YWlucygmY3YtPndha2V1cCwgTXlQcm9jLT5wZ3Byb2Nu bywgY3ZXYWl0TGluaykpCisJCQl7CisJCQkJZG9uZSA9IHRydWU7CisJCQkJcHJvY2xpc3Rf cHVzaF90YWlsKCZjdi0+d2FrZXVwLCBNeVByb2MtPnBncHJvY25vLCBjdldhaXRMaW5rKTsK KwkJCX0KKwkJCVNwaW5Mb2NrUmVsZWFzZSgmY3YtPm11dGV4KTsKIAkJfQotCQlTcGluTG9j a1JlbGVhc2UoJmN2LT5tdXRleCk7CisKKwkJLyogSWYgd2UgYXJlIG5vdCB3YWl0aW5nIG9u IGEgQ1Ygb3IgZG9uJ3Qgd2FudCB0byB3YWl0IGFueW1vcmUgKi8KKwkJaWYgKCFjdiB8fCAo Y3YgJiYgY3ZfcmVzdW1lX3dhaXRpbmcgJiYgIWN2X3Jlc3VtZV93YWl0aW5nKCkpKQorCQkJ ZG9uZSA9IHRydWU7CisKKwkJLyogSWYgd2UgZG9uJ3Qgd2FudCB0byB3YWl0IG9uIHRoZSB3 YWl0c2V0IGFueW1vcmUgKi8KKwkJaWYgKHdhaXRzZXQgJiYgd2FpdHNldF9yZXN1bWVfd2Fp dGluZyAmJiAhd2FpdHNldF9yZXN1bWVfd2FpdGluZygpKQorCQkJZG9uZSA9IHRydWU7CiAK IAkJLyoKIAkJICogQ2hlY2sgZm9yIGludGVycnVwdHMsIGFuZCByZXR1cm4gc3B1cmlvdXNs eSBpZiB0aGF0IGNhdXNlZCB0aGUKQEAgLTE5NCw3ICsyMjksNyBAQCBDb25kaXRpb25WYXJp YWJsZVRpbWVkU2xlZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJ CSAqIHdhaXRlZCBmb3IgYSBkaWZmZXJlbnQgY29uZGl0aW9uIHZhcmlhYmxlKS4KIAkJICov CiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7Ci0JCWlmIChjdiAhPSBjdl9zbGVlcF90YXJn ZXQpCisJCWlmIChjdiAmJiBjdiAhPSBjdl9zbGVlcF90YXJnZXQpCiAJCQlkb25lID0gdHJ1 ZTsKIAogCQkvKiBXZSB3ZXJlIHNpZ25hbGVkLCBzbyByZXR1cm4gKi8KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL3N0b3JhZ2UvY29uZGl0aW9uX3ZhcmlhYmxlLmggYi9zcmMvaW5jbHVk ZS9zdG9yYWdlL2NvbmRpdGlvbl92YXJpYWJsZS5oCmluZGV4IDU4OWJkZDMyM2MuLmI5NTEw Y2FhMTcgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvY29uZGl0aW9uX3Zhcmlh YmxlLmgKKysrIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9jb25kaXRpb25fdmFyaWFibGUuaApA QCAtMjIsNiArMjIsNyBAQAogI2lmbmRlZiBDT05ESVRJT05fVkFSSUFCTEVfSAogI2RlZmlu ZSBDT05ESVRJT05fVkFSSUFCTEVfSAogCisjaW5jbHVkZSAic3RvcmFnZS9sYXRjaC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJvY2xpc3RfdHlwZXMuaCIKICNpbmNsdWRlICJzdG9yYWdl L3NwaW4uaCIKIApAQCAtNTYsNiArNTcsMTIgQEAgZXh0ZXJuIHZvaWQgQ29uZGl0aW9uVmFy aWFibGVJbml0KENvbmRpdGlvblZhcmlhYmxlICpjdik7CiBleHRlcm4gdm9pZCBDb25kaXRp b25WYXJpYWJsZVNsZWVwKENvbmRpdGlvblZhcmlhYmxlICpjdiwgdWludDMyIHdhaXRfZXZl bnRfaW5mbyk7CiBleHRlcm4gYm9vbCBDb25kaXRpb25WYXJpYWJsZVRpbWVkU2xlZXAoQ29u ZGl0aW9uVmFyaWFibGUgKmN2LCBsb25nIHRpbWVvdXQsCiAJCQkJCQkJCQkJdWludDMyIHdh aXRfZXZlbnRfaW5mbyk7CitleHRlcm4gYm9vbCBDb25kaXRpb25WYXJpYWJsZUV2ZW50U2xl ZXAoQ29uZGl0aW9uVmFyaWFibGUgKmN2LAorCQkJCQkJCQkJCWJvb2wgKCpjdl9yZXN1bWVf d2FpdGluZykodm9pZCksCisJCQkJCQkJCQkJV2FpdEV2ZW50U2V0ICpjdkV2ZW50U2V0LAor CQkJCQkJCQkJCWJvb2wgKCp3YWl0c2V0X3Jlc3VtZV93YWl0aW5nKSh2b2lkKSwKKwkJCQkJ CQkJCQlsb25nIHRpbWVvdXQsCisJCQkJCQkJCQkJdWludDMyIHdhaXRfZXZlbnRfaW5mbyk7 CiBleHRlcm4gdm9pZCBDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKHZvaWQpOwogCiAv KgotLSAKMi4zNC4xCgo= --------------CFOiUNyRQYyht3gNbk4OxaSO--