Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qg5Cy-00EPBY-7M for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Sep 2023 15:21:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qg5Cw-009SuZ-SN for pgsql-hackers@arkaria.postgresql.org; Tue, 12 Sep 2023 15:21:42 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qg57X-009SHf-RL for pgsql-hackers@lists.postgresql.org; Tue, 12 Sep 2023 15:16:07 +0000 Received: from mout.gmx.net ([212.227.17.20]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qg57T-004few-H2 for pgsql-hackers@postgresql.org; Tue, 12 Sep 2023 15:16:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.de; s=s31663417; t=1694531761; x=1695136561; i=stepan.rutz@gmx.de; bh=DAh/zl6tNDXsOuyDvzbuAAQIoFFniQDA18pYsgRDPEQ=; h=X-UI-Sender-Class:Date:From:Subject:To:Cc:References:In-Reply-To; b=FtM3GGqgXaWXGxXa8PuCYVu/Q/bQoUtLsz1D4WY/MJdsNHuRRItCfCy5/EBRoQa3qhS7VG5GmT9 m5LjunFGwoHGoIanztBMZkeJr95XdoDIBgUKlZlIuXj0AUZYj096qTmXpJDEfIWenYDkiOT8i6hcH aVao/4QJetdX2HdAWxwO6a2Y56Khx0b16m/wt0ge1VPSjIxpqouSPKezOJTFH335B/7I7lhycChcj qMnthdVDkADgivuvZ+CYrzwGpbZ+JByijBu7sERLnc+mayiRtozBhkLX8hJrPVPHgEkkxVvqahgKD pg4qDD2SO9FCvD8HZCgnj9Ley3tAt4iyBbcA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.178.110] ([94.31.82.126]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MI5UN-1qvGSc1jtv-00F8AF; Tue, 12 Sep 2023 17:16:01 +0200 Content-Type: multipart/mixed; boundary="------------cqlb1ONubZT0xn2P4ZoatTZk" Message-ID: <2f57ca27-6828-eefc-9dd3-6e2d4578a8fa@gmx.de> Date: Tue, 12 Sep 2023 17:16:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.15.0 From: stepan rutz Subject: Re: Detoasting optionally to make Explain-Analyze less misleading To: Matthias van de Meent Cc: pgsql-hackers@postgresql.org References: Content-Language: en-US In-Reply-To: X-Provags-ID: V03:K1:eQg4N99cQcAOVXikbMD62rQ8FXBnpA8rnDdZ98GMnOccIgmuUGb IkiOv+2bstTRHcMRF7kC1ndl11wV2FeQvYyPGPGo+HMyOiobKjOCLRKS3IIa1CdcqvOEfeW 3vGl81SGGyee9Fuxf9NWFWUx0c0o7MIP6xaXmFGsN+RWkwVLt3OZAQv1C0QCcq33O0I/BTT McuxaCKzW0xWMP+SNHEpA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:AI042r8nRHI=;+hlhP1j70Ncx7BdcYipVoM9UpC4 xA7fxRYakOALwuSLYXO3M0j0qgKhpvJmw3YKCRLn7fzTmUuxhXXP+TqjUqjH6RNIXmvM+IpsO 62UzcC78fuY+Ii3BUk+2ovKaRtQxZ+MgbB9pzhb3XPSVNITZypeQe2e1cAwx/IPvaCitBpmgU eoX1h4VRUGELhC7VO3hAJ0yTp2lrofQ9nfMBTjK6F4Vb6+udv60RoVDLeqwyHkMaLMOO+flwY TJ/z8F1X5dPvVNcjRFyDzTJ9QyveehllxQdVSrnG0kLxwJPqDHkHhIT9MrzfUxm9Qbdzl0H+c IFDkxtlpczg4ztwbfx7bQ0MJjXy7FT9GblLTJZJwWKYBf8ycGuiVmoyPkPEIghNoYDunRhAVm p+GoUTXXFHbfayYpEBdt0MMD8Kn9OCcgSnX5l+Sq9FrCa6HyU037N3pYa0+/WSKq2ed96N5OV UZOTcXEz88r2df6g55TXLx8oog5KpK93gVThOXeNPYfrhdT2w1w3lQyA2R3pjWFv8voSeTsF1 oYv5FBpe29Ttr+ulGgR5aRKcJfCyBlY2RyJ8HSc4ykxBOpTiLDCb228BslGJmeSX6gWrANLFN KoNBejG87lMb503lj1kFvMw0PiGVoHI9G7Ep7Gh+4V2nT8T3GFr6UfmPCuRqn3FKM6FBrtqG+ X1JCVvs1YOIjAHhWRxSKHAh5/19yNihY1c/XSuLIrFyCPcVJ9Ac+KUDK7gRztA3LD8GlZqI10 cV48OkVdRjg4ETO0/HOXizdsUyjjVHKh71DD9mBDNLeIh4XuB/aIWfchztBjZO2ketMr4/PM3 ig/sureeN4DflxZM204mwekPntoOORrNPsl0JA0VaAxeGwa9KB8B4Az8YBZL5wWOZ+MMqf/Kj 0EhhVOF7CDY7PhALIx1ZvEHiu9NdD2UPqBuG5lcD0K2J2lAOEpJY1Nx4jixlgP06CtmgHuniB Q/tf12GKNYDfqE025pmirxa7/PI= 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. --------------cqlb1ONubZT0xn2P4ZoatTZk Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable Hi Matthias, thanks for your feedback. I wasn't sure on the memory-contexts. I was actually also unsure on whether the array =C2=A0 TupleTableSlot.tts_isnull is also set up correctly by the previous call to slot_getallattrs(slot). This would allow to get rid of even more code from this patch, which is in the loop and determines whether a field is null or not. I switched to using tts_isnull from TupleTableSlot now, seems to be ok and the docs say it is save to use. Also I reuse the MemoryContext throughout the livetime of the receiver. Not sure if that makes a difference. One more thing I noticed. During explain.c the DestReceiver's destroy callback was never invoked. I added a line to do that, however I am unsure whether this is the right place or a good idea in the first place. This potentially affects plain analyze calls as well, though seems to behave nicely. Even when I explain (analyze) select * into .... This is the call I am talking about, which was missing from explain.c =C2=A0 dest->rDestroy(dest); Attached a new patch. Hoping for feedback, Greetings, Stepan On 12.09.23 14:25, Matthias van de Meent wrote: > On Tue, 12 Sept 2023 at 12:56, stepan rutz wrote: >> Hi, >> >> I have fallen into this trap and others have too. If you run >> EXPLAIN(ANALYZE) no de-toasting happens. This makes query-runtimes >> differ a lot. The bigger point is that the average user expects more >> from EXPLAIN(ANALYZE) than what it provides. This can be suprising. You >> can force detoasting during explain with explicit calls to length(), bu= t >> that is tedious. Those of us who are forced to work using java stacks, >> orms and still store mostly documents fall into this trap sooner or >> later. I have already received some good feedback on this one, so this >> is an issue that bother quite a few people out there. > Yes, the lack of being able to see the impact of detoasting (amongst > others) in EXPLAIN (ANALYZE) can hide performance issues. > >> It would be great to get some feedback on the subject and how to addres= s >> this, maybe in totally different ways. > Hmm, maybe we should measure the overhead of serializing the tuples inst= ead. > The difference between your patch and "serializing the tuples, but not > sending them" is that serializing also does the detoasting, but also > includes any time spent in the serialization functions of the type. So > an option "SERIALIZE" which measures all the time the server spent on > the query (except the final step of sending the bytes to the client) > would likely be more useful than "just" detoasting. > >> 0001_explain_analyze_and_detoast.patch > I notice that this patch creates and destroys a memory context for > every tuple that the DestReceiver receives. I think that's quite > wasteful, as you should be able to create only one memory context and > reset it before (or after) each processed tuple. That also reduces the > differences in measurements between EXPLAIN and normal query > processing of the tuples - after all, we don't create new memory > contexts for every tuple in the normal DestRemote receiver either, > right? > > Kind regards, > > Matthias van de Meent --------------cqlb1ONubZT0xn2P4ZoatTZk Content-Type: text/x-patch; charset=UTF-8; name="0002_explain_analyze_and_detoast.patch" Content-Disposition: attachment; filename="0002_explain_analyze_and_detoast.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNr ZW5kL2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCA4NTcwYjE0ZjYyLi45NWEwOWRkNGNiIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCkBAIC00Nyw3ICs0Nyw2IEBAIEV4cGxhaW5PbmVR dWVyeV9ob29rX3R5cGUgRXhwbGFpbk9uZVF1ZXJ5X2hvb2sgPSBOVUxMOwogLyogSG9vayBm b3IgcGx1Z2lucyB0byBnZXQgY29udHJvbCBpbiBleHBsYWluX2dldF9pbmRleF9uYW1lKCkg Ki8KIGV4cGxhaW5fZ2V0X2luZGV4X25hbWVfaG9va190eXBlIGV4cGxhaW5fZ2V0X2luZGV4 X25hbWVfaG9vayA9IE5VTEw7CiAKLQogLyogT1ItYWJsZSBmbGFncyBmb3IgRXhwbGFpblhN TFRhZygpICovCiAjZGVmaW5lIFhfT1BFTklORyAwCiAjZGVmaW5lIFhfQ0xPU0lORyAxCkBA IC0xNTUsNiArMTU0LDggQEAgc3RhdGljIHZvaWQgRXhwbGFpbllBTUxMaW5lU3RhcnRpbmco RXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBlc2NhcGVfeWFtbChTdHJpbmdJbmZv IGJ1ZiwgY29uc3QgY2hhciAqc3RyKTsKIAogCitzdGF0aWMgRGVzdFJlY2VpdmVyICpDcmVh dGVEZXRvYXN0RGVzdFJlY2VpdmVyKHZvaWQpOworCiAKIC8qCiAgKiBFeHBsYWluUXVlcnkg LQpAQCAtMTkyLDYgKzE5Myw4IEBAIEV4cGxhaW5RdWVyeShQYXJzZVN0YXRlICpwc3RhdGUs IEV4cGxhaW5TdG10ICpzdG10LAogCQkJZXMtPnNldHRpbmdzID0gZGVmR2V0Qm9vbGVhbihv cHQpOwogCQllbHNlIGlmIChzdHJjbXAob3B0LT5kZWZuYW1lLCAiZ2VuZXJpY19wbGFuIikg PT0gMCkKIAkJCWVzLT5nZW5lcmljID0gZGVmR2V0Qm9vbGVhbihvcHQpOworCQllbHNlIGlm IChzdHJjbXAob3B0LT5kZWZuYW1lLCAiZGV0b2FzdCIpID09IDApCisJCQllcy0+ZGV0b2Fz dCA9IGRlZkdldEJvb2xlYW4ob3B0KTsKIAkJZWxzZSBpZiAoc3RyY21wKG9wdC0+ZGVmbmFt ZSwgInRpbWluZyIpID09IDApCiAJCXsKIAkJCXRpbWluZ19zZXQgPSB0cnVlOwpAQCAtMjQ0 LDYgKzI0NywxMiBAQCBFeHBsYWluUXVlcnkoUGFyc2VTdGF0ZSAqcHN0YXRlLCBFeHBsYWlu U3RtdCAqc3RtdCwKIAkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKIAkJCQkgZXJybXNnKCJFWFBMQUlOIG9wdGlvbiBUSU1JTkcgcmVxdWlyZXMgQU5B TFlaRSIpKSk7CiAKKwkvKiBjaGVjayB0aGF0IGRldG9hc3QgaXMgdXNlZCB3aXRoIEVYUExB SU4gQU5BTFlaRSAqLworCWlmIChlcy0+ZGV0b2FzdCAmJiAhZXMtPmFuYWx5emUpCisJCWVy ZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksCisJCQkJIGVycm1zZygiRVhQTEFJTiBvcHRpb24gREVUT0FTVCByZXF1aXJlcyBB TkFMWVpFIikpKTsKKwogCS8qIGNoZWNrIHRoYXQgR0VORVJJQ19QTEFOIGlzIG5vdCB1c2Vk IHdpdGggRVhQTEFJTiBBTkFMWVpFICovCiAJaWYgKGVzLT5nZW5lcmljICYmIGVzLT5hbmFs eXplKQogCQllcmVwb3J0KEVSUk9SLApAQCAtNTY1LDkgKzU3NCwxMyBAQCBFeHBsYWluT25l UGxhbihQbGFubmVkU3RtdCAqcGxhbm5lZHN0bXQsIEludG9DbGF1c2UgKmludG8sIEV4cGxh aW5TdGF0ZSAqZXMsCiAJLyoKIAkgKiBOb3JtYWxseSB3ZSBkaXNjYXJkIHRoZSBxdWVyeSdz IG91dHB1dCwgYnV0IGlmIGV4cGxhaW5pbmcgQ1JFQVRFIFRBQkxFCiAJICogQVMsIHdlJ2Qg YmV0dGVyIHVzZSB0aGUgYXBwcm9wcmlhdGUgdHVwbGUgcmVjZWl2ZXIuCisJICogQWxzbyBp ZiB3ZSBjaG9vc2UgdG8gZGV0b2FzdCBkdXJpbmcgZXhwbGFpbiwgd2UgbmVlZCB0byBzZW5k IHRoZQorCSAqIHR1cGxlcyB0byBhIHJlY2VpdmVyIHRoYXQgcGVyZm9ybXMgdGhlIGRldG9h c3RpbmcKIAkgKi8KIAlpZiAoaW50bykKIAkJZGVzdCA9IENyZWF0ZUludG9SZWxEZXN0UmVj ZWl2ZXIoaW50byk7CisJZWxzZSBpZiAoZXMtPmFuYWx5emUgJiYgZXMtPmRldG9hc3QpCisJ CWRlc3QgPSBDcmVhdGVEZXRvYXN0RGVzdFJlY2VpdmVyKCk7CiAJZWxzZQogCQlkZXN0ID0g Tm9uZV9SZWNlaXZlcjsKIApAQCAtNjA2LDYgKzYxOSw5IEBAIEV4cGxhaW5PbmVQbGFuKFBs YW5uZWRTdG10ICpwbGFubmVkc3RtdCwgSW50b0NsYXVzZSAqaW50bywgRXhwbGFpblN0YXRl ICplcywKIAkJLyogcnVuIGNsZWFudXAgdG9vICovCiAJCUV4ZWN1dG9yRmluaXNoKHF1ZXJ5 RGVzYyk7CiAKKwkJLyogY2FsbCB0aGUgZGVzdCByZWNlaXZlcidzIGRlc3Ryb3kgbWV0aG9k IGV2ZW4gZHVyaW5nIGV4cGxhaW4gKi8KKwkJZGVzdC0+ckRlc3Ryb3koZGVzdCk7CisKIAkJ LyogV2UgY2FuJ3QgcnVuIEV4ZWN1dG9yRW5kICd0aWxsIHdlJ3JlIGRvbmUgcHJpbnRpbmcg dGhlIHN0YXRzLi4uICovCiAJCXRvdGFsdGltZSArPSBlbGFwc2VkX3RpbWUoJnN0YXJ0dGlt ZSk7CiAJfQpAQCAtNTA1MiwzICs1MDY4LDExNiBAQCBlc2NhcGVfeWFtbChTdHJpbmdJbmZv IGJ1ZiwgY29uc3QgY2hhciAqc3RyKQogewogCWVzY2FwZV9qc29uKGJ1Ziwgc3RyKTsKIH0K KworCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJZGV0b2FzdGluZyBEZXN0UmVjZWl2ZXIg ZnVuY3Rpb25zCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KKy8qIHRoZSBpZGVhIGlzIHRo YXQgcnVubmluZyAgRVhQTEFJTiAoQU5BTFlaRSkgIHNvbWV0aW1lcyBnaXZlcyByZXN1bHRz IHRoYXQKKyAqIGFyZSB3YXkgdW5yZWFsaXN0aWMsIHNpbmNlIGR1cmluZyBleHBsYWluIHRo ZXJlIGlzIG5vIGRldG9hc3Rpbmcgb2YKKyAqIHZhbHVlcy4gVGhhdCBtZWFucyB5b3UgZ2V0 IG5vIGlkZWEgd2hhdCB5b3VyIGFjdHVhbCBxdWVyeSB0aW1lIGlzIGdvaW5nCisgKiB0byBi ZSwgbm9yIHdoYXQgdGhlIGFjdHVhbCBvdmVyaGVhZCBvZiBkZXRvYXN0aW5nIGlzLgorICoK KyAqIGlmIHlvdSBydW4gRVhQTEFJTiAoQU5BWUxaRSwgREVUT0FTVCkgdGhlbiB5b3UgZ2V0 IGFuIGltcHJlc3Npb24gb2YKKyAqIHdoYXQgaXMgYWN0dWFsbHkgaGFwcGVuaW5nIHdoZW4g eW91IHVzZSBwb3N0Z3Jlc3FsIGFzIGEgZG9jdW1lbnQtZGF0YWJhc2UKKyAqIG9yIGhhdmUg bGFyZ2UgdmFsdWVzIGZvciBzb21lIG90aGVyIHJlYXNvbi4KKyAqLworCit0eXBlZGVmIHN0 cnVjdAoreworCURlc3RSZWNlaXZlciBkZXN0UmVjZXZpZXI7CSAgICAgLyogcmVjZWl2ZXIg Zm9yIHRoZSB0dXBsZXMsIHRoYXQganVzdCBkZXRvYXN0cyAqLworCU1lbW9yeUNvbnRleHQg bWVtb3J5Q29udGV4dDsgICAgIC8qIHVzZWQgdGhyb3VnaG91dCB0aGUgZGV0b2FzdGluZyBh bmFseXNpcyBydW4gKi8KKwlNZW1vcnlDb250ZXh0IG9sZE1lbW9yeUNvbnRleHQ7ICAvKiBy ZXN0b3JlIHRvIG9sZCB3aGVuIGRvbmUgKi8KK30gRGV0b2FzdERlc3RSZWNlaXZlcjsKKwor CisKKy8qIHRoaXMgbWV0aG9kIHJlY2VpdmVzIHRoZSB0dXBsZXMvcmVjb3JkcyBkdXJpbmcg ZXhwbGFpbiAoYW5hbHl6ZSwgZGV0b2FzdCkKKyAqIGFuZCBkZXRvYXN0cyB0aGVtLgorICog dGhpcyBtZXRob2QgaXMgb3RoZXJ3aXNlIG5vdCBjYWxsZWQgYW5kIGl0cyBwdXJwb3NlIGlz IHRvIGRldG9hc3QgdG8KKyAqIG1ha2UgYW5hbHl6ZSBvcHRpb25hbGx5IG1vcmUgcmVhbGlz dGljCisgKi8KK3N0YXRpYyBib29sCitkZXRvYXN0QW5hbHl6ZVJlY2VpdmUoVHVwbGVUYWJs ZVNsb3QgKnNsb3QsIERlc3RSZWNlaXZlciAqc2VsZikKK3sKKwlEZXRvYXN0RGVzdFJlY2Vp dmVyICpyZWNlaXZlciA9IChEZXRvYXN0RGVzdFJlY2VpdmVyKikgc2VsZjsKKwlpbnQgaTsK Kwlib29sIHNob3VsZEZyZWUgPSB0cnVlOworCVR1cGxlRGVzYyB0dXBkZXNjOworCUhlYXBU dXBsZSB0dXBsZTsKKworCXJlY2VpdmVyLT5vbGRNZW1vcnlDb250ZXh0ID0gTWVtb3J5Q29u dGV4dFN3aXRjaFRvKHJlY2VpdmVyLT5tZW1vcnlDb250ZXh0KTsKKwl0dXBkZXNjICA9IHNs b3QtPnR0c190dXBsZURlc2NyaXB0b3I7CisJdHVwbGUgPSBFeGVjRmV0Y2hTbG90SGVhcFR1 cGxlKHNsb3QsIHRydWUsICZzaG91bGRGcmVlKTsKKworCS8qIGZpbGwgYWxsIG9mIHRoZSBz bG90J3MgYXR0cmlidXRlcywgd2UgY2FuIG5vdyB1c2Ugc2xvdC0+dHRzX3ZhbHVlcworCSAq IGFuZCBpdHMgdHRzX2lzbnVsbCBhcnJheSB3aGljaCBzaG91bGQgYmUgbG9uZyBlbm91Z2gg ZXZlbiBpZiBhZGRlZAorCSAqIGEgbnVsbC1jb2x1bW4gdG8gdGhlIHRhYmxlICovCisJc2xv dF9nZXRhbGxhdHRycyhzbG90KTsKKworCS8qIGl0ZXJhdGUgb3ZlciBhbGwgYXR0cmlidXRl cyBvZiB0aGUgdHVwbGUgYW5kIHBvdGVudGlhbGx5IGRldG9hc3QgdGhlbSAqLworCWZvciAo aSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0czsgaSsrKQorCXsKKwkJRm9ybV9wZ19hdHRyaWJ1 dGUgYXR0cjsKKwkJY2hhciBzdG9yYWdlOworCisJCWF0dHIgPSBUdXBsZURlc2NBdHRyKHR1 cGRlc2MsIGkpOworCQlzdG9yYWdlID0gYXR0ci0+YXR0c3RvcmFnZTsKKwkJaWYgKCFzbG90 LT50dHNfaXNudWxsW2ldICYmIChzdG9yYWdlID09ICdlJyB8fCBzdG9yYWdlID09ICd4JyB8 fCBzdG9yYWdlID09ICdtJykpIHsKKwkJCURhdHVtIGRhdHVtID0gc2xvdC0+dHRzX3ZhbHVl c1tpXTsKKwkJCS8qIGhlcmUgc2ltcGxlIGRldG9hc3QgdGhlIGF0dHJpYnV0ZSdzIHZhbHVl LCBtYWtpbmcKKwkJCSAqIHRoZSBleHBsYWluIChhbmFseXplKSBzbG93ZXIsIGJ1dCBhbHNv IG1vcmUgcmVhbGlzdGljCisJCQkgKiB0aGUgYWJvdmUgc3RvcmFnZSBtYWtlcyBzdXJlLCB0 aGF0IGRhdHVtIGlzIGFjdHVhbGx5CisJCQkgKiBhIHN0cnVjdCB2YXJsZW5hIHBvaW50ZXIg Ki8KKwkJCXBnX2RldG9hc3RfZGF0dW1fcGFja2VkKChzdHJ1Y3QgdmFybGVuYSAqKWRhdHVt KTsKKwkJfQorCX0KKwlpZiAoc2hvdWxkRnJlZSkKKwkJcGZyZWUodHVwbGUpOworCU1lbW9y eUNvbnRleHRTd2l0Y2hUbyhyZWNlaXZlci0+b2xkTWVtb3J5Q29udGV4dCk7CisJcmV0dXJu IHRydWU7Cit9CisKK3N0YXRpYyB2b2lkCitkZXRvYXN0QW5hbHl6ZVN0YXJ0dXAoRGVzdFJl Y2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCit7CisJ RGV0b2FzdERlc3RSZWNlaXZlciAqcmVjZWl2ZXIgPSAoRGV0b2FzdERlc3RSZWNlaXZlciop IHNlbGY7CisJLyogbWVtb3J5IGNvbnRleHQgZm9yIG91ciB3b3JrICovCisJcmVjZWl2ZXIt Pm1lbW9yeUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNv bnRleHQsCisJCSJEZXRvYXN0VHVwbGVSZWNlaXZlIiwgQUxMT0NTRVRfREVGQVVMVF9TSVpF Uyk7Cit9CisKK3N0YXRpYyB2b2lkCitkZXRvYXN0QW5hbHl6ZUNsZWFudXAoRGVzdFJlY2Vp dmVyICpzZWxmKQoreworCURldG9hc3REZXN0UmVjZWl2ZXIgKnJlY2VpdmVyID0gKERldG9h c3REZXN0UmVjZWl2ZXIqKSBzZWxmOworCU1lbW9yeUNvbnRleHREZWxldGUocmVjZWl2ZXIt Pm1lbW9yeUNvbnRleHQpOworfQorCitzdGF0aWMgdm9pZAorZGV0b2FzdEFuYWx5emVEZXN0 cm95KERlc3RSZWNlaXZlciAqc2VsZikKK3sKKwlwZnJlZShzZWxmKTsKK30KKworc3RhdGlj IERlc3RSZWNlaXZlciAqQ3JlYXRlRGV0b2FzdERlc3RSZWNlaXZlcih2b2lkKQoreworCURl dG9hc3REZXN0UmVjZWl2ZXIgKnNlbGYgPSAoRGV0b2FzdERlc3RSZWNlaXZlciopIHBhbGxv YzAoc2l6ZW9mKERldG9hc3REZXN0UmVjZWl2ZXIpKTsKKworCXNlbGYtPmRlc3RSZWNldmll ci5yZWNlaXZlU2xvdCA9IGRldG9hc3RBbmFseXplUmVjZWl2ZTsKKwlzZWxmLT5kZXN0UmVj ZXZpZXIuclN0YXJ0dXAgPSBkZXRvYXN0QW5hbHl6ZVN0YXJ0dXA7CisJc2VsZi0+ZGVzdFJl Y2V2aWVyLnJTaHV0ZG93biA9IGRldG9hc3RBbmFseXplQ2xlYW51cDsKKwlzZWxmLT5kZXN0 UmVjZXZpZXIuckRlc3Ryb3kgPSBkZXRvYXN0QW5hbHl6ZURlc3Ryb3k7CisJc2VsZi0+ZGVz dFJlY2V2aWVyLm15ZGVzdCA9IERlc3ROb25lOworCXJldHVybiAoRGVzdFJlY2VpdmVyICop IHNlbGY7Cit9CisKKworLyoKK3N0YXRpYyBjb25zdCBEZXN0UmVjZWl2ZXIgZGV0b2FzdEFu YWx5emVEUiA9IHsKKwlkZXRvYXN0QW5hbHl6ZVJlY2VpdmUsIGRldG9hc3RBbmFseXplU3Rh cnR1cCwgZGV0b2FzdEFuYWx5emVDbGVhbnVwLCBkZXRvYXN0QW5hbHl6ZURlc3Ryb3ksCisJ RGVzdE5vbmUKK307CisKKyovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvY29tbWFuZHMvZXhwbGFpbi5oIGIvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXhwbGFpbi5oCmluZGV4IDNkM2U2MzJhMGMuLjAxMWRmZmI4OTAgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V4cGxhaW4uaAorKysgYi9zcmMvaW5jbHVkZS9j b21tYW5kcy9leHBsYWluLmgKQEAgLTQ3LDYgKzQ3LDggQEAgdHlwZWRlZiBzdHJ1Y3QgRXhw bGFpblN0YXRlCiAJYm9vbAkJc3VtbWFyeTsJCS8qIHByaW50IHRvdGFsIHBsYW5uaW5nIGFu ZCBleGVjdXRpb24gdGltaW5nICovCiAJYm9vbAkJc2V0dGluZ3M7CQkvKiBwcmludCBtb2Rp ZmllZCBzZXR0aW5ncyAqLwogCWJvb2wJCWdlbmVyaWM7CQkvKiBnZW5lcmF0ZSBhIGdlbmVy aWMgcGxhbiAqLworCWJvb2wJCWRldG9hc3Q7ICAgICAgICAvKiBkZXRvYXN0IGFsbCB0b2Fz dGVkIHZhbHVlcywgb25seSBhcHBsaWNhYmxlCisJCQkJCQkJCSAgIHdoZW4gImFuYWx5emUi IGlzIGFjdGl2ZS4gKi8KIAlFeHBsYWluRm9ybWF0IGZvcm1hdDsJCS8qIG91dHB1dCBmb3Jt YXQgKi8KIAkvKiBzdGF0ZSBmb3Igb3V0cHV0IGZvcm1hdHRpbmcgLS0tIG5vdCByZXNldCBm b3IgZWFjaCBuZXcgcGxhbiB0cmVlICovCiAJaW50CQkJaW5kZW50OwkJCS8qIGN1cnJlbnQg aW5kZW50YXRpb24gbGV2ZWwgKi8KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvZXhwbGFpbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2V4cGxhaW4u b3V0CmluZGV4IDFhY2E3NzQ5MWIuLmVlZjY4ZDFlY2EgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvZXhwbGFpbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9leHBsYWluLm91dApAQCAtNTU5LDMgKzU1OSwyMyBAQCBzZWxlY3QgZXhwbGFp bl9maWx0ZXIoJ2V4cGxhaW4gKHZlcmJvc2UpIHNlbGVjdCAqIGZyb20gaW50OF90YmwgaTgn KTsKICBRdWVyeSBJZGVudGlmaWVyOiBOCiAoMyByb3dzKQogCistLSBUZXN0IGRldG9hc3Qg aXMgYWNjZXB0ZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZXhwbGFpbgorLS0gc2VlbXMgaGFyZCB0 byB0ZXN0IHRoZSBleHBlY3RlZCBsb25nZXIgcnVudGltZSBvZiBkZXRvYXN0aW5nCistLSBz aW5jZSBvbmUgbmVlZHMgdG8gc2V0dXAgZW5vdWdoIGRhdGEgdG8gbWFrZSBzdWNoIGEgdGVz dCBzdGFibGUKKy0tIGFsc28gdGltaW5nIGFyZSBmaWx0ZXJlZCBvdXQgYnkgZXhwbGFpbl9m aWx0ZXIgYW55d2F5CitjcmVhdGUgdGFibGUgdGVzdF9kZXRvYXN0KGlkIGJpZ3NlcmlhbCwg dmFsIHRleHQpOworc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLGRl dG9hc3QpIHNlbGVjdCAqIGZyb20gdGVzdF9kZXRvYXN0Jyk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGV4cGxhaW5fZmlsdGVyICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIFNlcSBTY2FuIG9uIHRlc3RfZGV0b2FzdCAgKGNvc3Q9Ti5O Li5OLk4gcm93cz1OIHdpZHRoPU4pIChhY3R1YWwgdGltZT1OLk4uLk4uTiByb3dzPU4gbG9v cHM9TikKKyBQbGFubmluZyBUaW1lOiBOLk4gbXMKKyBFeGVjdXRpb24gVGltZTogTi5OIG1z CisoMyByb3dzKQorCitkcm9wIHRhYmxlIHRlc3RfZGV0b2FzdDsKKy0tIFRlc3QgZGV0b2Fz dCBpcyBfbm90XyBhY2NlcHRlZCBhcyBhIHBhcmFtZXRlciB0byBleHBsYWluIHVubGVzcyBh bmFseXplIGlzIHNwZWNpZmllZAorY3JlYXRlIHRhYmxlIHRlc3RfZGV0b2FzdChpZCBiaWdz ZXJpYWwsIHZhbCB0ZXh0KTsKK3NlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAoZGV0 b2FzdCkgc2VsZWN0ICogZnJvbSB0ZXN0X2RldG9hc3QnKTsKK0VSUk9SOiAgRVhQTEFJTiBv cHRpb24gREVUT0FTVCByZXF1aXJlcyBBTkFMWVpFCitDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gZXhwbGFpbl9maWx0ZXIodGV4dCkgbGluZSA1IGF0IEZPUiBvdmVyIEVYRUNVVEUg c3RhdGVtZW50Citkcm9wIHRhYmxlIHRlc3RfZGV0b2FzdDsKZGlmZiAtLWdpdCBhL3NyYy90 ZXN0L3JlZ3Jlc3Mvc3FsL2V4cGxhaW4uc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZXhw bGFpbi5zcWwKaW5kZXggYjZiN2JlYWIyNy4uNDMwNDdmOWNjZSAxMDA2NDQKLS0tIGEvc3Jj L3Rlc3QvcmVncmVzcy9zcWwvZXhwbGFpbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9z cWwvZXhwbGFpbi5zcWwKQEAgLTE1NCwzICsxNTQsMTggQEAgc2VsZWN0IGV4cGxhaW5fZmls dGVyKCdleHBsYWluICh2ZXJib3NlKSBzZWxlY3QgKiBmcm9tIHQxIHdoZXJlIHBnX3RlbXAu bXlzaW4oZjEKIC0tIFRlc3QgY29tcHV0ZV9xdWVyeV9pZAogc2V0IGNvbXB1dGVfcXVlcnlf aWQgPSBvbjsKIHNlbGVjdCBleHBsYWluX2ZpbHRlcignZXhwbGFpbiAodmVyYm9zZSkgc2Vs ZWN0ICogZnJvbSBpbnQ4X3RibCBpOCcpOworCistLSBUZXN0IGRldG9hc3QgaXMgYWNjZXB0 ZWQgYXMgYSBwYXJhbWV0ZXIgdG8gZXhwbGFpbgorLS0gc2VlbXMgaGFyZCB0byB0ZXN0IHRo ZSBleHBlY3RlZCBsb25nZXIgcnVudGltZSBvZiBkZXRvYXN0aW5nCistLSBzaW5jZSBvbmUg bmVlZHMgdG8gc2V0dXAgZW5vdWdoIGRhdGEgdG8gbWFrZSBzdWNoIGEgdGVzdCBzdGFibGUK Ky0tIGFsc28gdGltaW5nIGFyZSBmaWx0ZXJlZCBvdXQgYnkgZXhwbGFpbl9maWx0ZXIgYW55 d2F5CitjcmVhdGUgdGFibGUgdGVzdF9kZXRvYXN0KGlkIGJpZ3NlcmlhbCwgdmFsIHRleHQp Oworc2VsZWN0IGV4cGxhaW5fZmlsdGVyKCdleHBsYWluIChhbmFseXplLGRldG9hc3QpIHNl bGVjdCAqIGZyb20gdGVzdF9kZXRvYXN0Jyk7Citkcm9wIHRhYmxlIHRlc3RfZGV0b2FzdDsK KworLS0gVGVzdCBkZXRvYXN0IGlzIF9ub3RfIGFjY2VwdGVkIGFzIGEgcGFyYW1ldGVyIHRv IGV4cGxhaW4gdW5sZXNzIGFuYWx5emUgaXMgc3BlY2lmaWVkCitjcmVhdGUgdGFibGUgdGVz dF9kZXRvYXN0KGlkIGJpZ3NlcmlhbCwgdmFsIHRleHQpOworc2VsZWN0IGV4cGxhaW5fZmls dGVyKCdleHBsYWluIChkZXRvYXN0KSBzZWxlY3QgKiBmcm9tIHRlc3RfZGV0b2FzdCcpOwor ZHJvcCB0YWJsZSB0ZXN0X2RldG9hc3Q7CisKKwo= --------------cqlb1ONubZT0xn2P4ZoatTZk--