From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTPS id 3DC993858C1F for ; Wed, 22 Mar 2023 12:15:11 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 3DC993858C1F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1679487310; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=2IxhETu0Ehr0MDEAupSbtwsBXbek4rjsQoN3D6M9+pM=; b=bwhefIcqvhDRTsABMdm7PaueeJh7JqmusF13Z/mC5jkXesZCN3JqcpxC2bFfD+Ap+rkfqM y9W7Ad/rhG13BZcGBPr/yZcp90JZNV8/2PfCx8s+rR9PPg9jIEMF9nQyVrJgCfdhdK1Y94 p5gkdl5D41C5XAVmLKJhuwyWzlbQyaU= Received: from mail-lj1-f200.google.com (mail-lj1-f200.google.com [209.85.208.200]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-152-ukjBpgiFMHS3bdC8-1ETrA-1; Wed, 22 Mar 2023 08:15:07 -0400 X-MC-Unique: ukjBpgiFMHS3bdC8-1ETrA-1 Received: by mail-lj1-f200.google.com with SMTP id z10-20020a2eb52a000000b0029ad1bdf16aso3864398ljm.14 for ; Wed, 22 Mar 2023 05:15:07 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679487306; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=0eEcirmm3DzkbbvMfPWCTheaEt8L6BdEXSwWyGtu5Ww=; b=SU+xLwtdP/W5eAN/Ubc0SFR0iLb+edqarLAjo0wFX8IWKSqGIWul2FRMqn3a+lT61u cYoPnk1KCnDgKoYpZhJ68qHd12pKpAFq7rtcaMP7OD+QgxnYk87WpAftv69ttnJaUHHE /nJ7XJX4OH05eG+LfBnWKT7/SVtSobiCij/ZiZfjTQqJlORMXQnaUxsO0gMMuE5K8euK bpcMmWACo+yqvSRJju53QtYQocRSw3i0jWPjN6zwM2DaGBPpQ5PBEo/FAuuZUqUs/W2e duQyRxUi2rRNluZDa6ZkQKRFJqcN4SttmmPEZT/YokQgPvCUGgeLpZRcIOGEHUFuSWBM ZMdw== X-Gm-Message-State: AO0yUKXGQJrYd6xNdZbVjAC1je0Lpbxc4xluhKQ/Sp9hOj4YKGW7LVSE IvGDDVGNO2frUh4kGcFgMmv++2gzL5jdnA04j1JvllPVtT+pIiZwh2XO7cdyjFXSW4mHZDD/8VO LL2NNFKhnVr7n/qTr6DBgnVr6bN4Zx/gegQ== X-Received: by 2002:a2e:998e:0:b0:298:a71d:f337 with SMTP id w14-20020a2e998e000000b00298a71df337mr1937403lji.9.1679487305961; Wed, 22 Mar 2023 05:15:05 -0700 (PDT) X-Google-Smtp-Source: AK7set+Twk2AGQDhNb0DEMNrUIjE1z+LIOniWG9kuOpmwc/bZ/jQgqiLY6HOvCFdgMI7e7Zxp66xiDw8TNvsaW0Kw+g= X-Received: by 2002:a2e:998e:0:b0:298:a71d:f337 with SMTP id w14-20020a2e998e000000b00298a71df337mr1937395lji.9.1679487305582; Wed, 22 Mar 2023 05:15:05 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Jonathan Wakely Date: Wed, 22 Mar 2023 12:14:54 +0000 Message-ID: Subject: Re: [PATCH v2 1/2] libstdc++: also use sendfile for big files To: Jonathan Wakely Cc: =?UTF-8?Q?Jannik_Gl=C3=BCckert?= , libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000041310b05f77c1c73" X-Spam-Status: No, score=-12.2 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,HTML_MESSAGE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_NONE,TXREP autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --00000000000041310b05f77c1c73 Content-Type: multipart/alternative; boundary="00000000000041310905f77c1c71" --00000000000041310905f77c1c71 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, 20 Mar 2023 at 22:30, Jonathan Wakely via Libstdc++ < libstdc++@gcc.gnu.org> wrote: > On 20/03/23 22:27 +0000, Jonathan Wakely wrote: > >On 06/03/23 20:52 +0100, Jannik Gl=C3=BCckert wrote: > >>we were previously only using sendfile for files smaller than 2GB, as > >>sendfile needs to be called repeatedly for files bigger than that. > >> > >>some quick numbers, copying a 16GB file, average of 10 repetitions: > >> old: > >> real: 13.4s > >> user: 0.14s > >> sys : 7.43s > >> new: > >> real: 8.90s > >> user: 0.00s > >> sys : 3.68s > >> > >>Additionally, this fixes > >>https://gcc.gnu.org/bugzilla/show_bug.cgi?id=3D108178 > >> > >>libstdc++-v3/ChangeLog: > >> > >> * acinclude.m4 (_GLIBCXX_HAVE_LSEEK): define > >> * config.h.in: Regenerate. > >> * configure: Regenerate. > >> * src/filesystem/ops-common.h: enable sendfile for files > >> >2GB in std::filesystem::copy_file, skip zero-length files > > Also, the ChangeLog entry needs to be indented with tabs, name the > changed functions, and should be complete sentences, e.g. > > * acinclude.m4 (_GLIBCXX_HAVE_LSEEK): Define. > * config.h.in: Regenerate. > * configure: Regenerate. > * src/filesystem/ops-common.h (copy_file_sendfile): Define new > function for sendfile logic. Loop to support large files. Skip > zero-length files. > (do_copy_file): Use it. > > Here's what I plan to commit in a few weeks when GCC 14 Stage 1 opens. --00000000000041310905f77c1c71-- --00000000000041310b05f77c1c73 Content-Type: text/plain; charset="UTF-8"; name="patch.txt" Content-Disposition: attachment; filename="patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lfjndbdq0 Y29tbWl0IGMxNzc4MjVmOTUyYmIzNTNjZGY0MTJmNDZmNDU1MzliODk5MmFi ZTEKQXV0aG9yOiBKYW5uaWsgR2zDvGNrZXJ0IDxqYW5uaWsuZ2x1ZWNrZXJ0 QGdtYWlsLmNvbT4KRGF0ZTogICBNb24gTWFyIDYgMTk6NTI6MDggMjAyMwoK ICAgIGxpYnN0ZGMrKzogQWxzbyB1c2Ugc2VuZGZpbGUgZm9yIGJpZyBmaWxl cwogICAgCiAgICBXZSB3ZXJlIHByZXZpb3VzbHkgb25seSB1c2luZyBzZW5k ZmlsZSBmb3IgZmlsZXMgc21hbGxlciB0aGFuIDJHQiwgYXMKICAgIHNlbmRm aWxlIG5lZWRzIHRvIGJlIGNhbGxlZCByZXBlYXRlZGx5IGZvciBmaWxlcyBi aWdnZXIgdGhhbiB0aGF0LgogICAgCiAgICBTb21lIHF1aWNrIG51bWJlcnMs IGNvcHlpbmcgYSAxNkdCIGZpbGUsIGF2ZXJhZ2Ugb2YgMTAgcmVwZXRpdGlv bnM6CiAgICAgICAgb2xkOgogICAgICAgICAgICByZWFsOiAxMy40cwogICAg ICAgICAgICB1c2VyOiAwLjE0cwogICAgICAgICAgICBzeXMgOiA3LjQzcwog ICAgICAgIG5ldzoKICAgICAgICAgICAgcmVhbDogOC45MHMKICAgICAgICAg ICAgdXNlcjogMC4wMHMKICAgICAgICAgICAgc3lzIDogMy42OHMKICAgIAog ICAgbGlic3RkYysrLXYzL0NoYW5nZUxvZzoKICAgIAogICAgICAgICAgICAq IGFjaW5jbHVkZS5tNCAoX0dMSUJDWFhfSEFWRV9MU0VFSyk6IERlZmluZS4K ICAgICAgICAgICAgKiBjb25maWcuaC5pbjogUmVnZW5lcmF0ZS4KICAgICAg ICAgICAgKiBjb25maWd1cmU6IFJlZ2VuZXJhdGUuCiAgICAgICAgICAgICog c3JjL2ZpbGVzeXN0ZW0vb3BzLWNvbW1vbi5oIChjb3B5X2ZpbGVfc2VuZGZp bGUpOiBEZWZpbmUgbmV3CiAgICAgICAgICAgIGZ1bmN0aW9uIGZvciBzZW5k ZmlsZSBsb2dpYy4gTG9vcCB0byBzdXBwb3J0IGxhcmdlIGZpbGVzLiBTa2lw CiAgICAgICAgICAgIHplcm8tbGVuZ3RoIGZpbGVzLgogICAgICAgICAgICAo ZG9fY29weV9maWxlKTogVXNlIGl0LgogICAgCiAgICBTaWduZWQtb2ZmLWJ5 OiBKYW5uaWsgR2zDvGNrZXJ0IDxqYW5uaWsuZ2x1ZWNrZXJ0QGdtYWlsLmNv bT4KCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00IGIv bGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNAppbmRleCA1MTM2YzA1NzFlOC4u ODVhMDlhNWE4NjkgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9hY2luY2x1 ZGUubTQKKysrIGIvbGlic3RkYysrLXYzL2FjaW5jbHVkZS5tNApAQCAtNDU4 Myw2ICs0NTgzLDcgQEAgZG5sICBfR0xJQkNYWF9VU0VfRkNITU9ECiBkbmwg IF9HTElCQ1hYX1VTRV9GQ0hNT0RBVAogZG5sICBfR0xJQkNYWF9VU0VfU0VO REZJTEUKIGRubCAgSEFWRV9MSU5LCitkbmwgIEhBVkVfTFNFRUsKIGRubCAg SEFWRV9SRUFETElOSwogZG5sICBIQVZFX1NZTUxJTksKIGRubApAQCAtNDcx OCwyNSArNDcxOSw2IEBAIGRubAogICBpZiB0ZXN0ICRnbGliY3h4X2N2X2Zj aG1vZGF0ID0geWVzOyB0aGVuCiAgICAgQUNfREVGSU5FKF9HTElCQ1hYX1VT RV9GQ0hNT0RBVCwgMSwgW0RlZmluZSBpZiBmY2htb2RhdCBpcyBhdmFpbGFi bGUgaW4gPHN5cy9zdGF0Lmg+Ll0pCiAgIGZpCi1kbmwKLSAgQUNfQ0FDSEVf Q0hFQ0soW2ZvciBzZW5kZmlsZSB0aGF0IGNhbiBjb3B5IGZpbGVzXSwKLSAg ICBnbGliY3h4X2N2X3NlbmRmaWxlLCBbZG5sCi0gICAgY2FzZSAiJHt0YXJn ZXRfb3N9IiBpbgotICAgICAgZ251KiB8IGxpbnV4KiB8IHNvbGFyaXMqIHwg dWNsaW51eCopCi0JR0NDX1RSWV9DT01QSUxFX09SX0xJTksoCi0JICBbI2lu Y2x1ZGUgPHN5cy9zZW5kZmlsZS5oPl0sCi0JICBbc2VuZGZpbGUoMSwgMiwg KG9mZl90KikwLCBzaXplb2YgMSk7XSwKLQkgIFtnbGliY3h4X2N2X3NlbmRm aWxlPXllc10sCi0JICBbZ2xpYmN4eF9jdl9zZW5kZmlsZT1ub10pCi0JOzsK LSAgICAgICopCi0JZ2xpYmN4eF9jdl9zZW5kZmlsZT1ubwotCTs7Ci0gICAg ZXNhYwotICBdKQotICBpZiB0ZXN0ICRnbGliY3h4X2N2X3NlbmRmaWxlID0g eWVzOyB0aGVuCi0gICAgQUNfREVGSU5FKF9HTElCQ1hYX1VTRV9TRU5ERklM RSwgMSwgW0RlZmluZSBpZiBzZW5kZmlsZSBpcyBhdmFpbGFibGUgaW4gPHN5 cy9zZW5kZmlsZS5oPi5dKQotICBmaQogZG5sCiAgIEFDX0NBQ0hFX0NIRUNL KFtmb3IgbGlua10sCiAgICAgZ2xpYmN4eF9jdl9saW5rLCBbZG5sCkBAIC00 NzQ5LDYgKzQ3MzEsMTggQEAgZG5sCiAgIGlmIHRlc3QgJGdsaWJjeHhfY3Zf bGluayA9IHllczsgdGhlbgogICAgIEFDX0RFRklORShIQVZFX0xJTkssIDEs IFtEZWZpbmUgaWYgbGluayBpcyBhdmFpbGFibGUgaW4gPHVuaXN0ZC5oPi5d KQogICBmaQorZG5sCisgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgbHNlZWtdLAor ICAgIGdsaWJjeHhfY3ZfbHNlZWssIFtkbmwKKyAgICBHQ0NfVFJZX0NPTVBJ TEVfT1JfTElOSygKKyAgICAgIFsjaW5jbHVkZSA8dW5pc3RkLmg+XSwKKyAg ICAgIFtsc2VlaygxLCAwLCBTRUVLX1NFVCk7XSwKKyAgICAgIFtnbGliY3h4 X2N2X2xzZWVrPXllc10sCisgICAgICBbZ2xpYmN4eF9jdl9sc2Vlaz1ub10p CisgIF0pCisgIGlmIHRlc3QgJGdsaWJjeHhfY3ZfbHNlZWsgPSB5ZXM7IHRo ZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9MU0VFSywgMSwgW0RlZmluZSBpZiBs c2VlayBpcyBhdmFpbGFibGUgaW4gPHVuaXN0ZC5oPi5dKQorICBmaQogZG5s CiAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgcmVhZGxpbmtdLAogICAgIGdsaWJj eHhfY3ZfcmVhZGxpbmssIFtkbmwKQEAgLTQ3ODUsNiArNDc3OSwyNSBAQCBk bmwKICAgaWYgdGVzdCAkZ2xpYmN4eF9jdl90cnVuY2F0ZSA9IHllczsgdGhl bgogICAgIEFDX0RFRklORShIQVZFX1RSVU5DQVRFLCAxLCBbRGVmaW5lIGlm IHRydW5jYXRlIGlzIGF2YWlsYWJsZSBpbiA8dW5pc3RkLmg+Ll0pCiAgIGZp CitkbmwKKyAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciBzZW5kZmlsZSB0aGF0IGNh biBjb3B5IGZpbGVzXSwKKyAgICBnbGliY3h4X2N2X3NlbmRmaWxlLCBbZG5s CisgICAgY2FzZSAiJHt0YXJnZXRfb3N9IiBpbgorICAgICAgZ251KiB8IGxp bnV4KiB8IHNvbGFyaXMqIHwgdWNsaW51eCopCisJR0NDX1RSWV9DT01QSUxF X09SX0xJTksoCisJICBbI2luY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPl0sCisJ ICBbc2VuZGZpbGUoMSwgMiwgKG9mZl90KikwLCBzaXplb2YgMSk7XSwKKwkg IFtnbGliY3h4X2N2X3NlbmRmaWxlPXllc10sCisJICBbZ2xpYmN4eF9jdl9z ZW5kZmlsZT1ub10pCisJOzsKKyAgICAgICopCisJZ2xpYmN4eF9jdl9zZW5k ZmlsZT1ubworCTs7CisgICAgZXNhYworICBdKQorICBpZiB0ZXN0ICRnbGli Y3h4X2N2X3NlbmRmaWxlID0geWVzICYmIHRlc3QgJGdsaWJjeHhfY3ZfbHNl ZWsgPSB5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoX0dMSUJDWFhfVVNFX1NF TkRGSUxFLCAxLCBbRGVmaW5lIGlmIHNlbmRmaWxlIGlzIGF2YWlsYWJsZSBp biA8c3lzL3NlbmRmaWxlLmg+Ll0pCisgIGZpCiBkbmwKICAgQUNfQ0FDSEVf Q0hFQ0soW2ZvciBmZG9wZW5kaXJdLAogICAgIGdsaWJjeHhfY3ZfZmRvcGVu ZGlyLCBbZG5sCmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL2ZpbGVz eXN0ZW0vb3BzLWNvbW1vbi5oIGIvbGlic3RkYysrLXYzL3NyYy9maWxlc3lz dGVtL29wcy1jb21tb24uaAppbmRleCBjOTU1MTFiNWM5NS4uNzg3NGE5NTQ4 OGEgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9zcmMvZmlsZXN5c3RlbS9v cHMtY29tbW9uLmgKKysrIGIvbGlic3RkYysrLXYzL3NyYy9maWxlc3lzdGVt L29wcy1jb21tb24uaApAQCAtNTEsNiArNTEsNyBAQAogIyBpbmNsdWRlIDxl eHQvc3RkaW9fZmlsZWJ1Zi5oPgogIyBpZmRlZiBfR0xJQkNYWF9VU0VfU0VO REZJTEUKICMgIGluY2x1ZGUgPHN5cy9zZW5kZmlsZS5oPiAvLyBzZW5kZmls ZQorIyAgaW5jbHVkZSA8dW5pc3RkLmg+IC8vIGxzZWVrCiAjIGVuZGlmCiAj ZW5kaWYKIApAQCAtMzU4LDYgKzM1OSwzNCBAQCBfR0xJQkNYWF9CRUdJTl9O QU1FU1BBQ0VfRklMRVNZU1RFTQogICB9CiAKICNpZmRlZiBORUVEX0RPX0NP UFlfRklMRQorI2lmIGRlZmluZWQgX0dMSUJDWFhfVVNFX1NFTkRGSUxFICYm ICEgZGVmaW5lZCBfR0xJQkNYWF9GSUxFU1lTVEVNX0lTX1dJTkRPV1MKKyAg Ym9vbAorICBjb3B5X2ZpbGVfc2VuZGZpbGUoaW50IGZkX2luLCBpbnQgZmRf b3V0LCBzaXplX3QgbGVuZ3RoKSBub2V4Y2VwdAorICB7CisgICAgLy8gYSB6 ZXJvLWxlbmd0aCBmaWxlIGlzIGVpdGhlciBlbXB0eSwgb3Igbm90IGNvcHlh YmxlIGJ5IHRoaXMgc3lzY2FsbAorICAgIC8vIHJldHVybiBlYXJseSB0byBh dm9pZCB0aGUgc3lzY2FsbCBjb3N0CisgICAgaWYgKGxlbmd0aCA9PSAwKQor ICAgICAgeworCWVycm5vID0gRUlOVkFMOworCXJldHVybiBmYWxzZTsKKyAg ICAgIH0KKyAgICBzaXplX3QgYnl0ZXNfbGVmdCA9IGxlbmd0aDsKKyAgICBv ZmZfdCBvZmZzZXQgPSAwOworICAgIHNzaXplX3QgYnl0ZXNfY29waWVkOwor ICAgIGRvCisgICAgICB7CisJYnl0ZXNfY29waWVkID0gOjpzZW5kZmlsZShm ZF9vdXQsIGZkX2luLCAmb2Zmc2V0LCBieXRlc19sZWZ0KTsKKwlieXRlc19s ZWZ0IC09IGJ5dGVzX2NvcGllZDsKKyAgICAgIH0KKyAgICB3aGlsZSAoYnl0 ZXNfbGVmdCA+IDAgJiYgYnl0ZXNfY29waWVkID4gMCk7CisgICAgaWYgKGJ5 dGVzX2NvcGllZCA8IDApCisgICAgICB7CisJOjpsc2VlayhmZF9vdXQsIDAs IFNFRUtfU0VUKTsKKwlyZXR1cm4gZmFsc2U7CisgICAgICB9CisgICAgcmV0 dXJuIHRydWU7CisgIH0KKyNlbmRpZgogICBib29sCiAgIGRvX2NvcHlfZmls ZShjb25zdCBjaGFyX3R5cGUqIGZyb20sIGNvbnN0IGNoYXJfdHlwZSogdG8s CiAJICAgICAgIHN0ZDo6ZmlsZXN5c3RlbTo6Y29weV9vcHRpb25zX2V4aXN0 aW5nX2ZpbGUgb3B0aW9ucywKQEAgLTQ5OCwyOCArNTI3LDMxIEBAIF9HTElC Q1hYX0JFR0lOX05BTUVTUEFDRV9GSUxFU1lTVEVNCiAJcmV0dXJuIGZhbHNl OwogICAgICAgfQogCi0gICAgc2l6ZV90IGNvdW50ID0gZnJvbV9zdC0+c3Rf c2l6ZTsKKyAgICBib29sIGhhc19jb3BpZWQgPSBmYWxzZTsKKwogI2lmIGRl ZmluZWQgX0dMSUJDWFhfVVNFX1NFTkRGSUxFICYmICEgZGVmaW5lZCBfR0xJ QkNYWF9GSUxFU1lTVEVNX0lTX1dJTkRPV1MKLSAgICBvZmZfdCBvZmZzZXQg PSAwOwotICAgIHNzaXplX3QgbiA9IDo6c2VuZGZpbGUob3V0LmZkLCBpbi5m ZCwgJm9mZnNldCwgY291bnQpOwotICAgIGlmIChuIDwgMCAmJiBlcnJubyAh PSBFTk9TWVMgJiYgZXJybm8gIT0gRUlOVkFMKQorICAgIGlmICghaGFzX2Nv cGllZCkKKyAgICAgIGhhc19jb3BpZWQgPSBjb3B5X2ZpbGVfc2VuZGZpbGUo aW4uZmQsIG91dC5mZCwgZnJvbV9zdC0+c3Rfc2l6ZSk7CisgICAgaWYgKCFo YXNfY29waWVkKQogICAgICAgewotCWVjLmFzc2lnbihlcnJubywgc3RkOjpn ZW5lcmljX2NhdGVnb3J5KCkpOwotCXJldHVybiBmYWxzZTsKLSAgICAgIH0K LSAgICBpZiAoKHNpemVfdCluID09IGNvdW50KQotICAgICAgewotCWlmICgh b3V0LmNsb3NlKCkgfHwgIWluLmNsb3NlKCkpCisJaWYgKGVycm5vICE9IEVO T1NZUyAmJiBlcnJubyAhPSBFSU5WQUwpCiAJICB7CiAJICAgIGVjLmFzc2ln bihlcnJubywgc3RkOjpnZW5lcmljX2NhdGVnb3J5KCkpOwogCSAgICByZXR1 cm4gZmFsc2U7CiAJICB9Ci0JZWMuY2xlYXIoKTsKLQlyZXR1cm4gdHJ1ZTsK ICAgICAgIH0KLSAgICBlbHNlIGlmIChuID4gMCkKLSAgICAgIGNvdW50IC09 IG47Ci0jZW5kaWYgLy8gX0dMSUJDWFhfVVNFX1NFTkRGSUxFCisjZW5kaWYK KworICAgIGlmIChoYXNfY29waWVkKQorICAgICAgeworICAgICAgICBpZiAo IW91dC5jbG9zZSgpIHx8ICFpbi5jbG9zZSgpKQorICAgICAgICAgIHsKKwkg ICAgZWMuYXNzaWduKGVycm5vLCBzdGQ6OmdlbmVyaWNfY2F0ZWdvcnkoKSk7 CisJICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICB9CisJZWMuY2xlYXIo KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICB9CiAKICAgICB1c2lu ZyBzdGQ6OmlvczsKICAgICBfX2dudV9jeHg6OnN0ZGlvX2ZpbGVidWY8Y2hh cj4gc2Jpbihpbi5mZCwgaW9zOjppbnxpb3M6OmJpbmFyeSk7CkBAIC01MzAs MjkgKzU2MiwxMiBAQCBfR0xJQkNYWF9CRUdJTl9OQU1FU1BBQ0VfRklMRVNZ U1RFTQogICAgIGlmIChzYm91dC5pc19vcGVuKCkpCiAgICAgICBvdXQuZmQg PSAtMTsKIAotI2lmZGVmIF9HTElCQ1hYX1VTRV9TRU5ERklMRQotICAgIGlm IChuICE9IDApCi0gICAgICB7Ci0JaWYgKG4gPCAwKQotCSAgbiA9IDA7Ci0K LQljb25zdCBhdXRvIHAxID0gc2Jpbi5wdWJzZWVrb2ZmKG4sIGlvczo6YmVn LCBpb3M6OmluKTsKLQljb25zdCBhdXRvIHAyID0gc2JvdXQucHVic2Vla29m ZihuLCBpb3M6OmJlZywgaW9zOjpvdXQpOwotCi0JY29uc3Qgc3RkOjpzdHJl YW1wb3MgZXJycG9zKHN0ZDo6c3RyZWFtb2ZmKC0xKSk7Ci0JaWYgKHAxID09 IGVycnBvcyB8fCBwMiA9PSBlcnJwb3MpCi0JICB7Ci0JICAgIGVjID0gc3Rk OjptYWtlX2Vycm9yX2NvZGUoc3RkOjplcnJjOjppb19lcnJvcik7Ci0JICAg IHJldHVybiBmYWxzZTsKLQkgIH0KLSAgICAgIH0KLSNlbmRpZgotCi0gICAg aWYgKGNvdW50ICYmICEoc3RkOjpvc3RyZWFtKCZzYm91dCkgPDwgJnNiaW4p KQorICAgIGlmIChmcm9tX3N0LT5zdF9zaXplICYmICEoc3RkOjpvc3RyZWFt KCZzYm91dCkgPDwgJnNiaW4pKQogICAgICAgewogCWVjID0gc3RkOjptYWtl X2Vycm9yX2NvZGUoc3RkOjplcnJjOjppb19lcnJvcik7CiAJcmV0dXJuIGZh bHNlOwogICAgICAgfQorCiAgICAgaWYgKCFzYm91dC5jbG9zZSgpIHx8ICFz YmluLmNsb3NlKCkpCiAgICAgICB7CiAJZWMuYXNzaWduKGVycm5vLCBzdGQ6 OmdlbmVyaWNfY2F0ZWdvcnkoKSk7Cg== --00000000000041310b05f77c1c73--