Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fabRl-0001p5-Jx for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jul 2018 06:39:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fabRh-0005o6-Hi for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Jul 2018 06:39:21 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fabRh-0005ns-99 for pgsql-hackers@lists.postgresql.org; Wed, 04 Jul 2018 06:39:21 +0000 Received: from tama50.ecl.ntt.co.jp ([129.60.39.147]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fabRX-00028S-9t for pgsql-hackers@lists.postgresql.org; Wed, 04 Jul 2018 06:39:20 +0000 Received: from vc1.ecl.ntt.co.jp (vc1.ecl.ntt.co.jp [129.60.86.153]) by tama50.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id w646d2AZ021349; Wed, 4 Jul 2018 15:39:02 +0900 Received: from vc1.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc1.ecl.ntt.co.jp (Postfix) with ESMTP id 12261EA8851; Wed, 4 Jul 2018 15:39:02 +0900 (JST) Received: from jcms-pop21.ecl.ntt.co.jp (jcms-pop21.ecl.ntt.co.jp [129.60.87.134]) by vc1.ecl.ntt.co.jp (Postfix) with ESMTP id 07349EA884E; Wed, 4 Jul 2018 15:39:02 +0900 (JST) Received: from [127.0.0.1] (unknown [129.60.241.61]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id F221D4001D2; Wed, 4 Jul 2018 15:39:01 +0900 (JST) From: Amit Langote Subject: Re: why partition pruning doesn't work? References: <22805.1528386192@sss.pgh.pa.us> <21787.1528428171@sss.pgh.pa.us> <17850.1528755844@sss.pgh.pa.us> <19365.1528820758@sss.pgh.pa.us> <30981.1528822481@sss.pgh.pa.us> <637.1528863347@sss.pgh.pa.us> <28597.1528900759@sss.pgh.pa.us> <27099.1528987211@sss.pgh.pa.us> <56f1556c-6d6e-aaf8-de4f-a790a1efa5a3@l! ab.ntt.co.jp> <29987.1529341511@sss.pgh.pa.us> Message-ID: Date: Wed, 4 Jul 2018 15:38:45 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <29987.1529341511@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="------------8F9327DB7B2396205318CF04" Content-Language: en-US X-CC-Mail-RelayStamp: 1 To: Tom Lane Cc: Robert Haas , David Rowley , Dmitry Dolgov <9erthalion6@gmail.com>, Jeff Janes , Ashutosh Bapat , Pavel Stehule , PostgreSQL Hackers X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------8F9327DB7B2396205318CF04 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 2018/06/19 2:05, Tom Lane wrote: > Amit Langote writes: >> [ 0001-Open-partitioned-tables-during-Append-initialization.patch ] > > I took a look at this. While I'm in agreement with the general idea of > holding open the partitioned relations' relcache entries throughout the > query, I do not like anything about this patch: Thanks for taking a look at it and sorry about the delay in replying. > * It seems to be outright broken for the case that any of the partitioned > relations are listed in nonleafResultRelations. If we're going to do it > like this, we have to open every one of the partrels regardless of that. Yes, that was indeed wrong. > (I wonder whether we couldn't lose PlannedStmt.nonleafResultRelations > altogether, in favor of merging the related code in InitPlan with this. Hmm, PlannedStmt.nonleafResultRelations exists for the same reason as why PlannedStmt.resultRelations does, that is, /* * initialize result relation stuff, and open/lock the result rels. * * We must do this before initializing the plan tree, else we might try to * do a lock upgrade if a result rel is also a source rel. */ nonleafResultRelations contains members of partitioned_rels lists of all ModifyTable nodes contained in a plan. > That existing code is already a mighty ugly wart, and this patch makes > it worse by adding new, related warts elsewhere.) I just realized that there is a thinko in the following piece of code in ExecLockNonLeafAppendTables /* If this is a result relation, already locked in InitPlan */ foreach(l, stmt->nonleafResultRelations) { if (rti == lfirst_int(l)) { is_result_rel = true; break; } } It should actually be: /* If this is a result relation, already locked in InitPlan */ foreach(l, stmt->nonleafResultRelations) { Index nonleaf_rti = lfirst_int(l); Oid nonleaf_relid = getrelid(nonleaf_rti, estate->es_range_table); if (relid == nonleaf_relid) { is_result_rel = true; break; } } RT indexes in, say, Append.partitioned_rels, are distinct from those in PlannedStmt.nonleafResultRelations, so the existing test never succeeds, as also evident from the coverage report: https://coverage.postgresql.org/src/backend/executor/execUtils.c.gcov.html#864 I'm wondering if we couldn't just get rid of this code. If an input partitioned tables is indeed also a result relation, then we would've locked it in InitPlan with RowExclusiveLock and heap_opening it with a weaker lock (RowShare/AccessShare) wouldn't hurt. > * You've got *far* too much intimate knowledge of the possible callers > in ExecOpenAppendPartitionedTables. > > Personally, what I would have this function do is return a List of > the opened Relation pointers, and add a matching function to run through > such a List and close the entries again, and make the callers responsible > for stashing the List pointer in an appropriate field in their planstate. OK, I rewrote it to work that way. > Or maybe what we should do is drop ExecLockNonLeafAppendTables/ > ExecOpenAppendPartitionedTables entirely and teach InitPlan to do it. Hmm, for InitPlan to do what ExecOpenAppendPartitionedTables does, we'd have to have all the partitioned tables (contained in partitioned_rels fields of all Append/MergeAppend/ModifyTable nodes of a plan) also listed in a global list like rootResultRelations and nonleafResultRelations of PlannedStmt. Attached updated patch. Thanks, Amit --------------8F9327DB7B2396205318CF04 Content-Type: text/plain; charset=UTF-8; name="v2-0001-Fix-opening-closing-of-partitioned-tables-in-Appe.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v2-0001-Fix-opening-closing-of-partitioned-tables-in-Appe.pa"; filename*1="tch" RnJvbSAwZmQ5M2IwYjIxMDhkNGQxMmY0ODNiOTZhYWIyYzI1YzEyMDE3M2NiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogVGh1LCAxNCBKdW4gMjAxOCAxNDo1MDoyMiArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djJdIEZpeCBvcGVuaW5nL2Nsb3Npbmcgb2YgcGFydGl0aW9uZWQgdGFibGVzIGluIEFwcGVu ZCBwbGFucwoKLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMgICB8 ICA0OSArKysrLS0tLS0tLS0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1V0aWxzLmMg ICAgICAgfCAxMTQgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMgICAgICB8ICAyNiArKysrLS0tLQogc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMgfCAgMTEgKystLQogc3JjL2luY2x1 ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oICAgfCAgIDQgKy0KIHNyYy9pbmNsdWRlL2V4 ZWN1dG9yL2V4ZWN1dG9yLmggICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9ub2Rlcy9l eGVjbm9kZXMuaCAgICAgICAgICB8ICAgNCArKwogNyBmaWxlcyBjaGFuZ2VkLCAxMDAgaW5z ZXJ0aW9ucygrKSwgMTEyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNQ YXJ0aXRpb24uYwppbmRleCA3YTQ2NjVjYzRlLi5iOWJjMTU3YmZhIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjUGFydGl0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5jCkBAIC0xMzk5LDEzICsxMzk5LDE5IEBAIGFkanVz dF9wYXJ0aXRpb25fdGxpc3QoTGlzdCAqdGxpc3QsIFR1cGxlQ29udmVyc2lvbk1hcCAqbWFw KQogICogUGFydGl0aW9uUHJ1bmluZ0RhdGEgZm9yIGVhY2ggaXRlbSBpbiB0aGF0IExpc3Qu ICBUaGlzIGRhdGEgY2FuIGJlIHJlLXVzZWQKICAqIGVhY2ggdGltZSB3ZSByZS1ldmFsdWF0 ZSB3aGljaCBwYXJ0aXRpb25zIG1hdGNoIHRoZSBwcnVuaW5nIHN0ZXBzIHByb3ZpZGVkCiAg KiBpbiBlYWNoIFBhcnRpdGlvblBydW5lSW5mby4KKyAqCisgKiAncGFydGl0aW9uZWRfcmVs cycgaXMgYSBMaXN0IG9mIHNhbWUgbnVtYmVyIG9mIGVsZW1lbnRzIGFzIHRoZXJlIGFyZSBp bgorICogJ3BhcnRpdGlvbnBydW5laW5mbycgY29udGFpbmluZyB0aGUgUmVsYXRpb24gcG9p bnRlcnMgb2YgY29ycmVzcG9uZGluZworICogcGFydGl0aW9uZWQgdGFibGVzLgogICovCiBQ YXJ0aXRpb25QcnVuZVN0YXRlICoKLUV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBs YW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICpwYXJ0aXRpb25wcnVuZWluZm8pCitFeGVjQ3Jl YXRlUGFydGl0aW9uUHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgTGlzdCAqcGFy dGl0aW9ucHJ1bmVpbmZvLAorCQkJCQkJCSAgTGlzdCAqcGFydGl0aW9uZWRfcmVscykKIHsK IAlQYXJ0aXRpb25QcnVuZVN0YXRlICpwcnVuZXN0YXRlOwogCVBhcnRpdGlvblBydW5pbmdE YXRhICpwcnVuZWRhdGE7Ci0JTGlzdENlbGwgICAqbGM7CisJTGlzdENlbGwgICAqbGMxLAor CQkJICAgKmxjMjsKIAlpbnQJCQlpOwogCiAJQXNzZXJ0KHBhcnRpdGlvbnBydW5laW5mbyAh PSBOSUwpOwpAQCAtMTQzNSw5ICsxNDQxLDEwIEBAIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVu ZVN0YXRlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICpwYXJ0aXRpb25wcnVuZWluZm8p CiAJCQkJCQkJICBBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKIAogCWkgPSAwOwotCWZvcmVh Y2gobGMsIHBhcnRpdGlvbnBydW5laW5mbykKKwlmb3Jib3RoKGxjMSwgcGFydGl0aW9ucHJ1 bmVpbmZvLCBsYzIsIHBhcnRpdGlvbmVkX3JlbHMpCiAJewotCQlQYXJ0aXRpb25QcnVuZUlu Zm8gKnBpbmZvID0gY2FzdE5vZGUoUGFydGl0aW9uUHJ1bmVJbmZvLCBsZmlyc3QobGMpKTsK KwkJUGFydGl0aW9uUHJ1bmVJbmZvICpwaW5mbyA9IGNhc3ROb2RlKFBhcnRpdGlvblBydW5l SW5mbywgbGZpcnN0KGxjMSkpOworCQlSZWxhdGlvbglyZWwgPSBsZmlyc3QobGMyKTsKIAkJ UGFydGl0aW9uUHJ1bmluZ0RhdGEgKnBwcnVuZSA9ICZwcnVuZWRhdGFbaV07CiAJCVBhcnRp dGlvblBydW5lQ29udGV4dCAqY29udGV4dCA9ICZwcHJ1bmUtPmNvbnRleHQ7CiAJCVBhcnRp dGlvbkRlc2MgcGFydGRlc2M7CkBAIC0xNDYwLDE3ICsxNDY3LDkgQEAgRXhlY0NyZWF0ZVBh cnRpdGlvblBydW5lU3RhdGUoUGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKnBhcnRpdGlv bnBydW5laW5mbykKIAkJLyogcHJlc2VudF9wYXJ0cyBpcyBhbHNvIHN1YmplY3QgdG8gbGF0 ZXIgbW9kaWZpY2F0aW9uICovCiAJCXBwcnVuZS0+cHJlc2VudF9wYXJ0cyA9IGJtc19jb3B5 KHBpbmZvLT5wcmVzZW50X3BhcnRzKTsKIAotCQkvKgotCQkgKiBXZSBuZWVkIHRvIGhvbGQg YSBwaW4gb24gdGhlIHBhcnRpdGlvbmVkIHRhYmxlJ3MgcmVsY2FjaGUgZW50cnkgc28KLQkJ ICogdGhhdCB3ZSBjYW4gcmVseSBvbiBpdHMgY29waWVzIG9mIHRoZSB0YWJsZSdzIHBhcnRp dGlvbiBrZXkgYW5kCi0JCSAqIHBhcnRpdGlvbiBkZXNjcmlwdG9yLiAgV2UgbmVlZCBub3Qg Z2V0IGEgbG9jayB0aG91Z2g7IG9uZSBzaG91bGQKLQkJICogaGF2ZSBiZWVuIGFjcXVpcmVk IGFscmVhZHkgYnkgSW5pdFBsYW4gb3IKLQkJICogRXhlY0xvY2tOb25MZWFmQXBwZW5kVGFi bGVzLgotCQkgKi8KLQkJY29udGV4dC0+cGFydHJlbCA9IHJlbGF0aW9uX29wZW4ocGluZm8t PnJlbG9pZCwgTm9Mb2NrKTsKLQotCQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25L ZXkoY29udGV4dC0+cGFydHJlbCk7Ci0JCXBhcnRkZXNjID0gUmVsYXRpb25HZXRQYXJ0aXRp b25EZXNjKGNvbnRleHQtPnBhcnRyZWwpOworCQlBc3NlcnQoUmVsYXRpb25HZXRSZWxpZChy ZWwpID09IHBpbmZvLT5yZWxvaWQpOworCQlwYXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRp b25LZXkocmVsKTsKKwkJcGFydGRlc2MgPSBSZWxhdGlvbkdldFBhcnRpdGlvbkRlc2MocmVs KTsKIAkJbl9zdGVwcyA9IGxpc3RfbGVuZ3RoKHBpbmZvLT5wcnVuaW5nX3N0ZXBzKTsKIAog CQljb250ZXh0LT5zdHJhdGVneSA9IHBhcnRrZXktPnN0cmF0ZWd5OwpAQCAtMTU0NiwyNiAr MTU0NSw2IEBAIEV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKFBsYW5TdGF0ZSAqcGxh bnN0YXRlLCBMaXN0ICpwYXJ0aXRpb25wcnVuZWluZm8pCiB9CiAKIC8qCi0gKiBFeGVjRGVz dHJveVBhcnRpdGlvblBydW5lU3RhdGUKLSAqCQlSZWxlYXNlIHJlc291cmNlcyBhdCBwbGFu IHNodXRkb3duLgotICoKLSAqIFdlIGRvbid0IGJvdGhlciB0byBmcmVlIGFueSBtZW1vcnkg aGVyZSwgc2luY2UgdGhlIHdob2xlIGV4ZWN1dG9yIGNvbnRleHQKLSAqIHdpbGwgYmUgZ29p bmcgYXdheSBzaG9ydGx5LiAgV2UgZG8gbmVlZCB0byByZWxlYXNlIG91ciByZWxjYWNoZSBw aW5zLgotICovCi12b2lkCi1FeGVjRGVzdHJveVBhcnRpdGlvblBydW5lU3RhdGUoUGFydGl0 aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSkKLXsKLQlpbnQJCQlpOwotCi0JZm9yIChpID0g MDsgaSA8IHBydW5lc3RhdGUtPm51bV9wYXJ0cHJ1bmVkYXRhOyBpKyspCi0JewotCQlQYXJ0 aXRpb25QcnVuaW5nRGF0YSAqcHBydW5lID0gJnBydW5lc3RhdGUtPnBhcnRwcnVuZWRhdGFb aV07Ci0KLQkJcmVsYXRpb25fY2xvc2UocHBydW5lLT5jb250ZXh0LnBhcnRyZWwsIE5vTG9j ayk7Ci0JfQotfQotCi0vKgogICogRXhlY0ZpbmRJbml0aWFsTWF0Y2hpbmdTdWJQbGFucwog ICoJCUlkZW50aWZ5IHRoZSBzZXQgb2Ygc3VicGxhbnMgdGhhdCBjYW5ub3QgYmUgZWxpbWlu YXRlZCBieSBpbml0aWFsCiAgKgkJcHJ1bmluZyAoZGlzcmVnYXJkaW5nIGFueSBwcnVuaW5n IGNvbnN0cmFpbnRzIGludm9sdmluZyBQQVJBTV9FWEVDCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9leGVjVXRpbHMuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNV dGlscy5jCmluZGV4IGI5NjNjYWU3MzAuLmY5MzZmOGMzZGEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL2V4ZWNVdGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNVdGlscy5jCkBAIC03MDQsNiArNzA0LDY1IEBAIEV4ZWNDbG9zZVNjYW5SZWxhdGlv bihSZWxhdGlvbiBzY2FucmVsKQogfQogCiAvKgorICogRXhlY09wZW5BcHBlbmRQYXJ0aXRp b25lZFRhYmxlcworICoKKyAqIE9wZW5zIGFuZC9vciBsb2NrcywgaWYgbmVjZXNzYXJ5LCB0 aGUgdGFibGVzIGluZGljYXRlZCBieSB0aGUgUlQgaW5kZXhlcworICogY29udGFpbmVkIGlu IHRoZSBwYXJ0aXRpb25lZF9yZWxzIGxpc3Qgb2YgYSBnaXZlbiBBcHBlbmQgb3IgTWVyZ2VB cHBlbmQKKyAqIG5vZGUuICBUaGVzZSBhcmUgdGhlIG5vbi1sZWFmIHRhYmxlcyBpbiB0aGUg cGFydGl0aW9uIHRyZWUgY29udHJvbGxlZCBieQorICogdGhlIG5vZGUuCisgKi8KK0xpc3Qg KgorRXhlY09wZW5BcHBlbmRQYXJ0aXRpb25lZFRhYmxlcyhMaXN0ICpwYXJ0aXRpb25lZF9y ZWxzLCBFU3RhdGUgKmVzdGF0ZSkKK3sKKwlQbGFubmVkU3RtdCAqc3RtdCA9IGVzdGF0ZS0+ ZXNfcGxhbm5lZHN0bXQ7CisJTGlzdENlbGwgICAqbGM7CisJTGlzdAkgICAqcmVzdWx0ID0g TklMOworCisJQXNzZXJ0KHBhcnRpdGlvbmVkX3JlbHMgIT0gTklMKTsKKworCWZvcmVhY2go bGMsIHBhcnRpdGlvbmVkX3JlbHMpCisJeworCQlMaXN0Q2VsbCAgICpsOworCQlJbmRleAkJ cnRpID0gbGZpcnN0X2ludChsYyk7CisJCU9pZAkJCXJlbGlkID0gZ2V0cmVsaWQocnRpLCBl c3RhdGUtPmVzX3JhbmdlX3RhYmxlKTsKKwkJaW50CQkJbG9ja21vZGUgPSBBY2Nlc3NTaGFy ZUxvY2s7CisJCVBsYW5Sb3dNYXJrICpyYyA9IE5VTEw7CisKKwkJLyogQ2hlY2sgaWYgdGhl cmUgaXMgYSBSb3dNYXJrIHRoYXQgcmVxdWlyZXMgdGFraW5nIGEgUm93U2hhcmVMb2NrLiAq LworCisJCWZvcmVhY2gobCwgc3RtdC0+cm93TWFya3MpCisJCXsKKwkJCWlmICgoKFBsYW5S b3dNYXJrICopIGxmaXJzdChsKSktPnJ0aSA9PSBydGkpCisJCQl7CisJCQkJcmMgPSBsZmly c3QobCk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAocmMgJiYgUm93TWFya1Jl cXVpcmVzUm93U2hhcmVMb2NrKHJjLT5tYXJrVHlwZSkpCisJCQlsb2NrbW9kZSA9IFJvd1No YXJlTG9jazsKKworCQlyZXN1bHQgPSBsYXBwZW5kKHJlc3VsdCwgaGVhcF9vcGVuKHJlbGlk LCBsb2NrbW9kZSkpOworCX0KKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qIENsb3NlIGVh Y2ggUmVsYXRpb24gaW4gdGhlIGlucHV0IGxpc3QuICovCit2b2lkCitFeGVjQ2xvc2VBcHBl bmRQYXJ0aXRpb25lZFRhYmxlcyhMaXN0ICpwYXJ0aXRpb25lZF9yZWxzKQoreworCUxpc3RD ZWxsICpsYzsKKworCS8qCisJICogQ2xvc2UgcGFydGl0aW9uZWQgcmVscyB0aGF0IHdlIG1h eSBoYXZlIG9wZW5lZCBmb3IgcGFydGl0aW9uCisJICogcHJ1bmluZy4KKwkgKi8KKwlmb3Jl YWNoKGxjLCBwYXJ0aXRpb25lZF9yZWxzKQorCQloZWFwX2Nsb3NlKGxmaXJzdChsYyksIE5v TG9jayk7Cit9CisKKy8qCiAgKiBVcGRhdGVDaGFuZ2VkUGFyYW1TZXQKICAqCQlBZGQgY2hh bmdlZCBwYXJhbWV0ZXJzIHRvIGEgcGxhbiBub2RlJ3MgY2hnUGFyYW0gc2V0CiAgKi8KQEAg LTg1Niw2MSArOTE1LDYgQEAgU2h1dGRvd25FeHByQ29udGV4dChFeHByQ29udGV4dCAqZWNv bnRleHQsIGJvb2wgaXNDb21taXQpCiB9CiAKIC8qCi0gKiBFeGVjTG9ja05vbkxlYWZBcHBl bmRUYWJsZXMKLSAqCi0gKiBMb2NrcywgaWYgbmVjZXNzYXJ5LCB0aGUgdGFibGVzIGluZGlj YXRlZCBieSB0aGUgUlQgaW5kZXhlcyBjb250YWluZWQgaW4KLSAqIHRoZSBwYXJ0aXRpb25l ZF9yZWxzIGxpc3QuICBUaGVzZSBhcmUgdGhlIG5vbi1sZWFmIHRhYmxlcyBpbiB0aGUgcGFy dGl0aW9uCi0gKiB0cmVlIGNvbnRyb2xsZWQgYnkgYSBnaXZlbiBBcHBlbmQgb3IgTWVyZ2VB cHBlbmQgbm9kZS4KLSAqLwotdm9pZAotRXhlY0xvY2tOb25MZWFmQXBwZW5kVGFibGVzKExp c3QgKnBhcnRpdGlvbmVkX3JlbHMsIEVTdGF0ZSAqZXN0YXRlKQotewotCVBsYW5uZWRTdG10 ICpzdG10ID0gZXN0YXRlLT5lc19wbGFubmVkc3RtdDsKLQlMaXN0Q2VsbCAgICpsYzsKLQot CWZvcmVhY2gobGMsIHBhcnRpdGlvbmVkX3JlbHMpCi0JewotCQlMaXN0Q2VsbCAgICpsOwot CQlJbmRleAkJcnRpID0gbGZpcnN0X2ludChsYyk7Ci0JCWJvb2wJCWlzX3Jlc3VsdF9yZWwg PSBmYWxzZTsKLQkJT2lkCQkJcmVsaWQgPSBnZXRyZWxpZChydGksIGVzdGF0ZS0+ZXNfcmFu Z2VfdGFibGUpOwotCi0JCS8qIElmIHRoaXMgaXMgYSByZXN1bHQgcmVsYXRpb24sIGFscmVh ZHkgbG9ja2VkIGluIEluaXRQbGFuICovCi0JCWZvcmVhY2gobCwgc3RtdC0+bm9ubGVhZlJl c3VsdFJlbGF0aW9ucykKLQkJewotCQkJaWYgKHJ0aSA9PSBsZmlyc3RfaW50KGwpKQotCQkJ ewotCQkJCWlzX3Jlc3VsdF9yZWwgPSB0cnVlOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0K LQkJLyoKLQkJICogTm90IGEgcmVzdWx0IHJlbGF0aW9uOyBjaGVjayBpZiB0aGVyZSBpcyBh IFJvd01hcmsgdGhhdCByZXF1aXJlcwotCQkgKiB0YWtpbmcgYSBSb3dTaGFyZUxvY2sgb24g dGhpcyByZWwuCi0JCSAqLwotCQlpZiAoIWlzX3Jlc3VsdF9yZWwpCi0JCXsKLQkJCVBsYW5S b3dNYXJrICpyYyA9IE5VTEw7Ci0KLQkJCWZvcmVhY2gobCwgc3RtdC0+cm93TWFya3MpCi0J CQl7Ci0JCQkJaWYgKCgoUGxhblJvd01hcmsgKikgbGZpcnN0KGwpKS0+cnRpID09IHJ0aSkK LQkJCQl7Ci0JCQkJCXJjID0gbGZpcnN0KGwpOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9 Ci0KLQkJCWlmIChyYyAmJiBSb3dNYXJrUmVxdWlyZXNSb3dTaGFyZUxvY2socmMtPm1hcmtU eXBlKSkKLQkJCQlMb2NrUmVsYXRpb25PaWQocmVsaWQsIFJvd1NoYXJlTG9jayk7Ci0JCQll bHNlCi0JCQkJTG9ja1JlbGF0aW9uT2lkKHJlbGlkLCBBY2Nlc3NTaGFyZUxvY2spOwotCQl9 Ci0JfQotfQotCi0vKgogICoJCUdldEF0dHJpYnV0ZUJ5TmFtZQogICoJCUdldEF0dHJpYnV0 ZUJ5TnVtCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jCmluZGV4IDVjZTRmYjQz ZTEuLjc3Mjg1YWYxOTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVB cHBlbmQuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQXBwZW5kLmMKQEAgLTEx MywxOCArMTEzLDE3IEBAIEV4ZWNJbml0QXBwZW5kKEFwcGVuZCAqbm9kZSwgRVN0YXRlICpl c3RhdGUsIGludCBlZmxhZ3MpCiAJQXNzZXJ0KCEoZWZsYWdzICYgRVhFQ19GTEFHX01BUksp KTsKIAogCS8qCi0JICogTG9jayB0aGUgbm9uLWxlYWYgdGFibGVzIGluIHRoZSBwYXJ0aXRp b24gdHJlZSBjb250cm9sbGVkIGJ5IHRoaXMgbm9kZS4KLQkgKiBJdCdzIGEgbm8tb3AgZm9y IG5vbi1wYXJ0aXRpb25lZCBwYXJlbnQgdGFibGVzLgotCSAqLwotCUV4ZWNMb2NrTm9uTGVh ZkFwcGVuZFRhYmxlcyhub2RlLT5wYXJ0aXRpb25lZF9yZWxzLCBlc3RhdGUpOwotCi0JLyoK IAkgKiBjcmVhdGUgbmV3IEFwcGVuZFN0YXRlIGZvciBvdXIgYXBwZW5kIG5vZGUKIAkgKi8K IAlhcHBlbmRzdGF0ZS0+cHMucGxhbiA9IChQbGFuICopIG5vZGU7CiAJYXBwZW5kc3RhdGUt PnBzLnN0YXRlID0gZXN0YXRlOwogCWFwcGVuZHN0YXRlLT5wcy5FeGVjUHJvY05vZGUgPSBF eGVjQXBwZW5kOwogCisJLyogTG9jayBhbmQgb3BlbiAoaWYgbmVlZGVkKSB0aGUgcGFydGl0 aW9uZWQgdGFibGVzLiAqLworCWlmIChub2RlLT5wYXJ0aXRpb25lZF9yZWxzICE9IE5JTCkK KwkJYXBwZW5kc3RhdGUtPmFzX3BhcnRpdGlvbmVkX3JlbHMgPQorCQkJRXhlY09wZW5BcHBl bmRQYXJ0aXRpb25lZFRhYmxlcyhub2RlLT5wYXJ0aXRpb25lZF9yZWxzLCBlc3RhdGUpOwor CiAJLyogTGV0IGNob29zZV9uZXh0X3N1YnBsYW5fKiBmdW5jdGlvbiBoYW5kbGUgc2V0dGlu ZyB0aGUgZmlyc3Qgc3VicGxhbiAqLwogCWFwcGVuZHN0YXRlLT5hc193aGljaHBsYW4gPSBJ TlZBTElEX1NVQlBMQU5fSU5ERVg7CiAKQEAgLTEzNyw4ICsxMzYsMTEgQEAgRXhlY0luaXRB cHBlbmQoQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykKIAkJRXhl Y0Fzc2lnbkV4cHJDb250ZXh0KGVzdGF0ZSwgJmFwcGVuZHN0YXRlLT5wcyk7CiAKIAkJLyog Q3JlYXRlIHRoZSB3b3JraW5nIGRhdGEgc3RydWN0dXJlIGZvciBwcnVuaW5nLiAqLwotCQlw cnVuZXN0YXRlID0gRXhlY0NyZWF0ZVBhcnRpdGlvblBydW5lU3RhdGUoJmFwcGVuZHN0YXRl LT5wcywKLQkJCQkJCQkJCQkJCSAgIG5vZGUtPnBhcnRfcHJ1bmVfaW5mb3MpOworCisJCXBy dW5lc3RhdGUgPQorCQkJCUV4ZWNDcmVhdGVQYXJ0aXRpb25QcnVuZVN0YXRlKCZhcHBlbmRz dGF0ZS0+cHMsCisJCQkJCQkJCQkJCSAgbm9kZS0+cGFydF9wcnVuZV9pbmZvcywKKwkJCQkJ CQkJCQkJICBhcHBlbmRzdGF0ZS0+YXNfcGFydGl0aW9uZWRfcmVscyk7CiAJCWFwcGVuZHN0 YXRlLT5hc19wcnVuZV9zdGF0ZSA9IHBydW5lc3RhdGU7CiAKIAkJLyogUGVyZm9ybSBhbiBp bml0aWFsIHBhcnRpdGlvbiBwcnVuZSwgaWYgcmVxdWlyZWQuICovCkBAIC0zMjUsMTcgKzMy NywxMyBAQCBFeGVjRW5kQXBwZW5kKEFwcGVuZFN0YXRlICpub2RlKQogCWFwcGVuZHBsYW5z ID0gbm9kZS0+YXBwZW5kcGxhbnM7CiAJbnBsYW5zID0gbm9kZS0+YXNfbnBsYW5zOwogCisJ RXhlY0Nsb3NlQXBwZW5kUGFydGl0aW9uZWRUYWJsZXMobm9kZS0+YXNfcGFydGl0aW9uZWRf cmVscyk7CisKIAkvKgogCSAqIHNodXQgZG93biBlYWNoIG9mIHRoZSBzdWJzY2FucwogCSAq LwogCWZvciAoaSA9IDA7IGkgPCBucGxhbnM7IGkrKykKIAkJRXhlY0VuZE5vZGUoYXBwZW5k cGxhbnNbaV0pOwotCi0JLyoKLQkgKiByZWxlYXNlIGFueSByZXNvdXJjZXMgYXNzb2NpYXRl ZCB3aXRoIHJ1bi10aW1lIHBydW5pbmcKLQkgKi8KLQlpZiAobm9kZS0+YXNfcHJ1bmVfc3Rh dGUpCi0JCUV4ZWNEZXN0cm95UGFydGl0aW9uUHJ1bmVTdGF0ZShub2RlLT5hc19wcnVuZV9z dGF0ZSk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25v ZGVNZXJnZUFwcGVuZC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5k LmMKaW5kZXggMTE4ZjRlZjA3ZC4uOGRlOTU2YjEyOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZU1lcmdlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1lcmdlQXBwZW5kLmMKQEAgLTcyLDExICs3MiwxMCBAQCBFeGVjSW5pdE1lcmdl QXBwZW5kKE1lcmdlQXBwZW5kICpub2RlLCBFU3RhdGUgKmVzdGF0ZSwgaW50IGVmbGFncykK IAkvKiBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgZmxhZ3MgKi8KIAlBc3NlcnQoIShlZmxhZ3Mg JiAoRVhFQ19GTEFHX0JBQ0tXQVJEIHwgRVhFQ19GTEFHX01BUkspKSk7CiAKLQkvKgotCSAq IExvY2sgdGhlIG5vbi1sZWFmIHRhYmxlcyBpbiB0aGUgcGFydGl0aW9uIHRyZWUgY29udHJv bGxlZCBieSB0aGlzIG5vZGUuCi0JICogSXQncyBhIG5vLW9wIGZvciBub24tcGFydGl0aW9u ZWQgcGFyZW50IHRhYmxlcy4KLQkgKi8KLQlFeGVjTG9ja05vbkxlYWZBcHBlbmRUYWJsZXMo bm9kZS0+cGFydGl0aW9uZWRfcmVscywgZXN0YXRlKTsKKwkvKiBMb2NrIGFuZCBvcGVuIChp ZiBuZWVkZWQpIHRoZSBwYXJ0aXRpb25lZCB0YWJsZXMuICovCisJaWYgKG5vZGUtPnBhcnRp dGlvbmVkX3JlbHMgIT0gTklMKQorCQltZXJnZXN0YXRlLT5tc19wYXJ0aXRpb25lZF9yZWxz ID0KKwkJCUV4ZWNPcGVuQXBwZW5kUGFydGl0aW9uZWRUYWJsZXMobm9kZS0+cGFydGl0aW9u ZWRfcmVscywgZXN0YXRlKTsKIAogCS8qCiAJICogU2V0IHVwIGVtcHR5IHZlY3RvciBvZiBz dWJwbGFuIHN0YXRlcwpAQCAtMjgzLDYgKzI4Miw4IEBAIEV4ZWNFbmRNZXJnZUFwcGVuZChN ZXJnZUFwcGVuZFN0YXRlICpub2RlKQogCW1lcmdlcGxhbnMgPSBub2RlLT5tZXJnZXBsYW5z OwogCW5wbGFucyA9IG5vZGUtPm1zX25wbGFuczsKIAorCUV4ZWNDbG9zZUFwcGVuZFBhcnRp dGlvbmVkVGFibGVzKG5vZGUtPm1zX3BhcnRpdGlvbmVkX3JlbHMpOworCiAJLyoKIAkgKiBz aHV0IGRvd24gZWFjaCBvZiB0aGUgc3Vic2NhbnMKIAkgKi8KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2V4ZWN1dG9yL2V4ZWNQYXJ0aXRpb24uaCBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9y L2V4ZWNQYXJ0aXRpb24uaAppbmRleCA4NjJiZjY1MDYwLi43YjA3NDRhMmM5IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9leGVjUGFydGl0aW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3IvZXhlY1BhcnRpdGlvbi5oCkBAIC0yMDksOCArMjA5LDggQEAgZXh0 ZXJuIEhlYXBUdXBsZSBDb252ZXJ0UGFydGl0aW9uVHVwbGVTbG90KFR1cGxlQ29udmVyc2lv bk1hcCAqbWFwLAogZXh0ZXJuIHZvaWQgRXhlY0NsZWFudXBUdXBsZVJvdXRpbmcoTW9kaWZ5 VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJCQkJCVBhcnRpdGlvblR1cGxlUm91dGluZyAqcHJv dXRlKTsKIGV4dGVybiBQYXJ0aXRpb25QcnVuZVN0YXRlICpFeGVjQ3JlYXRlUGFydGl0aW9u UHJ1bmVTdGF0ZShQbGFuU3RhdGUgKnBsYW5zdGF0ZSwKLQkJCQkJCQkgIExpc3QgKnBhcnRp dGlvbnBydW5laW5mbyk7Ci1leHRlcm4gdm9pZCBFeGVjRGVzdHJveVBhcnRpdGlvblBydW5l U3RhdGUoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0ZSk7CisJCQkJCQkJICBMaXN0 ICpwYXJ0aXRpb25wcnVuZWluZm8sCisJCQkJCQkJICBMaXN0ICpwYXJ0aXRpb25lZF9yZWxz KTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5kTWF0Y2hpbmdTdWJQbGFucyhQYXJ0aXRp b25QcnVuZVN0YXRlICpwcnVuZXN0YXRlKTsKIGV4dGVybiBCaXRtYXBzZXQgKkV4ZWNGaW5k SW5pdGlhbE1hdGNoaW5nU3ViUGxhbnMoUGFydGl0aW9uUHJ1bmVTdGF0ZSAqcHJ1bmVzdGF0 ZSwKIAkJCQkJCQkJaW50IG5zdWJwbGFucyk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvZXhlY3V0b3IuaApp bmRleCBmODJiNTE2NjdmLi4zMDFlNGI0MDU5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9l eGVjdXRvci9leGVjdXRvci5oCisrKyBiL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL2V4ZWN1dG9y LmgKQEAgLTUyNCw3ICs1MjQsOSBAQCBleHRlcm4gdm9pZCBVbnJlZ2lzdGVyRXhwckNvbnRl eHRDYWxsYmFjayhFeHByQ29udGV4dCAqZWNvbnRleHQsCiAJCQkJCQkJICBFeHByQ29udGV4 dENhbGxiYWNrRnVuY3Rpb24gZnVuY3Rpb24sCiAJCQkJCQkJICBEYXR1bSBhcmcpOwogCi1l eHRlcm4gdm9pZCBFeGVjTG9ja05vbkxlYWZBcHBlbmRUYWJsZXMoTGlzdCAqcGFydGl0aW9u ZWRfcmVscywgRVN0YXRlICplc3RhdGUpOworZXh0ZXJuIExpc3QgKkV4ZWNPcGVuQXBwZW5k UGFydGl0aW9uZWRUYWJsZXMoTGlzdCAqcGFydGl0aW9uZWRfcmVscywKKwkJCQkJCQkJRVN0 YXRlICplc3RhdGUpOworZXh0ZXJuIHZvaWQgRXhlY0Nsb3NlQXBwZW5kUGFydGl0aW9uZWRU YWJsZXMoTGlzdCAqcGFydGl0aW9uZWRfcmVscyk7CiAKIGV4dGVybiBEYXR1bSBHZXRBdHRy aWJ1dGVCeU5hbWUoSGVhcFR1cGxlSGVhZGVyIHR1cGxlLCBjb25zdCBjaGFyICphdHRuYW1l LAogCQkJCSAgIGJvb2wgKmlzTnVsbCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IGRh N2Y1MmNhYjAuLjU1OTk2YjgwZDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4 ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC0xMDcz LDYgKzEwNzMsNyBAQCB0eXBlZGVmIHN0cnVjdCBNb2RpZnlUYWJsZVN0YXRlCiAgKgkJCQkJ CQllbGltaW5hdGVkIGZyb20gdGhlIHNjYW4sIG9yIE5VTEwgaWYgbm90IHBvc3NpYmxlLgog ICoJCXZhbGlkX3N1YnBsYW5zCQlmb3IgcnVudGltZSBwcnVuaW5nLCB2YWxpZCBhcHBlbmRw bGFucyBpbmRleGVzIHRvCiAgKgkJCQkJCQlzY2FuLgorICoJCXBhcnRpdGlvbmVkX3JlbHMJ UmVsYXRpb24gcG9pbnRlcnMgb2YgcGFydGl0aW9uZWQgdGFibGVzCiAgKiAtLS0tLS0tLS0t LS0tLS0tCiAgKi8KIApAQCAtMTA5NSw2ICsxMDk2LDcgQEAgc3RydWN0IEFwcGVuZFN0YXRl CiAJc3RydWN0IFBhcnRpdGlvblBydW5lU3RhdGUgKmFzX3BydW5lX3N0YXRlOwogCUJpdG1h cHNldCAgKmFzX3ZhbGlkX3N1YnBsYW5zOwogCWJvb2wJCSgqY2hvb3NlX25leHRfc3VicGxh bikgKEFwcGVuZFN0YXRlICopOworCUxpc3QJICAgKmFzX3BhcnRpdGlvbmVkX3JlbHM7CS8q IExpc3Qgb2YgUmVsYXRpb24gcG9pbnRlcnMgKi8KIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0t LS0KQEAgLTExMDYsNiArMTEwOCw3IEBAIHN0cnVjdCBBcHBlbmRTdGF0ZQogICoJCXNsb3Rz CQkJY3VycmVudCBvdXRwdXQgdHVwbGUgb2YgZWFjaCBzdWJwbGFuCiAgKgkJaGVhcAkJCWhl YXAgb2YgYWN0aXZlIHR1cGxlcwogICoJCWluaXRpYWxpemVkCQl0cnVlIGlmIHdlIGhhdmUg ZmV0Y2hlZCBmaXJzdCB0dXBsZSBmcm9tIGVhY2ggc3VicGxhbgorICoJCXBhcnRpdGlvbmVk X3JlbHMJUmVsYXRpb24gcG9pbnRlcnMgb2YgcGFydGl0aW9uZWQgdGFibGVzCiAgKiAtLS0t LS0tLS0tLS0tLS0tCiAgKi8KIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kU3RhdGUKQEAg LTExMTgsNiArMTEyMSw3IEBAIHR5cGVkZWYgc3RydWN0IE1lcmdlQXBwZW5kU3RhdGUKIAlU dXBsZVRhYmxlU2xvdCAqKm1zX3Nsb3RzOwkvKiBhcnJheSBvZiBsZW5ndGggbXNfbnBsYW5z ICovCiAJc3RydWN0IGJpbmFyeWhlYXAgKm1zX2hlYXA7IC8qIGJpbmFyeSBoZWFwIG9mIHNs b3QgaW5kaWNlcyAqLwogCWJvb2wJCW1zX2luaXRpYWxpemVkOyAvKiBhcmUgc3VicGxhbnMg c3RhcnRlZD8gKi8KKwlMaXN0CSAgICptc19wYXJ0aXRpb25lZF9yZWxzOwkvKiBMaXN0IG9m IFJlbGF0aW9uIHBvaW50ZXJzICovCiB9IE1lcmdlQXBwZW5kU3RhdGU7CiAKIC8qIC0tLS0t LS0tLS0tLS0tLS0KLS0gCjIuMTEuMAoK --------------8F9327DB7B2396205318CF04--