From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-05.nifty.com (conssluserg-05.nifty.com [210.131.2.90]) by sourceware.org (Postfix) with ESMTPS id 518E6388451F for ; Fri, 18 Mar 2022 04:23:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 518E6388451F Authentication-Results: sourceware.org; dmarc=fail (p=none dis=none) header.from=nifty.ne.jp Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=nifty.ne.jp Received: from Express5800-S70 (ak036016.dynamic.ppp.asahi-net.or.jp [119.150.36.16]) (authenticated) by conssluserg-05.nifty.com with ESMTP id 22I4NPpj006802; Fri, 18 Mar 2022 13:23:25 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-05.nifty.com 22I4NPpj006802 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.ne.jp; s=dec2015msa; t=1647577405; bh=P2KU1+ytmd2YPMuEF8PcXIa9ig4qqw1/dzHUEqhakbg=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=VmB6goziijGupiMl4ReQy11kOetLlkG1AX+Ipzptlg/hQyB4i/9Tx9SbkvAI3U0SJ wwsB9jqmEUt/pXou42aZu+af6mSjoRAl/FssHbhGdJLfObAGYlFH69Ad1TiWkrZCvZ RPtH5gpxBSTKHnC6gqaf9VMnInePfwB9iYZOgLW8VTIVbjoCPX6m8bwyQbxZ1M0gT0 7eLiBk06W83ZQsgZPcKm+mTk1EF9uv6diSkW7ZZQQTgp1c5AfdOn480y2gSviyRDV+ x2K5qE9EjNx3g7MRTB5zzigLjZzT6vuO/lnGR87YDX1sGfBkyIjUjeNw5lWXvWOopi +WNWx4b+nBEvA== X-Nifty-SrcIP: [119.150.36.16] Date: Fri, 18 Mar 2022 13:23:35 +0900 From: Takashi Yano To: cygwin@cygwin.com Cc: Orgad Shaneh Subject: Re: Typed characters are mis-ordered when CPU usage is high Message-Id: <20220318132335.d5635fe9fc782ed53bddf7bc@nifty.ne.jp> In-Reply-To: References: <20220227235303.5d6239724ed83b145772134b@nifty.ne.jp> <20220302081259.2a7e522ef1a9e3e6da0aa259@nifty.ne.jp> <20220303090208.4a04e35756b7868fe9b4701d@nifty.ne.jp> <20220312063625.9ca3d42d4e2e941a13fa7909@nifty.ne.jp> X-Mailer: Sylpheed 3.7.0 (GTK+ 2.24.30; i686-pc-mingw32) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart=_Fri__18_Mar_2022_13_23_35_+0900_dijPPCXjUHVx7/Qg" X-Spam-Status: No, score=-4.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, KAM_LOTSOFHASH, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: cygwin@cygwin.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: General Cygwin discussions and problem reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 18 Mar 2022 04:24:02 -0000 This is a multi-part message in MIME format. --Multipart=_Fri__18_Mar_2022_13_23_35_+0900_dijPPCXjUHVx7/Qg Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Thu, 17 Mar 2022 20:40:15 +0200 Orgad Shaneh wrote: > On Fri, Mar 11, 2022 at 11:36 PM Takashi Yano wrote: > > I looked into this problem and found the cause. > > This seems to be due to a bug of fsync(). Cygwin's fsync() > > flushes the console input buffer unlike linux. > > > > I will propose a patch for this issue. > > > > -- > > Takashi Yano > > Thank you very much. Looks better now. > > I'm sorry for nudging, but on msys2 I still get frequent mistypes when > typing fast. > > I (still) don't have a consistent reproduction, but if I get it > correctly, it looks like one or more characters I type right when the > prompt appears show up before the buffered characters. > > For instance, I run git fetch, and while it is running I type git > status, *sometimes* 1-2 characters "pop" to the left, so I get > something like tgit satus. > > I wasn't able to reproduce it with cygwin, but on msys2 (with cygwin > 3.3 branch merged in) it happens to me all the time :/ Thansk for the report. I cloned the msys2-runtime repository from https://github.com/msys2/msys2-runtime and applied patches in cygwin-3_3-branch against msys2-3_3_4-release branch. The patches applied are listed in cygwin-3_3-branch-merged.log attached. A few patches, which are not actually in cygwin-3_3-branch, are also applied just for avoiding conflict easily. However, I cannot reproduce your problem. Have you surely applied the following patches especially important for this issue? Could you please also check if the code of cons_master_thread() in fhandler_console.cc exactly matches with cons_master_thread.cc attached? commit 4d0721a66f94427fa14601d0c58a0762709b5bf2 Author: Takashi Yano Date: Fri Feb 25 17:10:03 2022 +0900 Cygwin: console: Prevent the order of typeahead input from swapped. - If a lot of keys are typed very quickly in the app which does not read console, the order of input keys in console input buffer occasionally swapped. Although this extremely rarely happens, is obviously a bug of cons_master_thread. This patch fixes the issue. commit f48870148c7ebcaf8163b08a040d15ef048f4e94 Author: Takashi Yano Date: Mon Feb 28 20:02:01 2022 +0900 Cygwin: console: Improve the code to avoid typeahead key swapping. - The commit "Cygwin: console: Prevent the order of typeahead input from swapped." did not fully resolve the issue. If keys are typed during input buffer fix, the order of key event may be swapped. This patch fixes the issue again. commit 6e872adb9f153ba0504c898a91ac8dcf0ed7e68a Author: Takashi Yano Date: Wed Mar 2 09:55:52 2022 +0900 Cygwin: console: Prevent special keys processing from drop. - There was a potential risk to drop special key processing when process_input_messsage() is called intermittently. This patch fixes the issue. commit d88768187a72662d1692ee279e7dea3e948d256e Author: Takashi Yano Date: Wed Mar 2 11:08:27 2022 +0900 Cygwin: console: Fix a bug from comparison between int and DWORD. commit cef38f41f2ce0510855bb4b872c7f6514f6deca5 Author: Takashi Yano Date: Wed Mar 2 16:00:31 2022 +0900 Cygwin: console, pty: Revamp the acquire/release_attach_mutex timing. - This patch revises the acquiring/releasing timing for attach_mutex to make the period in which it is being acquired shorter. Further, acquiring/releasing are added to where they are missing but needed. -- Takashi Yano --Multipart=_Fri__18_Mar_2022_13_23_35_+0900_dijPPCXjUHVx7/Qg Content-Type: application/octet-stream; name="cygwin-3_3-branch-merged.log" Content-Disposition: attachment; filename="cygwin-3_3-branch-merged.log" Content-Transfer-Encoding: base64 Y29tbWl0IDE5MGVlMzU2YTExNDI0MTQ1ZTU2NzgzYjEyMjFhZGU0OWQyMTZkM2UKQXV0aG9yOiBU YWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBGcmkgTWFyIDEx IDE3OjI2OjMwIDIwMjIgKzA5MDAKCiAgICBDeWd3aW46IHBhdGg6IEFkZCBmYWxsYmFjayBmb3Ig REZTIG1vdW50ZWQgZHJpdmUuCiAgICAKICAgIC0gSWYgVU5DIHBhdGggZm9yIERGUyBpcyBtb3Vu dGVkIHRvIGEgZHJpdmUgd2l0aCBkcml2ZSBsZXR0ZXIsIHRoZQogICAgICBlcnJvciAiVG9vIG1h bnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzIiBvY2N1cnMgd2hlbiBhY2Nlc3NpbmcKICAgICAg dG8gdGhhdCBkcml2ZS4gVGhpcyBpcyBiZWNhdXNlIEdldERvc0RldmljZVcoKSByZXR1cm5zIHVu ZXhwZWN0ZWQKICAgICAgc3RyaW5nIHN1Y2ggYXMgIlxEZXZpY2VcTXVwXERmc0NsaWVudFw7Wjow MDAwMDAwMDAwMDNmYjg5XGRmc3NlcnZlcgogICAgICBcZGZzXGxpbmtuYW1lIiBmb3IgdGhlIG1v dW50ZWQgVU5DIHBhdGggIlw/P1xVTkNcZmlsZXNlcnZlclxzaGFyZSIuCiAgICAgIFRoaXMgcGF0 Y2ggYWRkcyBhIHdvcmthcm91bmQgZm9yIHRoaXMgaXNzdWUuCiAgICAKICAgICAgQWRkcmVzc2Vz OiBodHRwczovL2N5Z3dpbi5jb20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIyLU1hcmNoLzI1MDk3OS5o dG1sCgpjb21taXQgZDZlNzVmZTQ1YWNhYjZiM2Y4ZjQ2MWYyNDNhNGQwMGEzNWU5YWNhMgpBdXRo b3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFNhdCBN YXIgMTIgMDY6MTk6NTMgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogZnN5bmM6IFJldHVybiBFSU5W QUwgZm9yIHNwZWNpYWwgZmlsZXMuCiAgICAKICAgIC0gVW5saWtlIGxpbnV4LCBmc3luYygpIGNh bGxzIEZsdXNoRmlsZUJ1ZmZlcnMoKSBldmVuIGZvciBzcGVjaWFsCiAgICAgIGZpbGVzLiBUaGlz IGNhdXNlcyB0aGUgcHJvYmxlbSByZXBvcnRlZCBpbjoKICAgICAgICBodHRwczovL2N5Z3dpbi5j b20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIyLU1hcmNoLzI1MTAyMi5odG1sCiAgICAgIFRoaXMgcGF0 Y2ggZml4ZXMgdGhlIGlzc3VlLgoKY29tbWl0IDc5YjI1Mjc2N2M0YWE0ODFjMjZhMWQwMTNjNzYz YzU1YTE5YTYzNjIKQXV0aG9yOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogICBUaHUgTWFyIDEwIDIwOjIwOjAwIDIwMjIgKzA5MDAKCiAgICBDeWd3aW46IGNv bnNvbGUsIHB0eTogRml4IHNlZ2ZhdWx0IGluIGNoaWxkX2luZm9fc3Bhd246OndvcmtlcigpLgog ICAgCiAgICAtIEFmdGVyIHRoZSBjb21taXQgIkN5Z3dpbjogcHR5LCBjb25zb2xlOiBGaXggaGFu ZGxlIGxlYWsgd2hpY2gKICAgICAgb2NjdXJzIG9uIGV4ZWMoKSBlcnJvci4iLCBzdGFydHh3aW4g Y2Fubm90IHN0YXJ0IFggZHVlIHRvIHRoZQogICAgICBlcnJvciAiRmFpbGVkIHRvIGFjdGl2YXRl IHZpcnR1YWwgY29yZSBrZXlib2FyZDogMiIuIFRoZSBwcm9ibGVtCiAgICAgIGlzIGFjY2VzcyB2 aW9sYXRpb24gaW4gdGhlIGNvZGUgcmV0cmlldmluZyB0aGUgcGdpZCBvZiB0aGUgY3R0eS4KICAg ICAgVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUuCiAgICAKICAgICAgQWRkcmVzc2VzOiBodHRw czovL2N5Z3dpbi5jb20vcGlwZXJtYWlsL2N5Z3dpbi8yMDIyLU1hcmNoLzI1MTAxMy5odG1sCgpj b21taXQgNTYxNDg1MmJlZTkyMTIwZDkwZTJiNWMzMGRmNTcxMmY3ZDA3MTBjMQpBdXRob3I6IFRh a2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFNhdCBNYXIgNSAw OTozOToyNiAyMDIyICswOTAwCgogICAgQ3lnd2luOiBwdHk6IEFkb3B0IHRoZSB2YXJpYWJsZSBu YW1lIHRvIHRoZSBuYW1lIGdlbmVyYWxseSB1c2VkLgogICAgCiAgICAtIEdlbmVyYWxseSwgJ1xu JyBpcyBjYWxsZWQgImxpbmUgZmVlZCIgKG5vdCAibmV3IGxpbmUiKSwgc28gdGhlCiAgICAgIHZh cmlhYmxlIG5hbWUgcF9ubCBoYXMgYmVlbiBjaGFuZ2VkIHRvIHBfbGYuCgpjb21taXQgOTZkNWMy YTU0NTVlOTA4YTY5Nzk5NzA0NTZjODE4MTMxYzZkMDE1MwpBdXRob3I6IFRha2FzaGkgWWFubyA8 dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFNhdCBNYXIgNSAwODozOTowNSAyMDIy ICswOTAwCgogICAgQ3lnd2luOiBwdHk6IEFkZCBzZXZlcmFsIGZ1cnRoZXIgY29tbWVudHMgdG8g dGhlIHB0eSBjb2RlLgoKY29tbWl0IDdmMzAwYTVhNzE3Y2QxM2Q3NTYyZDZkMDA3NDIwYmMyMzlh MDA4NDkKQXV0aG9yOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0 ZTogICBGcmkgTWFyIDQgMjM6NTc6MTIgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogcHR5OiBUYWtl IGFjY291bnQgb2YgQ1IrTkwgbGluZSBmZWVkIGluIGlucHV0LgogICAgCiAgICAtIEN1cnJlbnRs eSwgaW5kaXZpZHVhbCBDUiBvciBOTCBpcyB0cmVhdGVkIGFzIGxpbmUgZmVlZCBpbgogICAgICBh Y2NlcHRfaW5wdXQoKSBhbmQgdHJhbnNmZXJfaW5wdXQoKS4gVGhpcyBwYXRjaCB0YWtlcyBhY2Nv dW50CiAgICAgIG9mIENSK05MIGFzIHdlbGwuCgpjb21taXQgYzlkZWEyZjUxOTJjNzQxNmYzZDhm MDIyYjcxZDAyYmQ1Y2QwMzc0YwpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5p ZnR5Lm5lLmpwPgpEYXRlOiAgIEZyaSBNYXIgNCAyMjowMjozNSAyMDIyICswOTAwCgogICAgQ3ln d2luOiBwdHk6IEZpeCBhIHBvc3NpYmxlIHJhY2UgaXNzdWUgaW4gaW5pdGlhbGl6YXRpb24gb2Yg cGNvbi4KICAgIAogICAgLSBDdXJyZW50bHksIHR0eTo6cGNvbl9zdGFydCBmbGFnIGlzIGNsZWFy ZWQgYmVmb3JlIHRyYW5zZmVyX2lucHV0KCkKICAgICAgaW4gbWFzdGVyOjp3cml0ZSgpLCBob3dl dmVyLCB0aGUgY29kZSBpbiBzZXR1cF9wc2V1ZG9jb25zb2xlKCkKICAgICAgd2FpdHMgZm9yIHRy YW5zZmVyX2lucHV0KCkgdXNpbmcgdHR5OjpwY29uX3N0YXJ0LiBUaGlzIHBvc3NpYmx5CiAgICAg IGNhdXNlcyB0aGUgcmFjZSBpc3N1ZS4gVGhlIHBhdGNoIGZpeGVzIHRoaXMgcG90ZW50aWFsIGlz c3VlLgoKY29tbWl0IDc5MTUzYTExNGU3ZDBlMmI1MmRmMmQyYmU1ZmZjNzk3Mjc2NWY0ZmMKQXV0 aG9yOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBGcmkg TWFyIDQgMjI6MDA6MjQgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogcHR5OiBVcGRhdGUgc29tZSBj b21tZW50cyBpbiBwdHkgY29kZS4KCmNvbW1pdCBiZjQwMmU5ZDQ3NjU4NTgzNzU4ZTI3ODljZjk2 OWU3ZDhmNTljOTUxCkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUu anA+CkRhdGU6ICAgRnJpIE1hciA0IDE4OjU0OjE4IDIwMjIgKzA5MDAKCiAgICBDeWd3aW46IHB0 eTogT21pdCB0cmFuc2Zlcl9pbnB1dCgpIGNhbGwgd2hlcmUgaXQgaXMgbm8gbG9uZ2VyIG5lZWRl ZC4KICAgIAogICAgLSBUaGlzIHBhdGNoIHJlbW92ZXMgdGhlIG9sZCBjb2RlIHdoaWNoIGNhbGxz IHRyYW5zZmVyX2lucHV0KCkgYnV0CiAgICAgIGlzIG5vIGxvbmdlciBuZWVkZWQuIFRoZXNlIGNv ZGUgd2FzIG5lY2Vzc2FyeSBpbmRlZWQgaW4gdGhlIHBhc3QsCiAgICAgIGhvd2V2ZXIsIGFzIGEg cmVzdWx0IG9mIHJlY2VudCBmcmVxdWVudCBjb2RlIGNoYW5nZXMsIGl0IGlzIG5vCiAgICAgIGxv bmdlciBuZWVkZWQuCgpjb21taXQgOTQ5MGI5Yzc2Njg0MWI0ZDdmNzAwNzQ3NmJmNmRhOTBkZTJh N2M5ZApBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRl OiAgIEZyaSBNYXIgNCAxNDo0Mjo0NiAyMDIyICswOTAwCgogICAgQ3lnd2luOiBwdHk6IFJlYXJy YW5nZSByZXNldF9zd2l0Y2hfdG9fbmF0X3BpcGUoKSBjYWxscy4KICAgIAogICAgLSBQcmV2aW91 c2x5LCByZXNldF9zd2l0Y2hfdG9fbmF0X3BpcGUoKSBpcyBjYWxsZWQgZnJvbSBtYW55IHBsYWNl cwogICAgICBpbiBwdHkgY29kZS4gVGhpcyBwYXRjaCByZW9yZ2FuaXplcyB0aGF0LiBXaXRoIHRo aXMgcGF0Y2gsIGl0IGlzCiAgICAgIGNhbGxlZCBvbmx5IGZyb20gYmdfY2hlY2soKSBhbmQgc2V0 cGdpZF9hdXgoKS4gVGhlIGNhbGxzIHdoaWNoCiAgICAgIGRvZXMgbm90IGhhdmUgZW5vdWdoIHJl YXNvbiBoYXZlIGJlZW4gb21pdHRlZC4KCmNvbW1pdCBkYzgxNDM4MjZiNWU1YjY0MTgyNGUzYjYy ZjMwNDI3ZjI5ZTIyM2UxCkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHku bmUuanA+CkRhdGU6ICAgRnJpIE1hciA0IDE2OjA1OjM1IDIwMjIgKzA5MDAKCiAgICBDeWd3aW46 IHB0eTogVHJlYXQgYm90aCBDUiBhbmQgTkwgYXMgbGluZSBmZWVkIGluIHRyYW5zZmVyX2lucHVw KCkuCiAgICAKICAgIC0gVG8gbWFrZSByZWFkKCkgd29yayBwcm9wZXJseSBpbiBjYW5vbmljYWwg bW9kZSwgd3JpdGluZyB0byB0aGUgcHR5CiAgICAgIHBpcGUgc2hvdWxkIGJlIGRvbmUgbGluZSBi eSBsaW5lLiBIb3dldmVyLCBvbmx5IENSIHdhcyB0cmVhdGVkIGFzCiAgICAgIGxpbmUgc2VwYXJh dG9yIHByZXZpb3VzbHkgaW4gdHJhbnNmZXJfaW5wdXQoKS4gVGhpcyBwYXRjaCBmaXhlcwogICAg ICB0aGUgaXNzdWUuCgpjb21taXQgOTM4NWFkYmQzZDhkMWU1MThjNmIyNjEyMjE0NDhiNGNhZTE4 NDBmNwpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRl OiAgIFRodSBNYXIgMyAxMTo0MzowNyAyMDIyICswOTAwCgogICAgQ3lnd2luOiBwdHk6IFN0b3Ag dG8gdXNlIFBJRF9ORVdfUEcgZmxhZyBhcyBhIG1hcmtlciBmb3IgR0RCLgogICAgCiAgICAtIFBy ZXZpb3VzbHksIHRoZSBQSURfTkVXX1BHIGZsYWcgd2FzIGFsc28gdXNlZCBhcyBhIG1hcmtlciBm b3IgR0RCCiAgICAgIHdpdGggbm9uLWN5Z3dpbiBpbmZlcmlvciwgdW5saWtlIGl0cyBvcmlnaW5h bCBtZWFuaW5nLiBXaXRoIHRoaXMKICAgICAgcGF0Y2gsIHRoZSBjb25kaXRpb24gZXhlY19kd1By b2Nlc3NJZCA9PSBkd1Byb2Nlc3NJZCBpcyB1c2VkIGFzIGEKICAgICAgbWFya2VyIGZvciB0aGF0 IGluc3RlYWQuCgpjb21taXQgYjUyOTQzMzU4YTM2ZDFkZDdkYmYyMDlmYzRiZjA1NjAxNmU3ODA2 ZApBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAg IFRodSBNYXIgMyAxMDo1NToxMiAyMDIyICswOTAwCgogICAgQ3lnd2luOiBwdHk6IFNpbXBsaWZ5 IHRoZSBzZXR1cCBjb2RlIGZvciBHREIgYSBiaXQuCiAgICAKICAgIC0gVGhpcyBwYXRjaCBvbWl0 cyB0aGUgdW5uZWNlc3NhcnkgY29kZSBwYXRoIGZvciBzZXR1cCBmb3IgR0RCLgoKY29tbWl0IGM2 OWYyYWU4YjEzN2FlMTNmZGExYThiZjQ0YWRhMDdkZjQxOTNlODkKQXV0aG9yOiBUYWthc2hpIFlh bm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBUaHUgTWFyIDMgMTA6Mzg6MDUg MjAyMiArMDkwMAoKICAgIEN5Z3dpbjogcHR5OiBSZW5hbWUgbmF0X3BpcGVfb3duZXJfYWxpdmUo KSB0byBwcm9jZXNzX2FsaXZlKCkuCiAgICAKICAgIC0gVGhlIGZ1bmN0aW9uIG5hdF9waXBlX293 bmVyX2FsaXZlKCkgaXMgdXNlZCBldmVuIGZvciB0aGUgcHJvY2VzcwogICAgICB3aGljaCBpcyBu b3QgYSBuYXQgcGlwZSBvd25lciwgc28sIGl0IGlzIHJlbmFtZWQgdG8gcHJvY2Vzc19hbGl2ZSgp LgoKY29tbWl0IDI5NzE0Y2VjZDZlNDk0MTQ0YmVkNjQ3ZDYzOWIyZDNmZjc3MTlkZTgKQXV0aG9y OiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBUaHUgTWFy IDMgMDQ6MDY6MzggMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogcHR5OiBBZGQgc3RpbGwgbWlzc2lu ZyBhY3F1aXJlL3JlbGVhc2VfYXR0YWNoX211dGV4LgogICAgCiAgICAtIHRyYW5zZmVyX2lucHV0 KCkgZnVuY3Rpb24gdXNlcyBjb25zb2xlIGFwaSwgc28gaXQgc2hvdWxkIGJlIGd1YXJkZWQKICAg ICAgYnkgYXR0YWNoX211dGV4LiBIb3dldmVyLCBpbiBtb3N0IGNhc2VzLCBpdCBpcyBtaXNzaW5n LiBUaGlzIHBhdGNoCiAgICAgIGZpeGVzIHRoZSBpc3N1ZS4KCmNvbW1pdCAxOGE5NmFjNGEyMjVj YmUxNTIxZWYzZWQwMDkwMjUxYTAwODg1ZDk3CkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hp Lnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgV2VkIE1hciAyIDIxOjM1OjQwIDIwMjIgKzA5MDAK CiAgICBDeWd3aW46IHB0eTogQ29tbXVuYWxpemUgdGhlIGNvZGUgZm9yIHRlbXBvcmFyeSBhdHRh Y2ggdG8gY29uc29sZS4KICAgIAogICAgLSBUaGlzIHBhdGNoIGNvbW11bmFsaXplcyB0aGUgY29k ZSBmb3IgYXR0YWNoaW5nIGFub3RoZXIgY29uc29sZQogICAgICB0ZW1wb3JhcmlseSBhbmQgcmVz dW1pbmcgdG8gdGhlIG9yaWdpbmFsIGF0dGFjaCBzdGF0ZSwgYmVjYXVzZQogICAgICB0aGVyZSB3 ZXJlIGEgcGx1cmFsaXR5IG9mIHNpbWlsYXIgY29kZXMgdGhyb3VnaG91dC4KCmNvbW1pdCBjZWYz OGY0MWYyY2UwNTEwODU1YmI0Yjg3MmM3ZjY1MTRmNmRlY2E1CkF1dGhvcjogVGFrYXNoaSBZYW5v IDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgV2VkIE1hciAyIDE2OjAwOjMxIDIw MjIgKzA5MDAKCiAgICBDeWd3aW46IGNvbnNvbGUsIHB0eTogUmV2YW1wIHRoZSBhY3F1aXJlL3Jl bGVhc2VfYXR0YWNoX211dGV4IHRpbWluZy4KICAgIAogICAgLSBUaGlzIHBhdGNoIHJldmlzZXMg dGhlIGFjcXVpcmluZy9yZWxlYXNpbmcgdGltaW5nIGZvciBhdHRhY2hfbXV0ZXgKICAgICAgdG8g bWFrZSB0aGUgcGVyaW9kIGluIHdoaWNoIGl0IGlzIGJlaW5nIGFjcXVpcmVkIHNob3J0ZXIuIEZ1 cnRoZXIsCiAgICAgIGFjcXVpcmluZy9yZWxlYXNpbmcgYXJlIGFkZGVkIHRvIHdoZXJlIHRoZXkg YXJlIG1pc3NpbmcgYnV0IG5lZWRlZC4KCmNvbW1pdCBkODg3NjgxODdhNzI2NjJkMTY5MmVlMjc5 ZTdkZWEzZTk0OGQyNTZlCkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHku bmUuanA+CkRhdGU6ICAgV2VkIE1hciAyIDExOjA4OjI3IDIwMjIgKzA5MDAKCiAgICBDeWd3aW46 IGNvbnNvbGU6IEZpeCBhIGJ1ZyBmcm9tIGNvbXBhcmlzb24gYmV0d2VlbiBpbnQgYW5kIERXT1JE LgoKY29tbWl0IDZlODcyYWRiOWYxNTNiYTA1MDRjODk4YTkxYWM4ZGNmMGVkN2U2OGEKQXV0aG9y OiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBXZWQgTWFy IDIgMDk6NTU6NTIgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogY29uc29sZTogUHJldmVudCBzcGVj aWFsIGtleXMgcHJvY2Vzc2luZyBmcm9tIGRyb3AuCiAgICAKICAgIC0gVGhlcmUgd2FzIGEgcG90 ZW50aWFsIHJpc2sgdG8gZHJvcCBzcGVjaWFsIGtleSBwcm9jZXNzaW5nIHdoZW4KICAgICAgcHJv Y2Vzc19pbnB1dF9tZXNzc2FnZSgpIGlzIGNhbGxlZCBpbnRlcm1pdHRlbnRseS4gVGhpcyBwYXRj aAogICAgICBmaXhlcyB0aGUgaXNzdWUuCgpjb21taXQgZDM1M2M3YTFhZTA1N2YwODEzZWNkYWYw YTM0N2EzZmJmZDEyMWZjMwpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5 Lm5lLmpwPgpEYXRlOiAgIFdlZCBNYXIgMiAwODozNTowOSAyMDIyICswOTAwCgogICAgQ3lnd2lu OiBjb25zb2xlOiBTdG9wIHRvIGNyZWF0ZSBzdHJ1Y3QgaW5zdGFuY2Ugd2hpY2ggaXMgbm90IG5l ZWRlZC4KICAgIAogICAgLSBJbiBmaGFuZGxlcl9jb25zb2xlOjpjb25zX21hc3Rlcl90aHJlYWQo KSwgYSBzdHJ1Y3Qgd2hpY2ggaGFzCiAgICAgIG9ubHkgYSBzdGF0aWMgZnVuY3Rpb24gaXMgdXNl ZC4gSW4gdGhpcyBjYXNlLCBzdHJ1Y3QgaW5zdGFuY2UKICAgICAgaXMgbm90IG5lY2Vzc2FyeS4g U28gd2l0aCB0aGlzIHBhdGNoLCB0aGUgc3RhdGljIGZ1bmN0aW9uIGlzCiAgICAgIGludm9rZWQg d2l0aG91dCBjcmVhdGluZyBpbnN0YW5jZS4KCmNvbW1pdCAzOTU5MmZkMDA1ZGJlOTYzODgyM2Qy NTNiNmUwMGM3NDcwMmZmMzRhCkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9Abmlm dHkubmUuanA+CkRhdGU6ICAgVHVlIE1hciAxIDIyOjA5OjAxIDIwMjIgKzA5MDAKCiAgICBDeWd3 aW46IHB0eTogUmVuYW1lIHNvbWUgZnVuY3Rpb25zL3ZhcmlhYmxlcyB3aXRoIHRoZSBuYW1lICpw Y29uKi4KICAgIAogICAgLSBXaXRoIHRoaXMgcGF0Y2gsIHNvbWUgcHR5IGZ1bmN0aW9ucy92YXJp YWJsZXMgaGF2ZSBiZWVuIHJlbmFtZWQKICAgICAgc28gdGhhdCB0aGUgbmFtZSAqcGNvbiogaXMg bm90IHVzZWQgZm9yIHRob3NlIHRoYXQgYXJlIGNhbGxlZAogICAgICBldmVuIHdoZW4gdGhlIHBz ZXVkbyBjb25zb2xlIGlzIG5vdCBhY3RpdmUuCgpjb21taXQgYTZiMmM3MDU1Mjg2ZmFlZGUwZDg2 MzU2YjE1ZWUyNDIyMmZhMmQ4MgpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5p ZnR5Lm5lLmpwPgpEYXRlOiAgIFR1ZSBNYXIgMSAxODowNDozNSAyMDIyICswOTAwCgogICAgQ3ln d2luOiBwdHk6IFJlb3JnYW5pemUgdGhlIGNvZGUgcGF0aCBvZiBzZXR0aW5nIHVwIGFuZCBjbG9z aW5nIHBjb24uCiAgICAKICAgIC0gVGhpcyBwYXRjaCByZW9yZ2FuaXplcyB0aGUgY29kZSBwYXRo IG9mIHNldHRpbmctdXAgYW5kIGNsZWFuaW5nLXVwCiAgICAgIG9mIHRoZSBwc2V1ZG8gY29uc29s ZSB0byBpbXByb3ZlIHJlYWRhYmlsaXR5IGFuZCBtYWludGFpbmFiaWxpdHkKICAgICAgb2YgcHR5 IGNvZGUuCgpjb21taXQgYTQ2OTdhMDkyODNmY2Y1M2U0ZTkwMTQ0ZmI5MzNiODkwMjg1ZmYxZApB dXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFR1 ZSBNYXIgMSAxMTozNDoxNiAyMDIyICswOTAwCgogICAgQ3lnd2luOiBwdHk6IEF2b2lkIGN1dHRp bmcgdGhlIGJyYW5jaCB0aGUgcHR5IG1hc3RlciBpcyBzaXR0aW5nIG9uLgogICAgCiAgICAtIFdo ZW4gQ3RybC1DIHRlcm1pbmF0ZXMgYSBub24tY3lnd2luIHByb2Nlc3Mgb24gYSBwc2V1ZG8gY29u c29sZSwKICAgICAgcHR5IG1hc3RlciBhdHRhY2hlcyB0byB0aGUgcHNldWRvIGNvbnNvbGUgZmly c3QsIGFuZCBzZW5kCiAgICAgIENUUkxfQ19FVkVOVC4gSWYgdGhlIG5vbi1jeWd3aW4gcHJvY2Vz cyBjbG9zZXMgdGhlIHBzZXVkbyBjb25zb2xlCiAgICAgIGJlZm9yZSB0aGUgcHR5IG1hc3RlciBj YWxscyBGcmVlQ29uc29sZSgpLCB0aGUgcHR5IG1hc3RlciBwcm9jZXNzCiAgICAgIHdpbGwgY3Jh c2guIFdpdGggdGhpcyBwYXRjaCwgcHR5IG1hc3RlciBwcm9jZXNzIHRha2VzIG92ZXIgdGhlCiAg ICAgIG93bmVyc2hpcCBvZiB0aGUgcHNldWRvIGNvbnNvbGUsIGFuZCBjbG9zZXMgaXQgYnkgbXlz ZWxmLgoKY29tbWl0IDE2MmU0MDkzOGRkMzVjYWI2YzMwZTM4NjJiYzJjYWU5YzRkZWIwZGUKQXV0 aG9yOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBNb24g RmViIDI4IDIwOjI1OjA5IDIwMjIgKzA5MDAKCiAgICBDeWd3aW46IHB0eTogSXNvbGF0ZSBDVFJM X0NfRVZFTlRzIGJldHdlZW4gcHR5cy4KICAgIAogICAgLSBXaXRoIHRoaXMgcGF0Y2gsIHVuaXF1 ZSBpbnZpc2libGUgY29uc29sZXMgYXJlIGNyZWF0ZWQgZm9yIGVhY2ggcHR5CiAgICAgIHRvIGlz b2xhdGUgQ1RSTF9DX0VWRU5UcyBiZXR3ZWVuIHB0eXMuIFRoaXMgaXMgbmVjZXNzYXJ5IGJ5IEN0 cmwtQwogICAgICBoYW5kbGluZyBpbiBmaGFuZGxlcl90ZXJtaW9zOjpwcm9jZXNzX3NpZ3MoKSBm b3Igbm9uLWN5Z3dpbiBhcHBzCiAgICAgIHN0YXJ0ZWQgaW4gcHR5IGlmIHRoZSBwc2V1ZG8gY29u c29sZSBpcyBkaXNhYmxlZC4KCmNvbW1pdCBmNDg4NzAxNDhjN2ViY2FmODE2M2IwOGEwNDBkMTVl ZjA0OGY0ZTk0CkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+ CkRhdGU6ICAgTW9uIEZlYiAyOCAyMDowMjowMSAyMDIyICswOTAwCgogICAgQ3lnd2luOiBjb25z b2xlOiBJbXByb3ZlIHRoZSBjb2RlIHRvIGF2b2lkIHR5cGVhaGVhZCBrZXkgc3dhcHBpbmcuCiAg ICAKICAgIC0gVGhlIGNvbW1pdCAiQ3lnd2luOiBjb25zb2xlOiBQcmV2ZW50IHRoZSBvcmRlciBv ZiB0eXBlYWhlYWQgaW5wdXQKICAgICAgZnJvbSBzd2FwcGVkLiIgZGlkIG5vdCBmdWxseSByZXNv bHZlIHRoZSBpc3N1ZS4gSWYga2V5cyBhcmUgdHlwZWQKICAgICAgZHVyaW5nIGlucHV0IGJ1ZmZl ciBmaXgsIHRoZSBvcmRlciBvZiBrZXkgZXZlbnQgbWF5IGJlIHN3YXBwZWQuCiAgICAgIFRoaXMg cGF0Y2ggZml4ZXMgdGhlIGlzc3VlIGFnYWluLgoKY29tbWl0IDM2MmJmNjliZDQyNzQyYmFlN2Jk OGJmMWMwYTM3YzlmZmFlNzg1MDAKQXV0aG9yOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0Bu aWZ0eS5uZS5qcD4KRGF0ZTogICBTYXQgRmViIDI2IDE1OjEzOjEzIDIwMjIgKzA5MDAKCiAgICBD eWd3aW46IHBpbmZvOiBGaXggZXhpdCBjb2RlIGZvciBub24tY3lnd2luIGFwcHMgd2hpY2ggcmVh ZHMgY29uc29sZS4KICAgIAogICAgLSBUaGUgcmVjZW50IGNvbW1pdCAiQ3lnd2luOiBwaW5mbzog Rml4IGV4aXQgY29kZSB3aGVuIG5vbi1jeWd3aW4gYXBwCiAgICAgIGV4aXRzIGJ5IEN0cmwtQy4i IGRpZCBub3QgZml4IGVub3VnaCB0aGUgaXNzdWUuIElmIGEgbm9uLWN5Z3dpbiBhcHAKICAgICAg aXMgcmVhZGluZyB0aGUgY29uc29sZSwgaXQgd2lsbCBub3QgcmV0dXJuIFNUQVRVU19DT05UUk9M X0NfRVhJVAogICAgICBldmVuIGlmIGl0IGlzIHRlcm1pbmF0ZWQgYnkgQ3RybC1DLiBBcyBhIHJl c3VsdCwgdGhlIHByZXZpb3VzIHBhdGNoCiAgICAgIGRvZXMgbm90IHRha2UgZWZmZWN0LgogICAg ICBUaGlzIHBhdGNoIHNvbHZlcyB0aGlzIGlzc3VlIGJ5IHNldHRpbmcgc2lnRXhlY2VkIHRvIFNJ R0lOVCBpbgogICAgICBjdHJsX2NfaGFuZGxlcigpLiBJbiBhZGRpdGlvbiwgc2lnRXhlY2VkIHdp bGwgYmUgY2xlYXJlZCBpZiB0aGUgYXBwCiAgICAgIGRvZXMgbm90IHRlcm1pbmF0ZWQgd2l0aGlu IHByZWRldGVybWluZWQgdGltZSBwZXJpb2QuIFRoZSByZWFzb24gaXMKICAgICAgdGhhdCB0aGUg YXBwIGRvZXMgbm90IHNlZW0gdG8gYmUgdGVybWluYXRlZCBieSB0aGUgc2lnbmFsIHNpZ0V4ZWNl ZC4KCmNvbW1pdCA2ZGM0ZGM4MzU4MmFmODdjNGQ3MmJhMDY1MzNhNzVmZjg0OWVkYjViCkF1dGhv cjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgTW9uIEZl YiAyOCAwNzoyNDo0NSAyMDIyICswOTAwCgogICAgQ3lnd2luOiB0ZXJtaW9zOiBFbnN1cmUgZGV0 ZWN0aW9uIG9mIEdEQiBpbmZlcmlvciBpbiBwcm9jZXNzX3NpZ3MoKS4KICAgIAogICAgLSBJbiBz b21lIHNpdHVhdGlvbnMsIHNvbWUgY3lnd2luIHByb2Nlc3NlcyBtaWdodCB3cm9uZ2x5IGlkZW50 aWZpZWQKICAgICAgYXMgR0RCIGluZmVyaW9yLiBUaGlzIHBhdGNoIGVuc3VyZXMgdGhlIGRldGVj dGlvbiBvZiBHREIgaW5mZXJpb3IuCgpjb21taXQgNDY4MjgyNTdkYzhhMTk5YmJiOWI4MWNlMGZk ZTA2ZDhiZWY4MjM0ZQpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5l LmpwPgpEYXRlOiAgIFN1biBGZWIgMjcgMjA6NDA6MjQgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjog dGVybWlvczogQWRkIGNvbW1lbnRzIHRvIHRoZSBjb2RlIHJlZmFjdG9yZWQgcmVjZW50bHkuCiAg ICAKICAgIC0gVGhpcyBwYXRjaCBhZGRzIHNvbWUgY29tbWVudHMgdG8gdGhlIHNvdXJjZSBjb2Rl IHdob3NlIGludGVudCBtYXkKICAgICAgbm90IGJlIGNsZWFyIGVub3VnaCBmcm9tIHRoZSBjb2Rl IHdoaWNoIGlzIHJlZmFjdG9yZWQgcmVjZW50bHkuCgpjb21taXQgYWY1MGJjYjg2ZjI0NDcxMTQy YzUxYzU1YTk4ODQ5NjhhYmM4NWY3ZgpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5v QG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFN1biBGZWIgMjcgMTI6MzM6MDggMjAyMiArMDkwMAoKICAg IEN5Z3dpbjogY29uc29sZTogQ29ycmVjdCB0aGUgcGFzdCBmaXggZm9yIGFwcHMgd2hpY2ggb3Bl biBwdHkuCiAgICAKICAgIC0gVGhlIGNvbW1pdCAiQ3lnd2luOiBjb25zb2xlOiBGaXggaXNzdWVz IG9mIGFwcHMgd2hpY2ggb3BlbiBwdHkuIgogICAgICBkaWQgbm90IGZpeCB0aGUgc2Vjb25kIHBy b2JsZW0gY29ycmVjdGx5LiBUaGF0IGNvbW1pdCBsb29rZWQgdG8KICAgICAgZml4IHRoZSBpc3N1 ZSwgYnV0IHRoZSBhY3R1YWwgcHJvYmxlbSB3YXMgdGhhdCBjdHJsX2NfaGFuZGxlcigpCiAgICAg IHNob3VsZCBiZSByZXJlZ2lzdGVyZWQgKkFGVEVSKiBGcmVlQ29uc29sZSgpL0F0dGFjaENvbnNv bGUoKS4KICAgICAgVGhpcyBwYXRjaCBjb3JyZWN0IHRoYXQuCgpjb21taXQgZDgwZWNkZDVjMmI5 MjBiYjA1ODU2YjIyMTM5N2VjZGMyMTFhNGJiMgpBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNo aS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFNhdCBGZWIgMjYgMjM6MzE6NTkgMjAyMiArMDkw MAoKICAgIEN5Z3dpbjogY29uc29sZTogUmV2ZXJ0IGV4cGVyaW1lbnRhbCBjb2RlIG1peGVkIGFj Y2lkZW50YWxseS4KICAgIAogICAgLSBUaGUgY29tbWl0ICJDeWd3aW46IGNvbnNvbGU6IFJlc3Rv cmUgQ1RSTF9CUkVBS19FVkVOVCBoYW5kbGluZy4iCiAgICAgIHdhcyBhY2NpZGVudGFsbHkgbWl4 ZWQgd2l0aCBleHBlcmltZW50YWwgY29kZSBpbiBleGNlcHRpb25zLmNjLgogICAgICBEdWUgdG8g dGhpcywgbm9uLWN5Z3dpbiBhcHAgcmVjZWl2ZXMgQ1RSTF9DX0VWRU5UIHR3aWNlIGluIHRoZQog ICAgICBmb2xsb3dpbmcgc2NlbmFyaW8uCiAgICAgICAxKSBSdW4gJ3NsZWVwIDEwIHwgPG5vbi1j eWd3aW4gYXBwPicKICAgICAgIDIpIEhpdCBDdHJsLUMuCiAgICAgICAzKSBUaGUgbm9uLWN5Z3dp biBhcHAgcmVjZWl2ZXMgQ1RSTF9DX0VWRU5UIHR3aWNlLgogICAgICBUaGlzIHBhdGNoIHJldmVy dHMgdGhlIGNvZGUgd2l0aCB0aGUgcHJvYmxlbS4KCmNvbW1pdCA0ZDA3MjFhNjZmOTQ0MjdmYTE0 NjAxZDBjNThhMDc2MjcwOWI1YmYyCkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9A bmlmdHkubmUuanA+CkRhdGU6ICAgRnJpIEZlYiAyNSAxNzoxMDowMyAyMDIyICswOTAwCgogICAg Q3lnd2luOiBjb25zb2xlOiBQcmV2ZW50IHRoZSBvcmRlciBvZiB0eXBlYWhlYWQgaW5wdXQgZnJv bSBzd2FwcGVkLgogICAgCiAgICAtIElmIGEgbG90IG9mIGtleXMgYXJlIHR5cGVkIHZlcnkgcXVp Y2tseSBpbiB0aGUgYXBwIHdoaWNoIGRvZXMKICAgICAgbm90IHJlYWQgY29uc29sZSwgdGhlIG9y ZGVyIG9mIGlucHV0IGtleXMgaW4gY29uc29sZSBpbnB1dCBidWZmZXIKICAgICAgb2NjYXNpb25h bGx5IHN3YXBwZWQuIEFsdGhvdWdoIHRoaXMgZXh0cmVtZWx5IHJhcmVseSBoYXBwZW5zLAogICAg ICBpcyBvYnZpb3VzbHkgYSBidWcgb2YgY29uc19tYXN0ZXJfdGhyZWFkLiBUaGlzIHBhdGNoIGZp eGVzIHRoZQogICAgICBpc3N1ZS4KCmNvbW1pdCA3MmFjMmE3YmEzMTgzYmQ2OGQzNmYyNzNjMGQz ZjVjODE1ZGJlMmUxCkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUu anA+CkRhdGU6ICAgU2F0IEZlYiAyNiAwNDoxOTowMyAyMDIyICswOTAwCgogICAgQ3lnd2luOiBw dHk6IFN0b3AgdG8gc2VuZCBDVFJMX0NfRVZFTlQgaWYgcGNvbiBhY3RpdmF0ZWQuCiAgICAKICAg IC0gVGhlIGNvbW1pdCAiQ3lnd2luOiBjb25zb2xlOiBSZWRlc2lnbiBoYW5kbGluZyBvZiBzcGVj aWFsIGtleXMuIgogICAgICByZW1vdmVzIHNwZWNpYWwgdHJlYXRtZW50IGZvciBwdHkgaW4gd2l0 aCBwc2V1ZG8gY29uc29sZSBhY3RpdmF0ZWQsCiAgICAgIGhvd2V2ZXIsIGl0IGlzIG5lY2Vzc2Fy eSBvbiBzZWNvbmQgdGhvdWdodC4gVGhpcyBpcyBiZWNhdXNlIHNlbmRpbmcKICAgICAgQ1RSTF9D X0VWRU5UIHRvIG5vbi1jeWd3aW4gYXBwcyB3aWxsIGJlIGRvbmUgaW4gcHNldWRvIGNvbnNvbGUs CiAgICAgIHRoZXJlZm9yZSwgc2VuZGluZyBpdCBpbiBmaGFuZGxlcl9wdHlfbWFzdGVyOjp3cml0 ZSgpIGR1cGxpY2F0ZXMKICAgICAgdGhhdCBldmVudCBmb3Igbm9uLWN5Z3dpbiBhcHBzLgoKY29t bWl0IGU0MDA3YzMxNmI0ZWNmNjNhOGEyODIwMTAxNDllOThkOTIwZjRmZGYKQXV0aG9yOiBUYWth c2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBGcmkgRmViIDI1IDE2 OjIzOjU4IDIwMjIgKzA5MDAKCiAgICBDeWd3aW46IGNvbnNvbGU6IEZpeCBpc3N1ZXMgb2YgYXBw cyB3aGljaCBvcGVuIHB0eS4KICAgIAogICAgLSBBZnRlciBzb21lIHJlY2VudCBjaGFuZ2VzIGZv ciBzcGVjaWFsIGtleXMgaGFuZGxpbmcgYnJlYWsgdGhlCiAgICAgIGFwcHMgd2hpY2ggb3BlbiBw dHkgKHN1Y2ggYXMgc2NyaXB0IGNvbW1hbmQpLiBJZiB0aGUgYXBwIHdoaWNoCiAgICAgIG9wZW5z IHB0eSBpcyBleGVjdXRlZCBpbiBjb25zb2xlLCB0aGUgZm9sbG93aW5nIGlzc3VlcyBvY2N1ci4K ICAgICAgICAxKSBJZiB0aGUgc2NyaXB0IGNvbW1hbmQgd2FzIHN0YXJ0ZWQgZnJvbSBub24tY3ln d2luIHNoZWxsCiAgICAgICAgICAgKHN1Y2ggYXMgY21kLmV4ZSksIGFub3RoZXIgY3lnd2luIGFw cCBzdGFydGVkIGluIHB0eSBzbGF2ZQogICAgICAgICAgIGNhbm5vdCByZWNlaXZlIEN0cmwtQy4K ICAgICAgICAyKSBJZiBub24tY3lnd2luIGFwcCBpcyBleGVjdXRlZCBpbiBwdHkgc2xhdmUsIHRo ZSBhcHAgd2hpY2gKICAgICAgICAgICBvcGVuZWQgdGhlIHB0eSAoZS5nLiBzY3JpcHQgY29tbWFu ZCkgY3Jhc2hlcyBieSBDdHJsLUMuCiAgICAgIFRoaXMgcGF0Y2ggZml4ZXMgdGhlc2UgaXNzdWVz LgoKY29tbWl0IGIyZjJmMzhjNTNhOGFkNWFmNTQwYTQ5OGZlNGY3NmVhYWVmZDRmNjYKQXV0aG9y OiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5qcD4KRGF0ZTogICBUaHUgRmVi IDI0IDIxOjA0OjQ5IDIwMjIgKzA5MDAKCiAgICBDeWd3aW46IHBpbmZvOiBGaXggZXhpdCBjb2Rl IHdoZW4gbm9uLWN5Z3dpbiBhcHAgZXhpdHMgYnkgQ3RybC1DLgogICAgCiAgICAtIFByZXZpb3Vz bHksIGlmIG5vbi1jeWd3aW4gYXBwIGV4aXRzIGJ5IEN0cmwtQywgZXhpdCBjb2RlIHdhcwogICAg ICAweDAwMDA3ZjAwLiBXaXRoIHRoaXMgcGF0Y2gsIHRoZSBleGl0IGNvZGUgd2lsbCBiZSAweDAw MDAwMDAyLAogICAgICB3aGljaCBtZWFucyBwcm9jZXNzIGV4aXRlZCBieSBTSUdJTlQuCgpjb21t aXQgMjhmYTQ5M2JhZWFmY2UyZmMyNzIwNjI2NDZkNjliMDQ3MGI0NDY2YgpBdXRob3I6IFRha2Fz aGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFRodSBGZWIgMjQgMTc6 Mjg6MzIgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogY29uc29sZTogUmVzdG9yZSBDVFJMX0JSRUFL X0VWRU5UIGhhbmRsaW5nLgogICAgCiAgICAtIFRoZSByZWNlbnQgY2hhbmdlIGJ5IHRoZSBjb21t aXQgIkN5Z3dpbjogY29uc29sZTogUmVkZXNpZ24gaGFuZGxpbmcKICAgICAgb2Ygc3BlY2lhbCBr ZXlzLiIgYnJlYWtzIHRoZSBoYW5kbGluZyBvZiBDVFJMX0JSRUFLX0VWRU5ULiBUaGUgbG9naW4K ICAgICAgc2hlbGwgaW4gY29uc29sZSBleGl0cyBvbiBDdHJsLUJyZWFrIGtleS4gVGhpcyBwYXRj aCBmaXhlcyB0aGUgaXNzdWUuCgpjb21taXQgOTI2YzAxOWRjMzE0Mzc0ZmI5NmEzNDExYmQxNzU4 Mjg1NGI3MmFlNApBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpw PgpEYXRlOiAgIFRodSBGZWIgMjQgMDA6NTc6MzcgMjAyMiArMDkwMAoKICAgIEN5Z3dpbjogcHR5 LCBjb25zb2xlOiBBZGQgYSB3b3JrYXJvdW5kIGZvciBHREIgU0lHSU5UIGhhbmRsaW5nLgogICAg CiAgICAtIFRoZSBpbmZlcmlvciBvZiB0aGUgR0RCIGNhbm5vdCBiZSBjb250aW51ZWQgYWZ0ZXIg U0lHSU5UIGV2ZW4KICAgICAgdGhvdWdoIG5vcGFzcyBvcHRpb24gaXMgc2V0LiBUaGlzIHNlZW1z IGJlY2F1c2UgY3lnd2luIEdEQiBkb2VzCiAgICAgIG5vdCBzdXBwb3J0IGhvb2tpbmcgY3lnd2lu IHNpZ25hbC4gVGhlcmVmb3JlLCBhIHdvcmthcm91bmQgZm9yCiAgICAgIEdEQiBpcyBhZGRlZC4g V2l0aCB0aGlzIHBhdGNoLCBvbmx5IENUUkxfQ19FVkVOVCBpcyBzZW50IHRvIHRoZQogICAgICBH REIgaW5mZXJpb3IgYnkgQ3RybC1DIGFuZCBzZW5kaW5nIFNJR0lOVCBpcyBvbWl0dGVkLiBOb3Rl IHRoYXQKICAgICAgImhhbmRsZSBTSUdJTlQgKG5vKXBhc3MiIGNvbW1hbmQgZG9lcyBub3QgdGFr ZSBlZmZlY3QgZXZlbiB3aXRoCiAgICAgIG9yIHdpdGhvdXQgdGhpcyBwYXRjaC4KCmNvbW1pdCA2 ZmY3YWFiNGE0ZTcwZDIwZmVhODVmNjNiZGE2NjRhN2U4NTEzZWJlCkF1dGhvcjogVGFrYXNoaSBZ YW5vIDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgV2VkIEZlYiAyMyAxMzoyNDoz OSAyMDIyICswOTAwCgogICAgQ3lnd2luOiBjb25zb2xlOiBSZWRlc2lnbiBoYW5kbGluZyBvZiBz cGVjaWFsIGtleXMuCiAgICAKICAgIC0gVGhpcyBwYXRjaCByZWFycmFuZ2VzIHRoZSBjb29wZXJh dGlvbiBiZXR3ZWVuIGNvbnNfbWFzdGVyX3RocmVhZCwKICAgICAgbGluZV9lZGl0LCBhbmQgY3Ry bF9jX2hhbmRsZXIgc28gdGhhdCBvbmx5IG9uZSBvZiB0aGVtIG9wZXJhdGVzCiAgICAgIGF0IHRo ZSBzYW1lIHRpbWUuIFNpbmNlIHRoZXNlIGhhbmRsZSBDdHJsLUMgaW5kaXZpZHVhbGx5LCBzbyB0 aGUKICAgICAgc2lnbmFsIG1heSBiZSBzZW50IG11bHRpcGxlIHRpbWVzIHRvIHRoZSBwcm9jZXNz LiBUaGlzIHBhdGNoIGZpeGVzCiAgICAgIHRoZSBpc3N1ZS4KCmNvbW1pdCA4MDYxODk4MzM0ZjM4 NDJlNzM3MjA2ZjhmMDBiMGJjYTRkYjZmZTY1CkF1dGhvcjogVGFrYXNoaSBZYW5vIDx0YWthc2hp Lnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgTW9uIEZlYiAyMSAyMjo0MDo0OCAyMDIyICswOTAw CgogICAgQ3lnd2luOiBwdHk6IEVuY2Fwc3VsYXRlIHB0eSBjb2RlIGluIHR0eTo6c2V0cGdpZCgp LgogICAgCiAgICAtIFRoaXMgcGF0Y2ggaGlkZXMgY29tcGxleCBwdHkgY29kZXMgaW4gdHR5Ojpz ZXRwZ2lkKCkgdG8gdHJhbnNmZXIKICAgICAgaW5wdXQgaW50byB0aGUgY2xhc3MgZmhhbmRsZXJf cHR5X3NsYXZlIGJ5IGVuY2Fwc3VsYXRpbmcgaXQuCgpjb21taXQgY2E0ZGZkYjEyMTRhODUxMzVh NmNkYjhhMTdlNTQ2MGE0NTk4MTBhNApBdXRob3I6IFRha2FzaGkgWWFubyA8dGFrYXNoaS55YW5v QG5pZnR5Lm5lLmpwPgpEYXRlOiAgIE1vbiBGZWIgMjEgMjE6MjA6NDggMjAyMiArMDkwMAoKICAg IEN5Z3dpbjogcHR5LCBjb25zb2xlOiBGaXggaGFuZGxlIGxlYWsgd2hpY2ggb2NjdXJzIG9uIGV4 ZWMoKSBlcnJvci4KICAgIAogICAgLSBUaGlzIHBhdGNoIGZpeGVzIHRoZSBoYW5kbGUgbGVhayB3 aGljaCBvY2N1cnMgd2hlbiBleGVjKCkgZmFpbHMKICAgICAgd2l0aCBhbiBlcnJvci4gVGhlIGR1 cGxpY2F0ZWQgaGFuZGxlcyB3aWxsIGJlIGNsb3NlZCB3aGVuIHRoZQogICAgICBleGVjJ2VkIHBy b2Nlc3MgaXMgdGVybWluYXRlZC4gSG93ZXZlciwgaWYgZXhlYygpIGZhaWxzLCB0aGUgY29kZQog ICAgICBwYXRoIGRvZXMgbm90IHJlYWNoIHRvIHRoZSBjb2RlIGNsb3NpbmcgdGhlIGR1cGxpY2F0 ZWQgaGFuZGxlcy4KICAgICAgVG8gaW1wbGVtZW50IHRoaXMgZml4IG1vcmUgYXBwcm9wcmlhdGVs eSwgdGhlIHNldHVwLCBjbGVhbnVwIGFuZAogICAgICBjbG9zaW5nIHB0eSBjb2RlcyB3aGljaCB3 YXMgcHJldmlvdXNseSBsb2NhdGVkIGluIHNwYXduLmNjIGFyZQogICAgICBlbmNhcHN1bGF0ZWQg aW50byB0aGUgZmhhbmRsZXJfcHR5X3NsYXZlIGNsYXNzIGZ1bmN0aW9ucy4KCmNvbW1pdCA3NWVm NWU2ZWNiMTQ1OWQ3NmFjMzkyMGM5Nzg1ZTMwMzY5MWY0OGU5CkF1dGhvcjogVGFrYXNoaSBZYW5v IDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgV2VkIEZlYiAxNiAxNTo0Mzo0MiAy MDIyICswOTAwCgogICAgQ3lnd2luOiBjb25zb2xlOiBSZWFycmFuZ2Ugc2V0XyhpbnxvdXQpcHV0 X21vZGUoKSBjYWxscy4KICAgIAogICAgLSBXaXRoIHRoaXMgcGF0Y2gsIGFsbCBzZXRfKGlufG91 dClwdXRfbW9kZSgpIGNhbGxzIGFyZSByZWFycmFuZ2VkCiAgICAgIGFzIGZvbGxvd3MuCiAgICAK ICAgICAgMSkgU2V0dXAgZm9yIGN5Z3dpbiBhcHBzLCBzdGFydGVkIGZyb20gbm9uLWN5Z3dpbiBh cHAsIGlzIGRvbmUKICAgICAgICAgaW4gZmhhbmRsZXJfY29uc29sZTo6cG9zdF9vcGVuX3NldHVw KCksIHdoaWNoIG92ZXJyaWRlcwogICAgICAgICBmaGFuZGxlcl9iYXNlOjpwb3N0X29wZW5fc2V0 dXAoKSBjYWxsZWQgZnJvbSBkdGFibGUuY2MuCiAgICAgIDIpIENsZWFudXAgZm9yIGN5Z3dpbiBh cHAgaXMgZG9uZSBpbiBmaGFuZGxlcl9jb25zb2xlOjpjbG9zZSgpLgogICAgICAzKSBTZXR1cCBm b3IgY3lnd2luIGFwcHMgaXMgYWxzbyBpbiBmaGFuZGxlcl9jb25zb2xlOjpiZ19jaGVjaygpLAog ICAgICAgICB3aGljaCBvdmVycmlkZXMgZmhhbmRsZXJfdGVybWlvczo6YmdfY2hlY2soKS4gVGhp cyBpcyBjYWxsZWQKICAgICAgICAgb24gcmVhZCgpLCB3cml0ZSgpIGFuZCBzZWxlY3QoKSBmb3Ig Y29uc29sZS4gSXQgaXMgbmVjZXNzYXJ5CiAgICAgICAgIGlmIGN5Z3dpbiBhbmQgbm9uLWN5Z3dp biBhcHBzIGFyZSBzdGFydGVkIHNpbXVsdGFuZW91c2x5IGluCiAgICAgICAgIHRoZSBzYW1lIHBy b2Nlc3MgZ3JvdXAuCiAgICAgIDQpIFNldHVwIGZvciBub24tY3lnd2luIGFwcHMgaXMgZG9uZSBp biBzcGF3bi5jYyB2aWEKICAgICAgICAgZmhhbmRsZXJfY29uc29sZTo6c2V0dXBfY29uc29sZV9m b3Jfbm9uX2N5Z3dpbl9hcHAoKS4KICAgICAgNSkgQ2xlYW51cCBmb3Igbm9uLWN5Z3dpbiBhcHAg aXMgZG9uZSBpbiBzcGF3bi5jYyB2aWQKICAgICAgICAgZmhhbmRsZXJfY29uc29sZTo6Y2xlYW51 cF9jb25zb2xlX2Zvcl9ub25fY3lnd2luX2FwcCgpLgogICAgICA2KSBTZXR1cCBmb3Igbm9uLWN5 Z3dpbiBhcHAgc3RhcnRlZCBieSBHREIgaXMgZG9uZSBpbgogICAgICAgICBmaGFuZGxlcl9jb25z b2xlOjpzZXRfY29uc29sZV9tb2RlX3RvX25hdGl2ZSgpLgogICAgICA3KSBObyBleHBsaWNpdCBj bGVhbnVwIGZvciBub24tY3lnd2luIGFwcCBzdGFydGVkIGJ5IEdEQiwgYmVjYXVzZQogICAgICAg ICBjb25zb2xlIG1vZGUgaXMgYXV0b21hdGljYWxseSByZXNldCB0byB0dHk6OmN5Z3dpbiBvbiBy ZWFkKCkvCiAgICAgICAgIHdyaXRlKCkgaW4gR0RCIHRoYW5rcyB0byAzKS4KCmNvbW1pdCA2NWNh NmE2Y2FmMzljZThmYjUyMmJjZDlhNzUyYzAxYTJlNGQxNDEwCkF1dGhvcjogVGFrYXNoaSBZYW5v IDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgVHVlIEZlYiAxNSAyMzoyMzo1MCAy MDIyICswOTAwCgogICAgQ3lnd2luOiBwdHksIGNvbnNvbGU6IFJlZmFjdG9yIHRoZSBjb2RlIHBy b2Nlc3Npbmcgc3BlY2lhbCBrZXlzLgogICAgCiAgICAtIFRoaXMgcGF0Y2ggY29tbW9uaXplIHRo ZSBjb2RlIHdoaWNoIHByb2Nlc3NlcyBzcGVjaWFsIGtleXMgaW4gcHR5CiAgICAgIGFuZCBjb25z b2xlIHRvIGltcHJvdmUgbWFpbnRhbmFuY2liaWxpdHkuIEFzIGEgcmVzdWx0LCBzb21lIHNtYWxs CiAgICAgIGJ1Z3MgaGF2ZSBiZWVuIGZpeGVkLgoKY29tbWl0IDJkZTNkZDE0YTViNjc1ZGViNmNk YTZkNmU0MGNlODg5NmRjNmRjMDMKQXV0aG9yOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0Bu aWZ0eS5uZS5qcD4KRGF0ZTogICBTYXQgRmViIDUgMTY6NTI6MzMgMjAyMiArMDkwMAoKICAgIEN5 Z3dpbjogY29uc29sZTogUmVtb3ZlIHVubmVjZXNzYXJ5IChyZWR1bmRhbnQpIGNvZGUuCgpjb21t aXQgZmZhMDhiZDliMDE1ZTk3MWU3ODhjNDRlYWY3ODhmZmYyYjg5NGQ5ZApBdXRob3I6IFRha2Fz aGkgWWFubyA8dGFrYXNoaS55YW5vQG5pZnR5Lm5lLmpwPgpEYXRlOiAgIFRodSBGZWIgMyAyMTow OTo0NCAyMDIyICswOTAwCgogICAgQ3lnd2luOiBjb25zb2xlOiBGaXggSUwvREwgZXNjYXBlIHNl cXVlbmNlIG9uIHRoZSBsYXN0IGxpbmUuCiAgICAKICAgIC0gQ3VycmVudGx5LCBlc2NhcGUgc2Vx dWVuY2UgSUwvREwgKENTSSBQcyBMLCBDU0kgUHMgTSkgZG9lcyBub3QKICAgICAgd29yayBjb3Jy ZWN0bHkgYXQgdGhlIGxhc3QgKGJvdHRvbSBlbmQpIGxpbmUuIFRoaXMgcGF0Y2ggZml4ZXMKICAg ICAgdGhlIGlzc3VlLgogICAgCiAgICBBZGRyZXNzZXM6CiAgICAgIGh0dHBzOi8vY3lnd2luLmNv bS9waXBlcm1haWwvY3lnd2luLzIwMjItRmVicnVhcnkvMjUwNzM2Lmh0bWwKCmNvbW1pdCAzYWNm Y2M3YjYzM2FhYjEwYWEyZGNhMmJjM2JlMjVkODFjMTQ4Mjk5CkF1dGhvcjogVGFrYXNoaSBZYW5v IDx0YWthc2hpLnlhbm9AbmlmdHkubmUuanA+CkRhdGU6ICAgVGh1IEZlYiAzIDEyOjAwOjE0IDIw MjIgKzA5MDAKCiAgICBDeWd3aW46IHBhdGg6IEZpeCBVTkMgcGF0aCBoYW5kbGluZyBmb3IgU01C MyBtb3VudGVkIHRvIGEgZHJpdmUuCiAgICAKICAgIC0gSWYgYW4gVU5DIHBhdGggaXMgbW91bnRl ZCB0byBhIGRyaXZlIHVzaW5nIFNNQjMuMTEsIGFjY2Vzc2luZyB0bwogICAgICB0aGUgZHJpdmUg ZmFpbHMgd2l0aCBlcnJvciAiVG9vIG1hbnkgbGV2ZWxzIG9mIHN5bWJvbGljIGxpbmtzLiIKICAg ICAgVGhpcyBwYXRjaCBmaXhlcyB0aGUgaXNzdWUuCg== --Multipart=_Fri__18_Mar_2022_13_23_35_+0900_dijPPCXjUHVx7/Qg Content-Type: text/x-c++src; name="cons_master_thread.cc" Content-Disposition: attachment; filename="cons_master_thread.cc" Content-Transfer-Encoding: 7bit /* This thread processes signals derived from input messages. Without this thread, those signals can be handled only when the process calls read() or select(). This thread reads input records, processes signals and removes corresponding record. The other input records are kept back for read() or select(). */ void fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) { const int additional_space = 128; /* Possible max number of incoming events during the process. Additional space should be left for writeback fix. */ const int inrec_size = INREC_SIZE + additional_space; struct m { inline static size_t bytes (size_t n) { return sizeof (INPUT_RECORD) * n; } }; termios &ti = ttyp->ti; while (con.owner == myself->pid) { DWORD total_read, n, i; INPUT_RECORD input_rec[inrec_size]; if (con.disable_master_thread) { cygwait (40); continue; } WaitForSingleObject (p->input_mutex, mutex_timeout); total_read = 0; bool nowait = false; switch (cygwait (p->input_handle, (DWORD) 0)) { case WAIT_OBJECT_0: acquire_attach_mutex (mutex_timeout); ReadConsoleInputW (p->input_handle, input_rec, INREC_SIZE, &total_read); if (total_read == INREC_SIZE /* Working space full */ && cygwait (p->input_handle, (DWORD) 0) == WAIT_OBJECT_0) { const int incr = min (con.num_processed, additional_space); ReadConsoleInputW (p->input_handle, input_rec + total_read, incr, &n); /* Discard oldest n events. */ memmove (input_rec, input_rec + n, m::bytes (total_read)); con.num_processed -= n; nowait = true; } release_attach_mutex (); break; case WAIT_TIMEOUT: con.num_processed = 0; case WAIT_SIGNALED: case WAIT_CANCELED: break; default: /* Error */ ReleaseMutex (p->input_mutex); return; } /* If ENABLE_VIRTUAL_TERMINAL_INPUT is not set, changing window height does not generate WINDOW_BUFFER_SIZE_EVENT. Therefore, check windows size every time here. */ if (!wincap.has_con_24bit_colors () || con_is_legacy) { SHORT y = con.dwWinSize.Y; SHORT x = con.dwWinSize.X; con.fillin (p->output_handle); if (y != con.dwWinSize.Y || x != con.dwWinSize.X) { con.scroll_region.Top = 0; con.scroll_region.Bottom = -1; ttyp->kill_pgrp (SIGWINCH); } } for (i = con.num_processed; i < total_read; i++) { wchar_t wc; char c; bool processed = false; switch (input_rec[i].EventType) { case KEY_EVENT: if (!input_rec[i].Event.KeyEvent.bKeyDown) continue; wc = input_rec[i].Event.KeyEvent.uChar.UnicodeChar; if (!wc || (wint_t) wc >= 0x80) continue; c = (char) wc; switch (process_sigs (c, ttyp, NULL)) { case signalled: case not_signalled_but_done: case done_with_debugger: processed = true; ttyp->output_stopped = false; if (ti.c_lflag & NOFLSH) goto remove_record; con.num_processed = 0; goto skip_writeback; default: /* not signalled */ break; } processed = process_stop_start (c, ttyp); break; case WINDOW_BUFFER_SIZE_EVENT: SHORT y = con.dwWinSize.Y; SHORT x = con.dwWinSize.X; con.fillin (p->output_handle); if (y != con.dwWinSize.Y || x != con.dwWinSize.X) { con.scroll_region.Top = 0; con.scroll_region.Bottom = -1; if (wincap.has_con_24bit_colors () && !con_is_legacy) fix_tab_position (p->output_handle); ttyp->kill_pgrp (SIGWINCH); } processed = true; break; } remove_record: if (processed) { /* Remove corresponding record. */ if (total_read > i + 1) memmove (input_rec + i, input_rec + i + 1, m::bytes (total_read - i - 1)); total_read--; i--; } } con.num_processed = total_read; if (total_read) { do { INPUT_RECORD tmp[inrec_size]; /* Writeback input records other than interrupt. */ acquire_attach_mutex (mutex_timeout); WriteConsoleInputW (p->input_handle, input_rec, total_read, &n); /* Check if writeback was successfull. */ PeekConsoleInputW (p->input_handle, tmp, inrec_size, &n); release_attach_mutex (); if (n < total_read) break; /* Someone has read input without acquiring input_mutex. ConEmu cygwin-connector? */ if (memcmp (input_rec, tmp, m::bytes (total_read)) == 0) break; /* OK */ /* Try to fix */ DWORD incr = n - total_read; DWORD ofst; for (ofst = 1; ofst <= incr; ofst++) if (memcmp (input_rec, tmp + ofst, m::bytes (total_read)) == 0) { acquire_attach_mutex (mutex_timeout); ReadConsoleInputW (p->input_handle, tmp, inrec_size, &n); release_attach_mutex (); memcpy (input_rec, tmp + ofst, m::bytes (total_read)); memcpy (input_rec + total_read, tmp, m::bytes (ofst)); if (n > ofst + total_read) memcpy (input_rec + total_read + ofst, tmp + ofst + total_read, m::bytes (n - (ofst + total_read))); total_read = n; break; } if (ofst > incr) break; /* Writeback was not atomic. Or someone has read input without acquiring input_mutex. Giving up because hard to fix. */ } while (true); } skip_writeback: ReleaseMutex (p->input_mutex); if (!nowait) cygwait (40); } } --Multipart=_Fri__18_Mar_2022_13_23_35_+0900_dijPPCXjUHVx7/Qg--