From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from conssluserg-01.nifty.com (conssluserg-01.nifty.com [210.131.2.80]) by sourceware.org (Postfix) with ESMTPS id AC7663858414 for ; Sun, 29 Aug 2021 09:07:54 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org AC7663858414 Received: from Express5800-S70 (z221123.dynamic.ppp.asahi-net.or.jp [110.4.221.123]) (authenticated) by conssluserg-01.nifty.com with ESMTP id 17T97VTT010701 for ; Sun, 29 Aug 2021 18:07:31 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-01.nifty.com 17T97VTT010701 X-Nifty-SrcIP: [110.4.221.123] Date: Sun, 29 Aug 2021 18:07:29 +0900 From: Takashi Yano To: cygwin@cygwin.com Subject: Re: cygrunsrv + sshd + rsync = 20 times too slow -- throttled? Message-Id: <20210829180729.48b4e877f773cb3980c5766d@nifty.ne.jp> In-Reply-To: <20210828184102.f2206a8a9e5fe5cf24bf5e45@nifty.ne.jp> References: <41A583E1-C8E7-42AB-9F24-EEC33A41EC60@house.org> <20210825201845.07b6400b79dc5558a7761efe@nifty.ne.jp> <20210826062934.54f2f2216021c095bb7ba13b@nifty.ne.jp> <3b560051-ab27-f392-ca4b-d1fd9b5733b0@cornell.edu> <20210827202440.47706fc2fc07c5e9a1bc0047@nifty.ne.jp> <4f2cb5f3-ce9c-c617-f65f-841a5eca096e@cornell.edu> <20210828022111.91ef5b4ff24f6da9fadb489e@nifty.ne.jp> <20210828184102.f2206a8a9e5fe5cf24bf5e45@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=_Sun__29_Aug_2021_18_07_29_+0900_attyr=6rJwFIZwZY" X-Spam-Status: No, score=-4.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP 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: Sun, 29 Aug 2021 09:08:07 -0000 This is a multi-part message in MIME format. --Multipart=_Sun__29_Aug_2021_18_07_29_+0900_attyr=6rJwFIZwZY Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sat, 28 Aug 2021 18:41:02 +0900 Takashi Yano wrote: > On Sat, 28 Aug 2021 10:43:27 +0200 > Corinna Vinschen wrote: > > On Aug 28 02:21, Takashi Yano via Cygwin wrote: > > > On Fri, 27 Aug 2021 12:00:50 -0400 > > > Ken Brown wrote: > > > > Two years ago I thought I needed nt_create to avoid problems when calling > > > > set_pipe_non_blocking. Are you saying that's not an issue? Is > > > > set_pipe_non_blocking unnecessary? Is that the point of your modification to > > > > raw_read? > > > > > > Yes. Instead of making windows read function itself non-blocking, > > > it is possible to check if the pipe can be read before read using > > > PeekNamedPipe(). If the pipe cannot be read right now, EAGAIN is > > > returned. > > > > The problem is this: > > > > if (PeekNamedPipe()) > > ReadFile(blocking); > > > > is not atomic. I. e., if PeekNamedPipe succeeds, nothing keeps another > > thread from draining the pipe between the PeekNamedPipe and the ReadFile > > call. And as soon as ReadFile runs, it hangs indefinitely and we can't > > stop it via a signal. > > Hmm, you are right. Mutex guard seems to be necessary like pty code > if we go this way. I have found that set_pipe_non_blocking() succeeds for both read and write pipes if the write pipe is created by CreateNamedPipe() and the read pipe is created by CreateFile() contrary to the current create() code. Therefore, not only nt_create() but also PeekNamedPipe() become unnecessary. Please see the revised patch attached. -- Takashi Yano --Multipart=_Sun__29_Aug_2021_18_07_29_+0900_attyr=6rJwFIZwZY Content-Type: application/octet-stream; name="v2-0002-Cygwin-pipe-Revert-to-create-rather-than-nt_creat.patch" Content-Disposition: attachment; filename="v2-0002-Cygwin-pipe-Revert-to-create-rather-than-nt_creat.patch" Content-Transfer-Encoding: base64 RnJvbSAzZjRlZDEwZjg2Yzg4ZTExOTRhNWYxMTIwMWE4ZTA4OGNlNTNkMTI3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthc2hpIFlhbm8gPHRha2FzaGkueWFub0BuaWZ0eS5uZS5q cD4KRGF0ZTogU3VuLCAyOSBBdWcgMjAyMSAxNzoyMzo1NyArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djIgMi8yXSBDeWd3aW46IHBpcGU6IFJldmVydCB0byBjcmVhdGUoKSByYXRoZXIgdGhhbgogbnRf Y3JlYXRlKCkuCgotLS0KIHdpbnN1cC9jeWd3aW4vZmhhbmRsZXJfcGlwZS5jYyB8IDE5MiArKysr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyMSBpbnNlcnRp b25zKCspLCAxNzEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvd2luc3VwL2N5Z3dpbi9maGFu ZGxlcl9waXBlLmNjIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9waXBlLmNjCmluZGV4IDJkZWMw YTg0OC4uYTZlY2UxN2E2IDEwMDY0NAotLS0gYS93aW5zdXAvY3lnd2luL2ZoYW5kbGVyX3BpcGUu Y2MKKysrIGIvd2luc3VwL2N5Z3dpbi9maGFuZGxlcl9waXBlLmNjCkBAIC00NjMsMTMgKzQ2Mywx MyBAQCBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKExQU0VDVVJJVFlfQVRUUklCVVRFUyBzYV9wdHIs IFBIQU5ETEUgciwgUEhBTkRMRSB3LAogICBpZiAobmFtZSkKICAgICBsZW4gKz0gX19zbWFsbF9z cHJpbnRmIChwaXBlbmFtZSArIGxlbiwgIiVzIiwgbmFtZSk7CiAKLSAgb3Blbl9tb2RlIHw9IFBJ UEVfQUNDRVNTX0lOQk9VTkQgfCBGSUxFX0ZMQUdfRklSU1RfUElQRV9JTlNUQU5DRTsKKyAgb3Bl bl9tb2RlIHw9IFBJUEVfQUNDRVNTX09VVEJPVU5EIHwgRklMRV9GTEFHX0ZJUlNUX1BJUEVfSU5T VEFOQ0U7CiAKICAgLyogUmV0cnkgQ3JlYXRlTmFtZWRQaXBlIGFzIGxvbmcgYXMgdGhlIHBpcGUg bmFtZSBpcyBpbiB1c2UuCiAgICAgIFJldHJ5aW5nIHdpbGwgcHJvYmFibHkgbmV2ZXIgYmUgbmVj ZXNzYXJ5LCBidXQgd2Ugd2FudAogICAgICB0byBiZSBhcyByb2J1c3QgYXMgcG9zc2libGUuICAq LwogICBEV09SRCBlcnIgPSAwOwotICB3aGlsZSAociAmJiAhKnIpCisgIHdoaWxlICh3ICYmICEq dykKICAgICB7CiAgICAgICBzdGF0aWMgdm9sYXRpbGUgVUxPTkcgcGlwZV91bmlxdWVfaWQ7CiAg ICAgICBpZiAoIW5hbWUpCkBAIC00OTgsMTIgKzQ5OCwxMiBAQCBmaGFuZGxlcl9waXBlOjpjcmVh dGUgKExQU0VDVVJJVFlfQVRUUklCVVRFUyBzYV9wdHIsIFBIQU5ETEUgciwgUEhBTkRMRSB3LAog CSBkZWZpbml0ZWx5IHJlcXVpcmVkIGZvciBwdHkgaGFuZGxpbmcgc2luY2UgZmhhbmRsZXJfcHR5 X21hc3RlcgogCSB3cml0ZXMgdG8gdGhlIHBpcGUgaW4gY2h1bmtzLCB0ZXJtaW5hdGVkIGJ5IG5l d2xpbmUgd2hlbiBDQU5PTiBtb2RlCiAJIGlzIHNwZWNpZmllZC4gICovCi0gICAgICAqciA9IENy ZWF0ZU5hbWVkUGlwZSAocGlwZW5hbWUsIG9wZW5fbW9kZSwgcGlwZV9tb2RlLCAxLCBwc2l6ZSwK KyAgICAgICp3ID0gQ3JlYXRlTmFtZWRQaXBlIChwaXBlbmFtZSwgb3Blbl9tb2RlLCBwaXBlX21v ZGUsIDEsIHBzaXplLAogCQkJICAgcHNpemUsIE5NUFdBSVRfVVNFX0RFRkFVTFRfV0FJVCwgc2Ff cHRyKTsKIAotICAgICAgaWYgKCpyICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAgICAgaWYg KCp3ICE9IElOVkFMSURfSEFORExFX1ZBTFVFKQogCXsKLQkgIGRlYnVnX3ByaW50ZiAoInBpcGUg cmVhZCBoYW5kbGUgJXAiLCAqcik7CisJICBkZWJ1Z19wcmludGYgKCJwaXBlIHdyaXRlIGhhbmRs ZSAlcCIsICp3KTsKIAkgIGVyciA9IDA7CiAJICBicmVhazsKIAl9CkBAIC01MTYsMTQgKzUxNiwx NCBAQCBmaGFuZGxlcl9waXBlOjpjcmVhdGUgKExQU0VDVVJJVFlfQVRUUklCVVRFUyBzYV9wdHIs IFBIQU5ETEUgciwgUEhBTkRMRSB3LAogCSAgICAgUGljayBhIG5ldyBuYW1lIGFuZCByZXRyeS4g ICovCiAJICBkZWJ1Z19wcmludGYgKCJwaXBlIGJ1c3kiLCAhbmFtZSA/ICIsIHJldHJ5aW5nIiA6 ICIiKTsKIAkgIGlmICghbmFtZSkKLQkgICAgKnIgPSBOVUxMOworCSAgICAqdyA9IE5VTEw7CiAJ ICBicmVhazsKIAljYXNlIEVSUk9SX0FDQ0VTU19ERU5JRUQ6CiAJICAvKiBUaGUgcGlwZSBpcyBh bHJlYWR5IG9wZW4gd2l0aCBpbmNvbXBhdGlibGUgcGFyYW1ldGVycy4KIAkgICAgIFBpY2sgYSBu ZXcgbmFtZSBhbmQgcmV0cnkuICAqLwogCSAgZGVidWdfcHJpbnRmICgicGlwZSBhY2Nlc3MgZGVu aWVkJXMiLCAhbmFtZSA/ICIsIHJldHJ5aW5nIiA6ICIiKTsKIAkgIGlmICghbmFtZSkKLQkgICAg KnIgPSBOVUxMOworCSAgICAqdyA9IE5VTEw7CiAJICBicmVhazsKIAlkZWZhdWx0OgogCSAgewpA QCAtNTM1LDYwICs1MzUsNDIgQEAgZmhhbmRsZXJfcGlwZTo6Y3JlYXRlIChMUFNFQ1VSSVRZX0FU VFJJQlVURVMgc2FfcHRyLCBQSEFORExFIHIsIFBIQU5ETEUgdywKIAogICBpZiAoZXJyKQogICAg IHsKLSAgICAgICpyID0gTlVMTDsKKyAgICAgICp3ID0gTlVMTDsKICAgICAgIHJldHVybiBlcnI7 CiAgICAgfQogCi0gIGlmICghdykKLSAgICBkZWJ1Z19wcmludGYgKCJwaXBlIHdyaXRlIGhhbmRs ZSBOVUxMIik7CisgIGlmICghcikKKyAgICBkZWJ1Z19wcmludGYgKCJwaXBlIHJlYWQgaGFuZGxl IE5VTEwiKTsKICAgZWxzZQogICAgIHsKICAgICAgIGRlYnVnX3ByaW50ZiAoIkNyZWF0ZUZpbGU6 IG5hbWUgJXMiLCBwaXBlbmFtZSk7CiAKLSAgICAgIC8qIE9wZW4gdGhlIG5hbWVkIHBpcGUgZm9y IHdyaXRpbmcuCi0JIEJlIHN1cmUgdG8gcGVybWl0IEZJTEVfUkVBRF9BVFRSSUJVVEVTIGFjY2Vz cy4gICovCi0gICAgICBEV09SRCBhY2Nlc3MgPSBHRU5FUklDX1dSSVRFIHwgRklMRV9SRUFEX0FU VFJJQlVURVM7CisgICAgICAvKiBPcGVuIHRoZSBuYW1lZCBwaXBlIGZvciByZWFkaW5nLgorCSBC ZSBzdXJlIHRvIHBlcm1pdCBGSUxFX1dSSVRFX0FUVFJJQlVURVMgYWNjZXNzLiAgKi8KKyAgICAg IERXT1JEIGFjY2VzcyA9IEdFTkVSSUNfUkVBRCB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUzsKICAg ICAgIGlmICgob3Blbl9tb2RlICYgUElQRV9BQ0NFU1NfRFVQTEVYKSA9PSBQSVBFX0FDQ0VTU19E VVBMRVgpCi0JYWNjZXNzIHw9IEdFTkVSSUNfUkVBRCB8IEZJTEVfV1JJVEVfQVRUUklCVVRFUzsK LSAgICAgICp3ID0gQ3JlYXRlRmlsZSAocGlwZW5hbWUsIGFjY2VzcywgMCwgc2FfcHRyLCBPUEVO X0VYSVNUSU5HLAorCWFjY2VzcyB8PSBHRU5FUklDX1dSSVRFIHwgRklMRV9SRUFEX0FUVFJJQlVU RVM7CisgICAgICAqciA9IENyZWF0ZUZpbGUgKHBpcGVuYW1lLCBhY2Nlc3MsIDAsIHNhX3B0ciwg T1BFTl9FWElTVElORywKIAkJICAgICAgb3Blbl9tb2RlICYgRklMRV9GTEFHX09WRVJMQVBQRUQs IDApOwogCi0gICAgICBpZiAoISp3IHx8ICp3ID09IElOVkFMSURfSEFORExFX1ZBTFVFKQorICAg ICAgaWYgKCEqciB8fCAqciA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKIAl7CiAJICAvKiBGYWls dXJlLiAqLwogCSAgRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yICgpOwogCSAgZGVidWdfcHJpbnRm ICgiQ3JlYXRlRmlsZSBmYWlsZWQsIHIgJXAsICVFIiwgcik7Ci0JICBpZiAocikKLQkgICAgQ2xv c2VIYW5kbGUgKCpyKTsKLQkgICp3ID0gTlVMTDsKKwkgIGlmICh3KQorCSAgICBDbG9zZUhhbmRs ZSAoKncpOworCSAgKnIgPSBOVUxMOwogCSAgcmV0dXJuIGVycjsKIAl9CiAKLSAgICAgIGRlYnVn X3ByaW50ZiAoInBpcGUgd3JpdGUgaGFuZGxlICVwIiwgKncpOworICAgICAgZGVidWdfcHJpbnRm ICgicGlwZSByZWFkIGhhbmRsZSAlcCIsICpyKTsKICAgICB9CiAKICAgLyogU3VjY2Vzcy4gKi8K ICAgcmV0dXJuIDA7CiB9CiAKLS8qIFRoZSBuZXh0IHZlcnNpb24gb2YgZmhhbmRsZXJfcGlwZTo6 Y3JlYXRlIHVzZWQgdG8gY2FsbCB0aGUgcHJldmlvdXMKLSAgIHZlcnNpb24uICBCdXQgdGhlIHJl YWQgaGFuZGxlIGNyZWF0ZWQgYnkgdGhlIGxhdHRlciBkb2Vzbid0IGhhdmUKLSAgIEZJTEVfV1JJ VEVfQVRUUklCVVRFUyBhY2Nlc3MgdW5sZXNzIHRoZSBwaXBlIGlzIGNyZWF0ZWQgd2l0aAotICAg UElQRV9BQ0NFU1NfRFVQTEVYLCBhbmQgaXQgZG9lc24ndCBzZWVtIHBvc3NpYmxlIHRvIGFkZCB0 aGF0IGFjY2VzcwotICAgcmlnaHQuICBUaGlzIGNhdXNlcyBzZXRfcGlwZV9ub25fYmxvY2tpbmcg dG8gZmFpbC4KLQotICAgVG8gZml4IHRoaXMgd2Ugd2lsbCBkZWZpbmUgYSBoZWxwZXIgZnVuY3Rp b24gJ250X2NyZWF0ZScgdGhhdCBpcwotICAgc2ltaWxhciB0byB0aGUgYWJvdmUgZmhhbmRsZXJf cGlwZTo6Y3JlYXRlIGJ1dCB1c2VzCi0gICBOdENyZWF0ZU5hbWVkUGlwZUZpbGUgaW5zdGVhZCBv ZiBDcmVhdGVOYW1lZFBpcGU7IHRoaXMgZ2l2ZXMgbW9yZQotICAgZmxleGliaWxpdHkgaW4gc2V0 dGluZyB0aGUgYWNjZXNzIHJpZ2h0cy4gIFdlIHdpbGwgdXNlIHRoaXMgaGVscGVyCi0gICBmdW5j dGlvbiBpbiB0aGUgdmVyc2lvbiBvZiBmaGFuZGxlcl9waXBlOjpjcmVhdGUgYmVsb3csIHdoaWNo Ci0gICBzdWZmaWNlcyBmb3IgYWxsIG9mIG91ciB1c2VzIG9mIHNldF9waXBlX25vbl9ibG9ja2lu Zy4gIEZvcgotICAgc2ltcGxpY2l0eSwgbnRfY3JlYXRlIHdpbGwgb21pdCB0aGUgJ29wZW5fbW9k ZScgYW5kICduYW1lJwotICAgcGFyYW1ldGVycywgd2hpY2ggYXJlbid0IG5lZWRlZCBmb3Igb3Vy IHB1cnBvc2VzLiAgKi8KLQotc3RhdGljIGludCBudF9jcmVhdGUgKExQU0VDVVJJVFlfQVRUUklC VVRFUywgUEhBTkRMRSwgUEhBTkRMRSwgRFdPUkQsCi0JCSAgICAgIGludDY0X3QgKik7Ci0KIGlu dAogZmhhbmRsZXJfcGlwZTo6Y3JlYXRlIChmaGFuZGxlcl9waXBlICpmaHNbMl0sIHVuc2lnbmVk IHBzaXplLCBpbnQgbW9kZSkKIHsKQEAgLTU5Nyw3ICs1NzksNyBAQCBmaGFuZGxlcl9waXBlOjpj cmVhdGUgKGZoYW5kbGVyX3BpcGUgKmZoc1syXSwgdW5zaWduZWQgcHNpemUsIGludCBtb2RlKQog ICBpbnQgcmVzID0gLTE7CiAgIGludDY0X3QgdW5pcXVlX2lkOwogCi0gIGludCByZXQgPSBudF9j cmVhdGUgKHNhLCAmciwgJncsIHBzaXplLCAmdW5pcXVlX2lkKTsKKyAgaW50IHJldCA9IGNyZWF0 ZSAoc2EsICZyLCAmdywgcHNpemUsIE5VTEwsIDAsICZ1bmlxdWVfaWQpOwogICBpZiAocmV0KQog ICAgIF9fc2V0ZXJybm9fZnJvbV93aW5fZXJyb3IgKHJldCk7CiAgIGVsc2UgaWYgKChmaHNbMF0g PSAoZmhhbmRsZXJfcGlwZSAqKSBidWlsZF9maF9kZXYgKCpwaXBlcl9kZXYpKSA9PSBOVUxMKQpA QCAtNjI0LDEzOCArNjA2LDYgQEAgZmhhbmRsZXJfcGlwZTo6Y3JlYXRlIChmaGFuZGxlcl9waXBl ICpmaHNbMl0sIHVuc2lnbmVkIHBzaXplLCBpbnQgbW9kZSkKICAgcmV0dXJuIHJlczsKIH0KIAot c3RhdGljIGludAotbnRfY3JlYXRlIChMUFNFQ1VSSVRZX0FUVFJJQlVURVMgc2FfcHRyLCBQSEFO RExFIHIsIFBIQU5ETEUgdywKLQkJRFdPUkQgcHNpemUsIGludDY0X3QgKnVuaXF1ZV9pZCkKLXsK LSAgTlRTVEFUVVMgc3RhdHVzOwotICBIQU5ETEUgbnBmc2g7Ci0gIEFDQ0VTU19NQVNLIGFjY2Vz czsKLSAgT0JKRUNUX0FUVFJJQlVURVMgYXR0cjsKLSAgSU9fU1RBVFVTX0JMT0NLIGlvOwotICBM QVJHRV9JTlRFR0VSIHRpbWVvdXQ7Ci0KLSAgLyogRGVmYXVsdCB0byBlcnJvci4gKi8KLSAgaWYg KHIpCi0gICAgKnIgPSBOVUxMOwotICBpZiAodykKLSAgICAqdyA9IE5VTEw7Ci0KLSAgc3RhdHVz ID0gZmhhbmRsZXJfYmFzZTo6bnBmc19oYW5kbGUgKG5wZnNoKTsKLSAgaWYgKCFOVF9TVUNDRVNT IChzdGF0dXMpKQotICAgIHsKLSAgICAgIF9fc2V0ZXJybm9fZnJvbV9udF9zdGF0dXMgKHN0YXR1 cyk7Ci0gICAgICByZXR1cm4gR2V0TGFzdEVycm9yICgpOwotICAgIH0KLQotICAvKiBFbnN1cmUg dGhhdCB0aGVyZSBpcyBlbm91Z2ggcGlwZSBidWZmZXIgc3BhY2UgZm9yIGF0b21pYyB3cml0ZXMu ICAqLwotICBpZiAoIXBzaXplKQotICAgIHBzaXplID0gREVGQVVMVF9QSVBFQlVGU0laRTsKLQot ICBVTklDT0RFX1NUUklORyBwaXBlbmFtZTsKLSAgV0NIQVIgcGlwZW5hbWVfYnVmW01BWF9QQVRI XTsKLSAgc2l6ZV90IGxlbiA9IF9fc21hbGxfc3dwcmludGYgKHBpcGVuYW1lX2J1ZiwgTCIlUy0l dS0iLAotCQkJCSAmY3lnaGVhcC0+aW5zdGFsbGF0aW9uX2tleSwKLQkJCQkgR2V0Q3VycmVudFBy b2Nlc3NJZCAoKSk7Ci0KLSAgYWNjZXNzID0gR0VORVJJQ19SRUFEIHwgRklMRV9XUklURV9BVFRS SUJVVEVTOwotCi0gIFVMT05HIHBpcGVfdHlwZSA9IHBpcGVfYnl0ZSA/IEZJTEVfUElQRV9CWVRF X1NUUkVBTV9UWVBFCi0gICAgOiBGSUxFX1BJUEVfTUVTU0FHRV9UWVBFOwotCi0gIC8qIFJldHJ5 IE50Q3JlYXRlTmFtZWRQaXBlRmlsZSBhcyBsb25nIGFzIHRoZSBwaXBlIG5hbWUgaXMgaW4gdXNl LgotICAgICBSZXRyeWluZyB3aWxsIHByb2JhYmx5IG5ldmVyIGJlIG5lY2Vzc2FyeSwgYnV0IHdl IHdhbnQKLSAgICAgdG8gYmUgYXMgcm9idXN0IGFzIHBvc3NpYmxlLiAgKi8KLSAgRFdPUkQgZXJy ID0gMDsKLSAgd2hpbGUgKHIgJiYgISpyKQotICAgIHsKLSAgICAgIHN0YXRpYyB2b2xhdGlsZSBV TE9ORyBwaXBlX3VuaXF1ZV9pZDsKLSAgICAgIExPTkcgaWQgPSBJbnRlcmxvY2tlZEluY3JlbWVu dCAoKExPTkcgKikgJnBpcGVfdW5pcXVlX2lkKTsKLSAgICAgIF9fc21hbGxfc3dwcmludGYgKHBp cGVuYW1lX2J1ZiArIGxlbiwgTCJwaXBlLW50LSVwIiwgaWQpOwotICAgICAgaWYgKHVuaXF1ZV9p ZCkKLQkqdW5pcXVlX2lkID0gKChpbnQ2NF90KSBpZCA8PCAzMiB8IEdldEN1cnJlbnRQcm9jZXNz SWQgKCkpOwotCi0gICAgICBkZWJ1Z19wcmludGYgKCJuYW1lICVXLCBzaXplICV1LCBtb2RlICVz IiwgcGlwZW5hbWVfYnVmLCBwc2l6ZSwKLQkJICAgIChwaXBlX3R5cGUgJiBGSUxFX1BJUEVfTUVT U0FHRV9UWVBFKQotCQkgICAgPyAiUElQRV9UWVBFX01FU1NBR0UiIDogIlBJUEVfVFlQRV9CWVRF Iik7Ci0KLSAgICAgIFJ0bEluaXRVbmljb2RlU3RyaW5nICgmcGlwZW5hbWUsIHBpcGVuYW1lX2J1 Zik7Ci0KLSAgICAgIEluaXRpYWxpemVPYmplY3RBdHRyaWJ1dGVzICgmYXR0ciwgJnBpcGVuYW1l LAotCQkJCSAgc2FfcHRyLT5iSW5oZXJpdEhhbmRsZSA/IE9CSl9JTkhFUklUIDogMCwKLQkJCQkg IG5wZnNoLCBzYV9wdHItPmxwU2VjdXJpdHlEZXNjcmlwdG9yKTsKLQotICAgICAgdGltZW91dC5R dWFkUGFydCA9IC01MDAwMDA7Ci0gICAgICBzdGF0dXMgPSBOdENyZWF0ZU5hbWVkUGlwZUZpbGUg KHIsIGFjY2VzcywgJmF0dHIsICZpbywKLQkJCQkgICAgICBGSUxFX1NIQVJFX1JFQUQgfCBGSUxF X1NIQVJFX1dSSVRFLAotCQkJCSAgICAgIEZJTEVfQ1JFQVRFLCAwLCBwaXBlX3R5cGUsCi0JCQkJ ICAgICAgRklMRV9QSVBFX0JZVEVfU1RSRUFNX01PREUsCi0JCQkJICAgICAgMCwgMSwgcHNpemUs IHBzaXplLCAmdGltZW91dCk7Ci0KLSAgICAgIGlmIChOVF9TVUNDRVNTIChzdGF0dXMpKQotCXsK LQkgIGRlYnVnX3ByaW50ZiAoInBpcGUgcmVhZCBoYW5kbGUgJXAiLCAqcik7Ci0JICBlcnIgPSAw OwotCSAgYnJlYWs7Ci0JfQotCi0gICAgICBzd2l0Y2ggKHN0YXR1cykKLQl7Ci0JY2FzZSBTVEFU VVNfUElQRV9CVVNZOgotCWNhc2UgU1RBVFVTX0lOU1RBTkNFX05PVF9BVkFJTEFCTEU6Ci0JY2Fz ZSBTVEFUVVNfUElQRV9OT1RfQVZBSUxBQkxFOgotCSAgLyogVGhlIHBpcGUgaXMgYWxyZWFkeSBv cGVuIHdpdGggY29tcGF0aWJsZSBwYXJhbWV0ZXJzLgotCSAgICAgUGljayBhIG5ldyBuYW1lIGFu ZCByZXRyeS4gICovCi0JICBkZWJ1Z19wcmludGYgKCJwaXBlIGJ1c3ksIHJldHJ5aW5nIik7Ci0J ICAqciA9IE5VTEw7Ci0JICBicmVhazsKLQljYXNlIFNUQVRVU19BQ0NFU1NfREVOSUVEOgotCSAg LyogVGhlIHBpcGUgaXMgYWxyZWFkeSBvcGVuIHdpdGggaW5jb21wYXRpYmxlIHBhcmFtZXRlcnMu Ci0JICAgICBQaWNrIGEgbmV3IG5hbWUgYW5kIHJldHJ5LiAgKi8KLQkgIGRlYnVnX3ByaW50ZiAo InBpcGUgYWNjZXNzIGRlbmllZCwgcmV0cnlpbmciKTsKLQkgICpyID0gTlVMTDsKLQkgIGJyZWFr OwotCWRlZmF1bHQ6Ci0JICB7Ci0JICAgIF9fc2V0ZXJybm9fZnJvbV9udF9zdGF0dXMgKHN0YXR1 cyk7Ci0JICAgIGVyciA9IEdldExhc3RFcnJvciAoKTsKLQkgICAgZGVidWdfcHJpbnRmICgiZmFp bGVkLCAlRSIpOwotCSAgICAqciA9IElOVkFMSURfSEFORExFX1ZBTFVFOwotCSAgfQotCX0KLSAg ICB9Ci0KLSAgaWYgKGVycikKLSAgICB7Ci0gICAgICAqciA9IE5VTEw7Ci0gICAgICByZXR1cm4g ZXJyOwotICAgIH0KLQotICBpZiAoIXcpCi0gICAgZGVidWdfcHJpbnRmICgicGlwZSB3cml0ZSBo YW5kbGUgTlVMTCIpOwotICBlbHNlCi0gICAgewotICAgICAgZGVidWdfcHJpbnRmICgiTnRPcGVu RmlsZTogbmFtZSAlUyIsICZwaXBlbmFtZSk7Ci0KLSAgICAgIGFjY2VzcyA9IEdFTkVSSUNfV1JJ VEUgfCBGSUxFX1JFQURfQVRUUklCVVRFUzsKLSAgICAgIHN0YXR1cyA9IE50T3BlbkZpbGUgKHcs IGFjY2VzcywgJmF0dHIsICZpbywgMCwgMCk7Ci0gICAgICBpZiAoIU5UX1NVQ0NFU1MgKHN0YXR1 cykpCi0JewotCSAgRFdPUkQgZXJyID0gR2V0TGFzdEVycm9yICgpOwotCSAgZGVidWdfcHJpbnRm ICgiTnRPcGVuRmlsZSBmYWlsZWQsIHIgJXAsICVFIiwgcik7Ci0JICBpZiAocikKLQkgICAgQ2xv c2VIYW5kbGUgKCpyKTsKLQkgICp3ID0gTlVMTDsKLQkgIHJldHVybiBlcnI7Ci0JfQotCi0gICAg ICBkZWJ1Z19wcmludGYgKCJwaXBlIHdyaXRlIGhhbmRsZSAlcCIsICp3KTsKLSAgICB9Ci0KLSAg LyogU3VjY2Vzcy4gKi8KLSAgcmV0dXJuIDA7Ci19Ci0KIGludAogZmhhbmRsZXJfcGlwZTo6aW9j dGwgKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKnApCiB7Ci0tIAoyLjMzLjAKCg== --Multipart=_Sun__29_Aug_2021_18_07_29_+0900_attyr=6rJwFIZwZY--