From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-ej1-x62b.google.com (mail-ej1-x62b.google.com [IPv6:2a00:1450:4864:20::62b]) by sourceware.org (Postfix) with ESMTPS id 0833E3858CDA; Wed, 11 Jan 2023 06:03:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 0833E3858CDA Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-ej1-x62b.google.com with SMTP id az20so15185888ejc.1; Tue, 10 Jan 2023 22:03:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:content-language:references:to:subject:from:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=rTfw4rg77q4AaMyLXR/AdSq24F/Xik7NDnP4u5X2pRI=; b=Cnfab0lAIw/8T4mjB5Jhcdu+Oip+0lk9i9Wktulk86EqE7B7IgAJiD489Na0p7FTKj C9OoCZT2eIsL5fyqCRvX3h409yo7QkGuiIlFqhDlyR3F4p17ZpZVLmVWUFPmSm+j2SaF MXORl6+pvIS5IEykMy3uITObBkBdHkz9EdH/qrDOpyAzB1aT4/uMpdDoB38UZPh92tHs vLOmzbBXkZef2ADRVaasAS1usuB/uYOYEn8b8VSJ2SjEqqmKJ+xaOOtLuhgDGu2rNgO4 Pi31Nfos8Sh1+qTERvxBbMnRqkIHPzo6B8qq/o7I323qO2BxxyMxGeDFPNYrOYJTWHNP a5sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:content-language:references:to:subject:from:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=rTfw4rg77q4AaMyLXR/AdSq24F/Xik7NDnP4u5X2pRI=; b=NIYpxXCaofYoyykqE5Z3psljYQxWezEPu8T0jjXa8yeYOHAFEOfmpxRwoM7vEdiMzF UWt2CnWyJIQrViwEekHk8oic9qVasJD8h2E6NvzUc0asGjNB9EkU9Fq9a/KNtIFA3PBk /R6BPATcXIdlUpMACW5ivGOgayBbQAJZENExq6H0reL963zdt1VrcY2GHWxTNO9fVgcU O8hGsGVYBflIeLBgO7weBivctiY/WD73YrLo7wdbwt6oFMoJ9tpxF66t2O8gZFUq0Eqd T9JxS5VHR9+T1QEZ/z1+aLXoJMYvfr2u7LKOZsoX9gW/NJludqTvH18Z9LFBJL9dgiXR cQYQ== X-Gm-Message-State: AFqh2kpDKMftD29TGu/su+7tdQFEBnLXPx8I7KnlpxyVuZm5GNFiOPZK lCzVtTm3ay6bOd3fWWTt/i0= X-Google-Smtp-Source: AMrXdXuaNKw7zQ5TsJYgNAj6/9wwA+I2Iiv3GSmXWKWkuuHxZMbOVkTAC9YHMwC58AxKQOpsxK2XGA== X-Received: by 2002:a17:907:8c0c:b0:7c1:1901:a445 with SMTP id ta12-20020a1709078c0c00b007c11901a445mr63561434ejc.20.1673416983554; Tue, 10 Jan 2023 22:03:03 -0800 (PST) Received: from [10.13.0.69] ([109.190.253.11]) by smtp.googlemail.com with ESMTPSA id x22-20020aa7dad6000000b0048789661fa2sm5589153eds.66.2023.01.10.22.03.02 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 10 Jan 2023 22:03:02 -0800 (PST) Content-Type: multipart/mixed; boundary="------------IUj11KpJC8Zhhx2F3Pvs6Et3" Message-ID: Date: Wed, 11 Jan 2023 07:03:00 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 From: =?UTF-8?Q?Fran=c3=a7ois_Dumont?= Subject: Re: [committed] libstdc++: Fix deadlock in debug iterator increment [PR108288] To: Jonathan Wakely , libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org References: <20230106115402.178926-1-jwakely@redhat.com> Content-Language: fr, en-US In-Reply-To: <20230106115402.178926-1-jwakely@redhat.com> X-Spam-Status: No, score=-8.1 required=5.0 tests=BAYES_00,BODY_8BITS,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_BARRACUDACENTRAL,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------IUj11KpJC8Zhhx2F3Pvs6Et3 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Thanks for fixing this. Here is the extension of the fix to all post-increment/decrement operators we have on _GLIBCXX_DEBUG iterator. I prefer to restore somehow previous implementation to continue to have _GLIBCXX_DEBUG post operators implemented in terms of normal post operators. I also plan to remove the debug check in the _Safe_iterator constructor from base iterator to avoid the redundant check we have now. But I need to make sure first that we are never calling it with an unchecked base iterator. And it might not be the right moment to do such a change.     libstdc++: Fix deadlock in debug local_iterator increment [PR108288]     Complete fix on all _Safe_iterator post-increment and post-decrement implementations     and on _Safe_local_iterator.     libstdc++-v3/ChangeLog:             * include/debug/safe_iterator.h (_Safe_iterator<>::operator++(int)): Extend deadlock fix to             other iterator category.             (_Safe_iterator<>::operator--(int)): Likewise.             * include/debug/safe_local_iterator.h (_Safe_local_iterator<>::operator++(int)): Fix deadlock.             * testsuite/util/debug/unordered_checks.h (invalid_local_iterator_pre_increment): New.             (invalid_local_iterator_post_increment): New.             * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_post_increment_neg.cc:             New test.             * testsuite/23_containers/unordered_map/debug/invalid_local_iterator_pre_increment_neg.cc:             New test. Tested under Linux x86_64. Ok to commit ? François On 06/01/23 12:54, Jonathan Wakely via Libstdc++ wrote: > Tested x86_64-linux. Pushed to trunk. > > I think we should backport this too, after some soak time on trunk. > > -- >8 -- > > With -fno-elide-constructors the debug iterator post-increment and > post-decrement operators are susceptible to deadlock. They take a mutex > lock and then return a temporary, which also attempts to take a lock to > attach itself to the sequence. If the return value and *this happen to Note that the chosen mutex depends on the sequence so there is no need for conditional sentense here, it will necessarily be the same mutex. > collide and use the same mutex from the pool, then you get a deadlock > trying to lock a mutex that is already held by the current thread. --------------IUj11KpJC8Zhhx2F3Pvs6Et3 Content-Type: text/x-patch; charset=UTF-8; name="pr108288.patch" Content-Disposition: attachment; filename="pr108288.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3NhZmVfaXRlcmF0b3Iu aCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3NhZmVfaXRlcmF0b3IuaAppbmRleCBm OTA2OGVhZjhkNi4uZTdjOTZkMWFmMjcgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNs dWRlL2RlYnVnL3NhZmVfaXRlcmF0b3IuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9k ZWJ1Zy9zYWZlX2l0ZXJhdG9yLmgKQEAgLTEyOSwxNCArMTI5LDYgQEAgbmFtZXNwYWNlIF9f Z251X2RlYnVnCiAJdHlwZW5hbWUgX1NlcXVlbmNlOjpfQmFzZTo6aXRlcmF0b3IsCiAJdHlw ZW5hbWUgX1NlcXVlbmNlOjpfQmFzZTo6Y29uc3RfaXRlcmF0b3I+OjpfX3R5cGUgX090aGVy SXRlcmF0b3I7CiAKLSAgICAgIHN0cnVjdCBfQXR0YWNoX3NpbmdsZQotICAgICAgeyB9Owot Ci0gICAgICBfU2FmZV9pdGVyYXRvcihfSXRlcmF0b3IgX19pLCBfU2FmZV9zZXF1ZW5jZV9i YXNlKiBfX3NlcSwgX0F0dGFjaF9zaW5nbGUpCi0gICAgICBfR0xJQkNYWF9OT0VYQ0VQVAot ICAgICAgOiBfSXRlcl9iYXNlKF9faSkKLSAgICAgIHsgX01fYXR0YWNoX3NpbmdsZShfX3Nl cSk7IH0KLQogICAgIHB1YmxpYzoKICAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yCQkJCQlpdGVy YXRvcl90eXBlOwogICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppdGVyYXRvcl9j YXRlZ29yeQlpdGVyYXRvcl9jYXRlZ29yeTsKQEAgLTM0Nyw4ICszMzksMTMgQEAgbmFtZXNw YWNlIF9fZ251X2RlYnVnCiAJX0dMSUJDWFhfREVCVUdfVkVSSUZZKHRoaXMtPl9NX2luY3Jl bWVudGFibGUoKSwKIAkJCSAgICAgIF9NX21lc3NhZ2UoX19tc2dfYmFkX2luYykKIAkJCSAg ICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7Ci0JX19nbnVfY3h4OjpfX3Njb3Bl ZF9sb2NrIF9fbCh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7Ci0JcmV0dXJuIF9TYWZlX2l0ZXJh dG9yKGJhc2UoKSsrLCB0aGlzLT5fTV9zZXF1ZW5jZSwgX0F0dGFjaF9zaW5nbGUoKSk7CisJ X0l0ZXJfYmFzZSBfX2N1cjsKKwl7CisJICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgX19s KHRoaXMtPl9NX2dldF9tdXRleCgpKTsKKwkgIF9fY3VyID0gYmFzZSgpKys7CisJfQorCisJ cmV0dXJuIF9TYWZlX2l0ZXJhdG9yKF9fY3VyLCB0aGlzLT5fTV9zZXF1ZW5jZSk7CiAgICAg ICB9CiAKICAgICAgIC8vIC0tLS0tLSBVdGlsaXRpZXMgLS0tLS0tCkBAIC01MjAsMTIgKzUx Nyw2IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogCiAgICAgcHJvdGVjdGVkOgogICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfU2FmZV9iYXNlOjpfT3RoZXJJdGVyYXRvciBfT3RoZXJJdGVy YXRvcjsKLSAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1NhZmVfYmFzZTo6X0F0dGFjaF9zaW5n bGUgX0F0dGFjaF9zaW5nbGU7Ci0KLSAgICAgIF9TYWZlX2l0ZXJhdG9yKF9JdGVyYXRvciBf X2ksIF9TYWZlX3NlcXVlbmNlX2Jhc2UqIF9fc2VxLCBfQXR0YWNoX3NpbmdsZSkKLSAgICAg IF9HTElCQ1hYX05PRVhDRVBUCi0gICAgICA6IF9TYWZlX2Jhc2UoX19pLCBfX3NlcSwgX0F0 dGFjaF9zaW5nbGUoKSkKLSAgICAgIHsgfQogCiAgICAgcHVibGljOgogICAgICAgLy8vIEBw b3N0IHRoZSBpdGVyYXRvciBpcyBzaW5ndWxhciBhbmQgdW5hdHRhY2hlZApAQCAtNjA5LDkg KzYwMCwxMyBAQCBuYW1lc3BhY2UgX19nbnVfZGVidWcKIAlfR0xJQkNYWF9ERUJVR19WRVJJ RlkodGhpcy0+X01faW5jcmVtZW50YWJsZSgpLAogCQkJICAgICAgX01fbWVzc2FnZShfX21z Z19iYWRfaW5jKQogCQkJICAgICAgLl9NX2l0ZXJhdG9yKCp0aGlzLCAidGhpcyIpKTsKLQlf X2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgX19sKHRoaXMtPl9NX2dldF9tdXRleCgpKTsKLQly ZXR1cm4gX1NhZmVfaXRlcmF0b3IodGhpcy0+YmFzZSgpKyssIHRoaXMtPl9NX3NlcXVlbmNl LAotCQkJICAgICAgX0F0dGFjaF9zaW5nbGUoKSk7CisJX0l0ZXJfYmFzZSBfX2N1cjsKKwl7 CisJICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgX19sKHRoaXMtPl9NX2dldF9tdXRleCgp KTsKKwkgIF9fY3VyID0gdGhpcy0+YmFzZSgpKys7CisJfQorCisJcmV0dXJuIF9TYWZlX2l0 ZXJhdG9yKF9fY3VyLCB0aGlzLT5fTV9zZXF1ZW5jZSk7CiAgICAgICB9CiAKICAgICAgIC8v IC0tLS0tLSBCaWRpcmVjdGlvbmFsIGl0ZXJhdG9yIHJlcXVpcmVtZW50cyAtLS0tLS0KQEAg LTY0MCw5ICs2MzUsMTMgQEAgbmFtZXNwYWNlIF9fZ251X2RlYnVnCiAJX0dMSUJDWFhfREVC VUdfVkVSSUZZKHRoaXMtPl9NX2RlY3JlbWVudGFibGUoKSwKIAkJCSAgICAgIF9NX21lc3Nh Z2UoX19tc2dfYmFkX2RlYykKIAkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMi KSk7Ci0JX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIF9fbCh0aGlzLT5fTV9nZXRfbXV0ZXgo KSk7Ci0JcmV0dXJuIF9TYWZlX2l0ZXJhdG9yKHRoaXMtPmJhc2UoKS0tLCB0aGlzLT5fTV9z ZXF1ZW5jZSwKLQkJCSAgICAgIF9BdHRhY2hfc2luZ2xlKCkpOworCV9JdGVyX2Jhc2UgX19j dXI7CisJeworCSAgX19nbnVfY3h4OjpfX3Njb3BlZF9sb2NrIF9fbCh0aGlzLT5fTV9nZXRf bXV0ZXgoKSk7CisJICBfX2N1ciA9IHRoaXMtPmJhc2UoKS0tOworCX0KKworCXJldHVybiBf U2FmZV9pdGVyYXRvcihfX2N1ciwgdGhpcy0+X01fc2VxdWVuY2UpOwogICAgICAgfQogCiAg ICAgICAvLyAtLS0tLS0gVXRpbGl0aWVzIC0tLS0tLQpAQCAtNjY2LDEzICs2NjUsNiBAQCBu YW1lc3BhY2UgX19nbnVfZGVidWcKICAgICAgIHR5cGVkZWYgX1NhZmVfaXRlcmF0b3I8X090 aGVySXRlcmF0b3IsIF9TZXF1ZW5jZSwKIAkJCSAgICAgc3RkOjpyYW5kb21fYWNjZXNzX2l0 ZXJhdG9yX3RhZz4gX090aGVyU2VsZjsKIAotICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfU2Fm ZV9iYXNlOjpfQXR0YWNoX3NpbmdsZSBfQXR0YWNoX3NpbmdsZTsKLQotICAgICAgX1NhZmVf aXRlcmF0b3IoX0l0ZXJhdG9yIF9faSwgX1NhZmVfc2VxdWVuY2VfYmFzZSogX19zZXEsIF9B dHRhY2hfc2luZ2xlKQotICAgICAgX0dMSUJDWFhfTk9FWENFUFQKLSAgICAgIDogX1NhZmVf YmFzZShfX2ksIF9fc2VxLCBfQXR0YWNoX3NpbmdsZSgpKQotICAgICAgeyB9Ci0KICAgICBw dWJsaWM6CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TYWZlX2Jhc2U6OmRpZmZlcmVuY2Vf dHlwZQlkaWZmZXJlbmNlX3R5cGU7CiAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9TYWZlX2Jh c2U6OnJlZmVyZW5jZQkJcmVmZXJlbmNlOwpAQCAtNzYxLDkgKzc1MywxNiBAQCBuYW1lc3Bh Y2UgX19nbnVfZGVidWcKICAgICAgIF9TYWZlX2l0ZXJhdG9yCiAgICAgICBvcGVyYXRvcisr KGludCkgX0dMSUJDWFhfTk9FWENFUFQKICAgICAgIHsKLQlfU2FmZV9pdGVyYXRvciBfX3Jl dCA9ICp0aGlzOwotCSsrKnRoaXM7Ci0JcmV0dXJuIF9fcmV0OworCV9HTElCQ1hYX0RFQlVH X1ZFUklGWSh0aGlzLT5fTV9pbmNyZW1lbnRhYmxlKCksCisJCQkgICAgICBfTV9tZXNzYWdl KF9fbXNnX2JhZF9pbmMpCisJCQkgICAgICAuX01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikp OworCV9JdGVyX2Jhc2UgX19jdXI7CisJeworCSAgX19nbnVfY3h4OjpfX3Njb3BlZF9sb2Nr IF9fbCh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7CisJICBfX2N1ciA9IHRoaXMtPmJhc2UoKSsr OworCX0KKworCXJldHVybiBfU2FmZV9pdGVyYXRvcihfX2N1ciwgdGhpcy0+X01fc2VxdWVu Y2UpOwogICAgICAgfQogCiAgICAgICAvLyAtLS0tLS0gQmlkaXJlY3Rpb25hbCBpdGVyYXRv ciByZXF1aXJlbWVudHMgLS0tLS0tCkBAIC03ODUsOSArNzg0LDE2IEBAIG5hbWVzcGFjZSBf X2dudV9kZWJ1ZwogICAgICAgX1NhZmVfaXRlcmF0b3IKICAgICAgIG9wZXJhdG9yLS0oaW50 KSBfR0xJQkNYWF9OT0VYQ0VQVAogICAgICAgewotCV9TYWZlX2l0ZXJhdG9yIF9fcmV0ID0g KnRoaXM7Ci0JLS0qdGhpczsKLQlyZXR1cm4gX19yZXQ7CisJX0dMSUJDWFhfREVCVUdfVkVS SUZZKHRoaXMtPl9NX2RlY3JlbWVudGFibGUoKSwKKwkJCSAgICAgIF9NX21lc3NhZ2UoX19t c2dfYmFkX2RlYykKKwkJCSAgICAgIC5fTV9pdGVyYXRvcigqdGhpcywgInRoaXMiKSk7CisJ X0l0ZXJfYmFzZSBfX2N1cjsKKwl7CisJICBfX2dudV9jeHg6Ol9fc2NvcGVkX2xvY2sgX19s KHRoaXMtPl9NX2dldF9tdXRleCgpKTsKKwkgIF9fY3VyID0gdGhpcy0+YmFzZSgpLS07CisJ fQorCisJcmV0dXJuIF9TYWZlX2l0ZXJhdG9yKF9fY3VyLCB0aGlzLT5fTV9zZXF1ZW5jZSk7 CiAgICAgICB9CiAKICAgICAgIC8vIC0tLS0tLSBSYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHJl cXVpcmVtZW50cyAtLS0tLS0KZGlmZiAtLWdpdCBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2Rl YnVnL3NhZmVfbG9jYWxfaXRlcmF0b3IuaCBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVn L3NhZmVfbG9jYWxfaXRlcmF0b3IuaAppbmRleCA2ZTNjNGViMTUwNS4uM2M1MjU2NTJlYTEg MTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL2RlYnVnL3NhZmVfbG9jYWxfaXRl cmF0b3IuaAorKysgYi9saWJzdGRjKystdjMvaW5jbHVkZS9kZWJ1Zy9zYWZlX2xvY2FsX2l0 ZXJhdG9yLmgKQEAgLTg0LDE0ICs4NCw2IEBAIG5hbWVzcGFjZSBfX2dudV9kZWJ1ZwogICAg ICAgdHlwZWRlZiBfU2FmZV9sb2NhbF9pdGVyYXRvciBfU2VsZjsKICAgICAgIHR5cGVkZWYg X1NhZmVfbG9jYWxfaXRlcmF0b3I8X090aGVySXRlcmF0b3IsIF9TZXF1ZW5jZT4gX090aGVy U2VsZjsKIAotICAgICAgc3RydWN0IF9BdHRhY2hfc2luZ2xlCi0gICAgICB7IH07Ci0KLSAg ICAgIF9TYWZlX2xvY2FsX2l0ZXJhdG9yKF9JdGVyYXRvciBfX2ksIF9TYWZlX3NlcXVlbmNl X2Jhc2UqIF9fY29udCwKLQkJCSAgIF9BdHRhY2hfc2luZ2xlKSBub2V4Y2VwdAotICAgICAg OiBfSXRlcl9iYXNlKF9faSkKLSAgICAgIHsgX01fYXR0YWNoX3NpbmdsZShfX2NvbnQpOyB9 Ci0KICAgICBwdWJsaWM6CiAgICAgICB0eXBlZGVmIF9JdGVyYXRvcgkJCQkJaXRlcmF0b3Jf dHlwZTsKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aXRlcmF0b3JfY2F0ZWdv cnkJaXRlcmF0b3JfY2F0ZWdvcnk7CkBAIC0yOTAsOSArMjgyLDEzIEBAIG5hbWVzcGFjZSBf X2dudV9kZWJ1ZwogCV9HTElCQ1hYX0RFQlVHX1ZFUklGWSh0aGlzLT5fTV9pbmNyZW1lbnRh YmxlKCksCiAJCQkgICAgICBfTV9tZXNzYWdlKF9fbXNnX2JhZF9pbmMpCiAJCQkgICAgICAu X01faXRlcmF0b3IoKnRoaXMsICJ0aGlzIikpOwotCV9fZ251X2N4eDo6X19zY29wZWRfbG9j ayBfX2wodGhpcy0+X01fZ2V0X211dGV4KCkpOwotCXJldHVybiBfU2FmZV9sb2NhbF9pdGVy YXRvcihiYXNlKCkrKywgdGhpcy0+X01fc2VxdWVuY2UsCi0JCQkJICAgIF9BdHRhY2hfc2lu Z2xlKCkpOworCV9JdGVyX2Jhc2UgX19jdXI7CisJeworCSAgX19nbnVfY3h4OjpfX3Njb3Bl ZF9sb2NrIF9fbCh0aGlzLT5fTV9nZXRfbXV0ZXgoKSk7CisJICBfX2N1ciA9IGJhc2UoKSsr OworCX0KKworCXJldHVybiB7IF9fY3VyLCB0aGlzLT5fTV9zZXF1ZW5jZSB9OwogICAgICAg fQogCiAgICAgICAvLyAtLS0tLS0gVXRpbGl0aWVzIC0tLS0tLQpkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9tYXAvZGVidWcv aW52YWxpZF9sb2NhbF9pdGVyYXRvcl9wb3N0X2luY3JlbWVudF9uZWcuY2MgYi9saWJzdGRj KystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21hcC9kZWJ1Zy9pbnZh bGlkX2xvY2FsX2l0ZXJhdG9yX3Bvc3RfaW5jcmVtZW50X25lZy5jYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNzQwMDVjM2VjNjkKLS0tIC9kZXYvbnVsbAor KysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21h cC9kZWJ1Zy9pbnZhbGlkX2xvY2FsX2l0ZXJhdG9yX3Bvc3RfaW5jcmVtZW50X25lZy5jYwpA QCAtMCwwICsxLDE2IEBACisvLyB7IGRnLWRvIHJ1biB7IHRhcmdldCBjKysxMSB4ZmFpbCAq LSotKiB9IH0KKy8vIHsgZGctcmVxdWlyZS1kZWJ1Zy1tb2RlICIiIH0KKworI2luY2x1ZGUg PHVub3JkZXJlZF9tYXA+CisjaW5jbHVkZSA8ZGVidWcvdW5vcmRlcmVkX2NoZWNrcy5oPgor Cit2b2lkIHRlc3QwMSgpCit7CisgIF9fZ251X3Rlc3Q6OmludmFsaWRfbG9jYWxfaXRlcmF0 b3JfcG9zdF9pbmNyZW1lbnQ8c3RkOjp1bm9yZGVyZWRfbWFwPGludCwgaW50Pj4oKTsKK30K KworaW50IG1haW4oKQoreworICB0ZXN0MDEoKTsKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1n aXQgYS9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRlcmVkX21h cC9kZWJ1Zy9pbnZhbGlkX2xvY2FsX2l0ZXJhdG9yX3ByZV9pbmNyZW1lbnRfbmVnLmNjIGIv bGlic3RkYysrLXYzL3Rlc3RzdWl0ZS8yM19jb250YWluZXJzL3Vub3JkZXJlZF9tYXAvZGVi dWcvaW52YWxpZF9sb2NhbF9pdGVyYXRvcl9wcmVfaW5jcmVtZW50X25lZy5jYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDE2Y2QxYzY5NDcKLS0tIC9kZXYv bnVsbAorKysgYi9saWJzdGRjKystdjMvdGVzdHN1aXRlLzIzX2NvbnRhaW5lcnMvdW5vcmRl cmVkX21hcC9kZWJ1Zy9pbnZhbGlkX2xvY2FsX2l0ZXJhdG9yX3ByZV9pbmNyZW1lbnRfbmVn LmNjCkBAIC0wLDAgKzEsMTYgQEAKKy8vIHsgZGctZG8gcnVuIHsgdGFyZ2V0IGMrKzExIHhm YWlsICotKi0qIH0gfQorLy8geyBkZy1yZXF1aXJlLWRlYnVnLW1vZGUgIiIgfQorCisjaW5j bHVkZSA8dW5vcmRlcmVkX21hcD4KKyNpbmNsdWRlIDxkZWJ1Zy91bm9yZGVyZWRfY2hlY2tz Lmg+CisKK3ZvaWQgdGVzdDAxKCkKK3sKKyAgX19nbnVfdGVzdDo6aW52YWxpZF9sb2NhbF9p dGVyYXRvcl9wcmVfaW5jcmVtZW50PHN0ZDo6dW5vcmRlcmVkX21hcDxpbnQsIGludD4+KCk7 Cit9CisKK2ludCBtYWluKCkKK3sKKyAgdGVzdDAxKCk7CisgIHJldHVybiAwOworfQpkaWZm IC0tZ2l0IGEvbGlic3RkYysrLXYzL3Rlc3RzdWl0ZS91dGlsL2RlYnVnL3Vub3JkZXJlZF9j aGVja3MuaCBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdXRpbC9kZWJ1Zy91bm9yZGVyZWRf Y2hlY2tzLmgKaW5kZXggNjU1ZjE2ZjE5OWYuLjk3MWZlNjgzOTZiIDEwMDY0NAotLS0gYS9s aWJzdGRjKystdjMvdGVzdHN1aXRlL3V0aWwvZGVidWcvdW5vcmRlcmVkX2NoZWNrcy5oCisr KyBiL2xpYnN0ZGMrKy12My90ZXN0c3VpdGUvdXRpbC9kZWJ1Zy91bm9yZGVyZWRfY2hlY2tz LmgKQEAgLTEyNSw2ICsxMjUsMzggQEAgbmFtZXNwYWNlIF9fZ251X3Rlc3QKICAgICAgIFZF UklGWSggKml0ID09IHZhbCApOwogICAgIH0KIAorICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CisgICAgdm9pZCBpbnZhbGlkX2xvY2FsX2l0ZXJhdG9yX3ByZV9pbmNyZW1lbnQoKQorICAg IHsKKyAgICAgIHR5cGVkZWYgX1RwIGNvbnRfdHlwZTsKKyAgICAgIHR5cGVkZWYgdHlwZW5h bWUgY29udF90eXBlOjp2YWx1ZV90eXBlIGNvbnRfdmFsX3R5cGU7CisgICAgICB0eXBlZGVm IHR5cGVuYW1lIENvcHlhYmxlVmFsdWVUeXBlPGNvbnRfdmFsX3R5cGU+Ojp2YWx1ZV90eXBl IHZhbF90eXBlOworICAgICAgZ2VuZXJhdGVfdW5pcXVlPHZhbF90eXBlPiBndTsKKworICAg ICAgY29udF90eXBlIGM7CisgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSA1OyArK2kp CisJYy5pbnNlcnQoZ3UuYnVpbGQoKSk7CisKKyAgICAgIGZvciAoYXV0byBsaXQgPSBjLmJl Z2luKDApOyA7KQorCSsrbGl0OworICAgIH0KKworICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CisgICAgdm9pZCBpbnZhbGlkX2xvY2FsX2l0ZXJhdG9yX3Bvc3RfaW5jcmVtZW50KCkKKyAg ICB7CisgICAgICB0eXBlZGVmIF9UcCBjb250X3R5cGU7CisgICAgICB0eXBlZGVmIHR5cGVu YW1lIGNvbnRfdHlwZTo6dmFsdWVfdHlwZSBjb250X3ZhbF90eXBlOworICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBDb3B5YWJsZVZhbHVlVHlwZTxjb250X3ZhbF90eXBlPjo6dmFsdWVfdHlw ZSB2YWxfdHlwZTsKKyAgICAgIGdlbmVyYXRlX3VuaXF1ZTx2YWxfdHlwZT4gZ3U7CisKKyAg ICAgIGNvbnRfdHlwZSBjOworICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gNTsgKytp KQorCWMuaW5zZXJ0KGd1LmJ1aWxkKCkpOworCisgICAgICBmb3IgKGF1dG8gaXQgPSBjLmJl Z2luKDApOyA7KQorCWl0Kys7CisgICAgfQorCiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgICB2b2lkIGludmFsaWRfbG9jYWxfaXRlcmF0b3JfY29tcGFyZSgpCiAgICAgewo= --------------IUj11KpJC8Zhhx2F3Pvs6Et3--