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.96) (envelope-from ) id 1vfbtP-003MS7-0U for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Jan 2026 10:44:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vfbtM-004Ge9-3B for pgsql-hackers@arkaria.postgresql.org; Tue, 13 Jan 2026 10:44:53 +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.96) (envelope-from ) id 1vfbtM-004Gdv-1S for pgsql-hackers@lists.postgresql.org; Tue, 13 Jan 2026 10:44:52 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vfbtK-000CS9-11 for pgsql-hackers@lists.postgresql.org; Tue, 13 Jan 2026 10:44:52 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1768301089; bh=d8E0TlK/JilAG1QFqKMt4NLs0Arjp+TFr7RLqNDKrZo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:Message-ID:From; b=1dDtSL/VeOZUOsvIb0Y58Bdgp9d1++xDm4ls28JFod26uhLFOFPrs6lyGksaZdGzP trjNaboTwrQVCSd3iN7t+uWoP7Xc7xDtm3bi9/WBOY49UX8zDnt4fmI6MvW3N/AorW FDO+Rs1OXjb2ns5YVGkgxM3yUfeJ8B4u25ndMofHr7mrJO2t+nJ8D5cGPqateR2pPq tE8/tUh4QI6JRGKV2SYBsbDoQMgpu5icx1EztloJXAP7NOGj5Yswj0cHbWrYPB4ExA AD3fuFCxbCe2uaOhokW3oFdusuYLbWEt0gHfLuup8g6mb4MXbQE74fInzqf7L9CDRF ZbPl3FyUi9P8g== Received: from mail.postgrespro.ru (webmail-slave-mstn.l.postgrespro.ru [192.168.2.28]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: a.pyhalov@postgrespro.ru) by mail.postgrespro.ru (Postfix/587) with ESMTPSA id CAE67606DF; Tue, 13 Jan 2026 13:44:48 +0300 (MSK) MIME-Version: 1.0 Date: Tue, 13 Jan 2026 13:44:48 +0300 From: Alexander Pyhalov To: Tomas Vondra Cc: PostgreSQL Hackers Subject: Re: Limit memory usage by postgres_fdw batches In-Reply-To: References: <2368cfef0e1c07d8e65767e477fed953@postgrespro.ru> <80f78762-e4d7-4d57-89eb-a99202ab1491@vondra.me> Message-ID: X-Sender: a.pyhalov@postgrespro.ru Content-Type: multipart/mixed; boundary="=_15aca88f6432cd71ef2db5ff356d687b" X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2026/01/13 08:51:00 #28111015 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=_15aca88f6432cd71ef2db5ff356d687b Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed Hi. I've looked at the third patch more and found some evident issues. 1) While using tuplestore we get too much garbage from tuple conversion, which was not cleared properly. Tried to fix it, but now we come to the second problem. 2) While receiving tuples we've already allocated memory in libpq, so it can be too late to do something. In simple examples I can see libpq result sets which have several GB size (and likely are not limited by anything). I've used the attached script to create some tables. select create_partitioned_rel('t1', 128, true, 1); select create_partitioned_rel('t2', 4, true, 100); insert into t1 select i, pg_read_binary_file('/some/100mb/file') from generate_series(1,128) i; insert into t2 select i, pg_read_binary_file('/some/100mb/file') from generate_series(1,128) i; And with simple queries like select sum(length(s)) from TABLE; we can see that backend can easily consume up to several GBs of RAM. For now I start thinking we need some form of FETCH, which stops fetching data based on batch size... -- Best regards, Alexander Pyhalov, Postgres Professional --=_15aca88f6432cd71ef2db5ff356d687b Content-Transfer-Encoding: base64 Content-Type: text/plain; name=create_test_example.sql Content-Disposition: attachment; filename=create_test_example.sql; size=2081 U0VMRUNUIGN1cnJlbnRfZGF0YWJhc2UoKSBBUyBjdXJyZW50X2RhdGFiYXNlLAogIGN1cnJlbnRf c2V0dGluZygncG9ydCcpIEFTIGN1cnJlbnRfcG9ydApcZ3NldAoKCkNSRUFURSBFWFRFTlNJT04g cG9zdGdyZXNfZmR3OwpDUkVBVEUgU0VSVkVSIGxvb3BiYWNrMSBGT1JFSUdOIERBVEEgV1JBUFBF UiBwb3N0Z3Jlc19mZHcKICAgICAgICBPUFRJT05TIChkYm5hbWUgOidjdXJyZW50X2RhdGFiYXNl JywgcG9ydCA6J2N1cnJlbnRfcG9ydCcsIGFzeW5jX2NhcGFibGUgJ29uJywgZmV0Y2hfc2l6ZSAn MScpOwpDUkVBVEUgU0VSVkVSIGxvb3BiYWNrMiBGT1JFSUdOIERBVEEgV1JBUFBFUiBwb3N0Z3Jl c19mZHcKICAgICAgICBPUFRJT05TIChkYm5hbWUgOidjdXJyZW50X2RhdGFiYXNlJywgcG9ydCA6 J2N1cnJlbnRfcG9ydCcsIGFzeW5jX2NhcGFibGUgJ29uJywgZmV0Y2hfc2l6ZSAnMScpOwpDUkVB VEUgU0VSVkVSIGxvb3BiYWNrMyBGT1JFSUdOIERBVEEgV1JBUFBFUiBwb3N0Z3Jlc19mZHcKICAg ICAgICBPUFRJT05TIChkYm5hbWUgOidjdXJyZW50X2RhdGFiYXNlJywgcG9ydCA6J2N1cnJlbnRf cG9ydCcsIGFzeW5jX2NhcGFibGUgJ29uJywgZmV0Y2hfc2l6ZSAnMScpOwpDUkVBVEUgU0VSVkVS IGxvb3BiYWNrNCBGT1JFSUdOIERBVEEgV1JBUFBFUiBwb3N0Z3Jlc19mZHcKICAgICAgICBPUFRJ T05TIChkYm5hbWUgOidjdXJyZW50X2RhdGFiYXNlJywgcG9ydCA6J2N1cnJlbnRfcG9ydCcsIGFz eW5jX2NhcGFibGUgJ29uJywgZmV0Y2hfc2l6ZSAnMScpOwpDUkVBVEUgVVNFUiBNQVBQSU5HIEZP UiBDVVJSRU5UX1VTRVIgU0VSVkVSIGxvb3BiYWNrMTsKQ1JFQVRFIFVTRVIgTUFQUElORyBGT1Ig Q1VSUkVOVF9VU0VSIFNFUlZFUiBsb29wYmFjazI7CkNSRUFURSBVU0VSIE1BUFBJTkcgRk9SIENV UlJFTlRfVVNFUiBTRVJWRVIgbG9vcGJhY2szOwpDUkVBVEUgVVNFUiBNQVBQSU5HIEZPUiBDVVJS RU5UX1VTRVIgU0VSVkVSIGxvb3BiYWNrNDsKCgpjcmVhdGUgb3IgcmVwbGFjZSBmdW5jdGlvbiBj cmVhdGVfcGFydGl0aW9uZWRfcmVsKHJlbG5hbWUgdGV4dCwgbnBhcnRzIGludCwgZm9yZWlnbl9w YXJ0cyBib29sLCBmZXRjaF9zaXplIGludCkgcmV0dXJucyB2b2lkIGFzICQkCmRlY2xhcmUgCmkg aW50OwpzcWwgdGV4dDsKcGFydF9uYW1lIHRleHQ7CmZkd19wYXJ0X25hbWUgdGV4dDsKYmVnaW4K ICAgICBleGVjdXRlIGZvcm1hdCgnY3JlYXRlIHRhYmxlICVJIChpIGludCwgcyBieXRlYSkgcGFy dGl0aW9uIGJ5IGhhc2goaSknLCByZWxuYW1lKTsKICAgICBmb3IgaSBpbiAwLi5ucGFydHMtMSBs b29wCiAgICAgICAgICBpZiBmb3JlaWduX3BhcnRzIHRoZW4KICAgICAgICAgICAgICAgcGFydF9u YW1lIDo9IGZvcm1hdCgnJXNfJXMnLCByZWxuYW1lLCBpKTsKICAgICAgICAgICAgICAgZmR3X3Bh cnRfbmFtZSA6PSBmb3JtYXQoJyVzXyVzX2ZkdycsIHJlbG5hbWUsIGkpOwogICAgICAgICAgICAg ICBleGVjdXRlIGZvcm1hdCgnY3JlYXRlIGZvcmVpZ24gdGFibGUgJUkgcGFydGl0aW9uIG9mICVJ IGZvciB2YWx1ZXMgd2l0aCAobW9kdWx1cyAlcywgcmVtYWluZGVyICVzKSBzZXJ2ZXIgbG9vcGJh Y2slcyBvcHRpb25zICh0YWJsZV9uYW1lICVMLCBmZXRjaF9zaXplICVMKScsIGZkd19wYXJ0X25h bWUsIHJlbG5hbWUsIG5wYXJ0cywgaSwgaSU0KzEsIHBhcnRfbmFtZSwgZmV0Y2hfc2l6ZSk7CiAg ICAgICAgICAgICAgIGV4ZWN1dGUgZm9ybWF0KCdjcmVhdGUgdGFibGUgJUkgKGkgaW50LCBzIGJ5 dGVhKScsIHBhcnRfbmFtZSk7ICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgICAgcGFydF9uYW1lIDo9IGZvcm1hdCgnJXNfJXMnLCByZWxuYW1lLCBpKTsK ICAgICAgICAgICAgICAgZXhlY3V0ZSBmb3JtYXQoJ2NyZWF0ZSB0YWJsZSAlSSBwYXJ0aXRpb24g b2YgJUkgZm9yIHZhbHVlcyB3aXRoIChtb2R1bHVzICVzLCByZW1haW5kZXIgJXMpJywgcGFydF9u YW1lLCByZWxuYW1lLCBucGFydHMsIGkpOwogICAgICAgICAgZW5kIGlmOwogICAgIGVuZCBsb29w OwplbmQgCiQkIGxhbmd1YWdlIHBscGdzcWw7Cgo= --=_15aca88f6432cd71ef2db5ff356d687b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0001-Limit-batch_size-for-foreign-insert-with-work_mem.patch Content-Disposition: attachment; filename=v3-0001-Limit-batch_size-for-foreign-insert-with-work_mem.patch; size=2755 RnJvbSA3ZWZjODhmZmI0ZDkwZTkzNWNhMWUxN2FjM2Q0Yzc1M2EyZGU0ZWYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUdWUsIDE2IERlYyAyMDI1IDE4OjQ2OjI3ICswMzAwClN1YmplY3Q6IFtQ QVRDSCAxLzNdIExpbWl0IGJhdGNoX3NpemUgZm9yIGZvcmVpZ24gaW5zZXJ0IHdpdGggd29ya19t ZW0KCk9wdGlvbiBiYXRjaF9zaXplIGNhbiBiZSBzZXQgb24gZm9yZWlnbiBzZXJ2ZXIgbGV2ZWwu IEl0IGNhbiBiZSB2ZXJ5IG9wdGltaXN0aWMKZXZlbiBmb3Igb25lIHRhYmxlIHdpdGggZGlmZmVy ZW50IHR1cGxlIGxlbmd0aHMuIFRvIHByZXZlbnQgbGFyZ2UgbWVtb3J5IHVzYWdlCmxpbWl0IGVm ZmVjdGl2ZSBiYXRjaCBzaXplIHdpdGggd29ya19tZW0uCi0tLQogc3JjL2JhY2tlbmQvZXhlY3V0 b3Ivbm9kZU1vZGlmeVRhYmxlLmMgfCAxNSArKysrKysrKysrKystLS0KIHNyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgIHwgIDEgKwogMiBmaWxlcyBjaGFuZ2VkLCAxMyBpbnNl cnRpb25zKCspLCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVNb2RpZnlUYWJsZS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRh YmxlLmMKaW5kZXggODc0YjcxZTY2MDguLmEyOGJlY2E2M2ZmIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYworKysgYi9zcmMvYmFja2VuZC9leGVjdXRv ci9ub2RlTW9kaWZ5VGFibGUuYwpAQCAtOTQzLDEyICs5NDMsMTggQEAgRXhlY0luc2VydChNb2Rp ZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNp emUgPiAxKQogCQl7CiAJCQlib29sCQlmbHVzaGVkID0gZmFsc2U7CisJCQlTaXplCQl0dXBsZV9s ZW47CisKKwkJCS8qIENvbXB1dGUgbGVuZ3RoIG9mIHRoZSBjdXJyZW50IHR1cGxlICovCisJCQlz bG90X2dldGFsbGF0dHJzKHNsb3QpOworCQkJdHVwbGVfbGVuID0gaGVhcF9jb21wdXRlX2RhdGFf c2l6ZShzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yLCBzbG90LT50dHNfdmFsdWVzLCBzbG90LT50 dHNfaXNudWxsKTsKIAogCQkJLyoKLQkJCSAqIFdoZW4gd2UndmUgcmVhY2hlZCB0aGUgZGVzaXJl ZCBiYXRjaCBzaXplLCBwZXJmb3JtIHRoZQotCQkJICogaW5zZXJ0aW9uLgorCQkJICogV2hlbiB3 ZSd2ZSByZWFjaGVkIHRoZSBkZXNpcmVkIGJhdGNoIHNpemUgb3IgZXhjZWVkZWQgd29ya19tZW0s CisJCQkgKiBwZXJmb3JtIHRoZSBpbnNlcnRpb24uCiAJCQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJ bmZvLT5yaV9OdW1TbG90cyA9PSByZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNpemUpCisJCQlpZiAo cmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHMgPT0gcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hTaXpl IHx8CisJCQkJKCh0dXBsZV9sZW4gKyByZXN1bHRSZWxJbmZvLT5yaV9CYXRjaE1lbW9yeVVzZWQg PiB3b3JrX21lbSAqIDEwMjQpICYmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1TbG90cyA+IDApKSkK IAkJCXsKIAkJCQlFeGVjQmF0Y2hJbnNlcnQobXRzdGF0ZSwgcmVzdWx0UmVsSW5mbywKIAkJCQkJ CQkJcmVzdWx0UmVsSW5mby0+cmlfU2xvdHMsCkBAIC0xMDE5LDYgKzEwMjUsOCBAQCBFeGVjSW5z ZXJ0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJICAgcmVzdWx0UmVsSW5m bykpOwogCiAJCQlyZXN1bHRSZWxJbmZvLT5yaV9OdW1TbG90cysrOworCQkJLyogQmF0Y2ggc2l6 ZSBjYW4gZ3JvdyB1cCB0byB0dXBsZSBsZW5ndGggZXZlbiBpZiBpdCBleGNlZWRzIHdvcmtfbWVt LiAqLworCQkJcmVzdWx0UmVsSW5mby0+cmlfQmF0Y2hNZW1vcnlVc2VkICs9IHR1cGxlX2xlbjsK IAogCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogCkBAIC0xNDE4LDYgKzE0 MjYsNyBAQCBFeGVjQmF0Y2hJbnNlcnQoTW9kaWZ5VGFibGVTdGF0ZSAqbXRzdGF0ZSwKIAkJRXhl Y0NsZWFyVHVwbGUocGxhblNsb3RzW2ldKTsKIAl9CiAJcmVzdWx0UmVsSW5mby0+cmlfTnVtU2xv dHMgPSAwOworCXJlc3VsdFJlbEluZm8tPnJpX0JhdGNoTWVtb3J5VXNlZCA9IDA7CiB9CiAKIC8q CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNsdWRl L25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDM5Njg0MjlmOTkxLi5iODJlYzkzODIyOCAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKQEAgLTU0Miw2ICs1NDIsNyBAQCB0eXBlZGVmIHN0cnVjdCBSZXN1bHRS ZWxJbmZvCiAJaW50CQkJcmlfTnVtU2xvdHM7CS8qIG51bWJlciBvZiBzbG90cyBpbiB0aGUgYXJy YXkgKi8KIAlpbnQJCQlyaV9OdW1TbG90c0luaXRpYWxpemVkOyAvKiBudW1iZXIgb2YgaW5pdGlh bGl6ZWQgc2xvdHMgKi8KIAlpbnQJCQlyaV9CYXRjaFNpemU7CS8qIG1heCBzbG90cyBpbnNlcnRl ZCBpbiBhIHNpbmdsZSBiYXRjaCAqLworCWludAkJCXJpX0JhdGNoTWVtb3J5VXNlZDsJLyogbWVt b3J5IHVzZWQgYnkgYmF0Y2ggKi8KIAlUdXBsZVRhYmxlU2xvdCAqKnJpX1Nsb3RzOwkvKiBpbnB1 dCB0dXBsZXMgZm9yIGJhdGNoIGluc2VydCAqLwogCVR1cGxlVGFibGVTbG90ICoqcmlfUGxhblNs b3RzOwogCi0tIAoyLjQzLjAKCg== --=_15aca88f6432cd71ef2db5ff356d687b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0002-Fall-back-to-foreign-insert-when-tuple-is-too-big.patch Content-Disposition: attachment; filename=v3-0002-Fall-back-to-foreign-insert-when-tuple-is-too-big.patch; size=10402 RnJvbSBmOWEyZWM0OGQ5MDdjMzcyNTlmYzY2NThhNmEwZWE1OTI1MTQzYTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUdWUsIDMwIERlYyAyMDI1IDEwOjM1OjIyICswMzAwClN1YmplY3Q6IFtQ QVRDSCAyLzNdIEZhbGwgYmFjayB0byBmb3JlaWduIGluc2VydCB3aGVuIHR1cGxlIGlzIHRvbyBi aWcKCldoZW4gdHVwbGUgaXMgbW9yZSB0aGVuIHdvcmtfbWVtLCB3ZSBkb24ndCBmb3JtIGJhdGNo LApidXQgZmFsbCB0aHJvdWdoIHRvIHVzdWFsIGZvcmVpZ24gaW5zZXJ0LiBUaGlzIG1lYW5zCnRo YXQgZXhlY3V0b3IgY2FuIGZvcm0gYmF0Y2gsIGluc2VydCBpdCBhbmQgZmluaXNoIHdpdGgKYSB1 c3VhbCBpbnNlcnQsIHNvIHRoZXJlIHdpbGwgYmUgbm8gcGVuZGluZyBiYXRjaCBpbnNlcnRzCnRv IHByb2Nlc3MuIFRvIGF2b2lkIG1hbmlwdWxhdGlvbiB3aXRoIHBvc3NpYmx5IGxvbmcgbGlzdHMs CndlIGRvbid0IGNsZWFyIGVzX2luc2VydF9wZW5kaW5nX3Jlc3VsdF9yZWxhdGlvbnMgYW5kCmVz X2luc2VydF9wZW5kaW5nX21vZGlmeXRhYmxlcyBsaXN0cywgYnV0IGNoZWNrIGluCkV4ZWNQZW5k aW5nSW5zZXJ0cygpIGlmIHRoZXJlIGFyZSBhbnkgcGVuZGluZyB0dXBsZXMuCi0tLQogLi4uL3Bv c3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAgIHwgIDExICsrCiBjb250cmli L3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgIDkgKysKIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jICAgICAgICB8IDEzOCArKysrKysrKysrLS0t LS0tLS0KIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAg MSArCiA0IGZpbGVzIGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKyksIDYzIGRlbGV0aW9ucygtKQoK ZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5v dXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4 IDQ4ZTMxODViMjI3Li5hOGJmZWM5NDEzYyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19m ZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9l eHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC03NjQwLDYgKzc2NDAsMTcgQEAgc2VsZWN0IGNv dW50KCopIGZyb20gdGFiX2JhdGNoX3NoYXJkZWQ7CiAgICAgNDUKICgxIHJvdykKIAorZGVsZXRl IGZyb20gdGFiX2JhdGNoX3NoYXJkZWQ7CistLSB0ZXN0IGJhdGNoIGluc2VydCB3aXRoIGxhcmdl IHR1cGxlcyBhbmQgc3dpdGNoaW5nIGZyb20gYmF0Y2ggdG8gdXN1YWwgaW5zZXJ0CitzZXQgd29y a19tZW0gdG8gNjQ7CitpbnNlcnQgaW50byB0YWJfYmF0Y2hfc2hhcmRlZCBzZWxlY3QgMywgY2Fz ZSB3aGVuIGklNCA9IDAgdGhlbiBscGFkKCdhJyw2NSoxMDI0LCdhJykgZWxzZSAndGVzdCd8fCBp IGVuZCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitzZWxlY3QgY291bnQoKikgZnJv bSB0YWJfYmF0Y2hfc2hhcmRlZDsKKyBjb3VudCAKKy0tLS0tLS0KKyAgIDEwMAorKDEgcm93KQor CityZXNldCB3b3JrX21lbTsKIGRyb3AgdGFibGUgdGFiX2JhdGNoX2xvY2FsOwogZHJvcCB0YWJs ZSB0YWJfYmF0Y2hfc2hhcmRlZDsKIGRyb3AgdGFibGUgdGFiX2JhdGNoX3NoYXJkZWRfcDFfcmVt b3RlOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5z cWwgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAppbmRleCA5YThm OWUyODEzNS4uNDY3OTQzY2EzMmUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Nx bC9wb3N0Z3Jlc19mZHcuc3FsCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jl c19mZHcuc3FsCkBAIC0xOTM2LDEwICsxOTM2LDE5IEBAIGNyZWF0ZSBmb3JlaWduIHRhYmxlIHRh Yl9iYXRjaF9zaGFyZGVkX3AxIHBhcnRpdGlvbiBvZiB0YWJfYmF0Y2hfc2hhcmRlZAogICBzZXJ2 ZXIgbG9vcGJhY2sgb3B0aW9ucyAodGFibGVfbmFtZSAndGFiX2JhdGNoX3NoYXJkZWRfcDFfcmVt b3RlJyk7CiBpbnNlcnQgaW50byB0YWJfYmF0Y2hfc2hhcmRlZCBzZWxlY3QgKiBmcm9tIHRhYl9i YXRjaF9sb2NhbDsKIHNlbGVjdCBjb3VudCgqKSBmcm9tIHRhYl9iYXRjaF9zaGFyZGVkOworZGVs ZXRlIGZyb20gdGFiX2JhdGNoX3NoYXJkZWQ7CistLSB0ZXN0IGJhdGNoIGluc2VydCB3aXRoIGxh cmdlIHR1cGxlcyBhbmQgc3dpdGNoaW5nIGZyb20gYmF0Y2ggdG8gdXN1YWwgaW5zZXJ0CitzZXQg d29ya19tZW0gdG8gNjQ7CitpbnNlcnQgaW50byB0YWJfYmF0Y2hfc2hhcmRlZCBzZWxlY3QgMywg Y2FzZSB3aGVuIGklNCA9IDAgdGhlbiBscGFkKCdhJyw2NSoxMDI0LCdhJykgZWxzZSAndGVzdCd8 fCBpIGVuZCBmcm9tIGdlbmVyYXRlX3NlcmllcygxLCAxMDApIGk7CitzZWxlY3QgY291bnQoKikg ZnJvbSB0YWJfYmF0Y2hfc2hhcmRlZDsKK3Jlc2V0IHdvcmtfbWVtOworCiBkcm9wIHRhYmxlIHRh Yl9iYXRjaF9sb2NhbDsKIGRyb3AgdGFibGUgdGFiX2JhdGNoX3NoYXJkZWQ7CiBkcm9wIHRhYmxl IHRhYl9iYXRjaF9zaGFyZGVkX3AxX3JlbW90ZTsKIAorCisKIGFsdGVyIHNlcnZlciBsb29wYmFj ayBvcHRpb25zIChkcm9wIGJhdGNoX3NpemUpOwogCiAtLSA9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IGEyOGJlY2E2M2ZmLi4yZTZkY2RmZjdiZiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKKysrIGIv c3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMKQEAgLTk0Miw3ICs5NDIsNiBA QCBFeGVjSW5zZXJ0KE1vZGlmeVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJICovCiAJCWlmIChy ZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNpemUgPiAxKQogCQl7Ci0JCQlib29sCQlmbHVzaGVkID0g ZmFsc2U7CiAJCQlTaXplCQl0dXBsZV9sZW47CiAKIAkJCS8qIENvbXB1dGUgbGVuZ3RoIG9mIHRo ZSBjdXJyZW50IHR1cGxlICovCkBAIC05NjEsNzYgKzk2MCw4MiBAQCBFeGVjSW5zZXJ0KE1vZGlm eVRhYmxlQ29udGV4dCAqY29udGV4dCwKIAkJCQkJCQkJcmVzdWx0UmVsSW5mby0+cmlfUGxhblNs b3RzLAogCQkJCQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9OdW1TbG90cywKIAkJCQkJCQkJZXN0YXRl LCBjYW5TZXRUYWcpOwotCQkJCWZsdXNoZWQgPSB0cnVlOwogCQkJfQogCi0JCQlvbGRDb250ZXh0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGVzdGF0ZS0+ZXNfcXVlcnlfY3h0KTsKLQotCQkJaWYg KHJlc3VsdFJlbEluZm8tPnJpX1Nsb3RzID09IE5VTEwpCisJCQlpZiAodHVwbGVfbGVuIDwgd29y a19tZW0gKiAxMDI0KQogCQkJewotCQkJCXJlc3VsdFJlbEluZm8tPnJpX1Nsb3RzID0gcGFsbG9j X2FycmF5KFR1cGxlVGFibGVTbG90ICosIHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSk7Ci0J CQkJcmVzdWx0UmVsSW5mby0+cmlfUGxhblNsb3RzID0gcGFsbG9jX2FycmF5KFR1cGxlVGFibGVT bG90ICosIHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSk7Ci0JCQl9CisJCQkJb2xkQ29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhlc3RhdGUtPmVzX3F1ZXJ5X2N4dCk7CiAKLQkJCS8q Ci0JCQkgKiBJbml0aWFsaXplIHRoZSBiYXRjaCBzbG90cy4gV2UgZG9uJ3Qga25vdyBob3cgbWFu eSBzbG90cyB3aWxsCi0JCQkgKiBiZSBuZWVkZWQsIHNvIHdlIGluaXRpYWxpemUgdGhlbSBhcyB0 aGUgYmF0Y2ggZ3Jvd3MsIGFuZCB3ZQotCQkJICoga2VlcCB0aGVtIGFjcm9zcyBiYXRjaGVzLiBU byBtaXRpZ2F0ZSBhbiBpbmVmZmljaWVuY3kgaW4gaG93Ci0JCQkgKiByZXNvdXJjZSBvd25lciBo YW5kbGVzIG9iamVjdHMgd2l0aCBtYW55IHJlZmVyZW5jZXMgKGFzIHdpdGgKLQkJCSAqIG1hbnkg c2xvdHMgYWxsIHJlZmVyZW5jaW5nIHRoZSBzYW1lIHR1cGxlIGRlc2NyaXB0b3IpIHdlIGNvcHkK LQkJCSAqIHRoZSBhcHByb3ByaWF0ZSB0dXBsZSBkZXNjcmlwdG9yIGZvciBlYWNoIHNsb3QuCi0J CQkgKi8KLQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1TbG90cyA+PSByZXN1bHRSZWxJbmZv LT5yaV9OdW1TbG90c0luaXRpYWxpemVkKQotCQkJewotCQkJCVR1cGxlRGVzYwl0ZGVzYyA9IENy ZWF0ZVR1cGxlRGVzY0NvcHkoc2xvdC0+dHRzX3R1cGxlRGVzY3JpcHRvcik7Ci0JCQkJVHVwbGVE ZXNjCXBsYW5fdGRlc2MgPQotCQkJCQlDcmVhdGVUdXBsZURlc2NDb3B5KHBsYW5TbG90LT50dHNf dHVwbGVEZXNjcmlwdG9yKTsKKwkJCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfU2xvdHMgPT0gTlVM TCkKKwkJCQl7CisJCQkJCXJlc3VsdFJlbEluZm8tPnJpX1Nsb3RzID0gcGFsbG9jX2FycmF5KFR1 cGxlVGFibGVTbG90ICosIHJlc3VsdFJlbEluZm8tPnJpX0JhdGNoU2l6ZSk7CisJCQkJCXJlc3Vs dFJlbEluZm8tPnJpX1BsYW5TbG90cyA9IHBhbGxvY19hcnJheShUdXBsZVRhYmxlU2xvdCAqLCBy ZXN1bHRSZWxJbmZvLT5yaV9CYXRjaFNpemUpOworCQkJCX0KIAotCQkJCXJlc3VsdFJlbEluZm8t PnJpX1Nsb3RzW3Jlc3VsdFJlbEluZm8tPnJpX051bVNsb3RzXSA9Ci0JCQkJCU1ha2VTaW5nbGVU dXBsZVRhYmxlU2xvdCh0ZGVzYywgc2xvdC0+dHRzX29wcyk7CisJCQkJLyoKKwkJCQkgKiBJbml0 aWFsaXplIHRoZSBiYXRjaCBzbG90cy4gV2UgZG9uJ3Qga25vdyBob3cgbWFueSBzbG90cworCQkJ CSAqIHdpbGwgYmUgbmVlZGVkLCBzbyB3ZSBpbml0aWFsaXplIHRoZW0gYXMgdGhlIGJhdGNoIGdy b3dzLAorCQkJCSAqIGFuZCB3ZSBrZWVwIHRoZW0gYWNyb3NzIGJhdGNoZXMuIFRvIG1pdGlnYXRl IGFuCisJCQkJICogaW5lZmZpY2llbmN5IGluIGhvdyByZXNvdXJjZSBvd25lciBoYW5kbGVzIG9i amVjdHMgd2l0aAorCQkJCSAqIG1hbnkgcmVmZXJlbmNlcyAoYXMgd2l0aCBtYW55IHNsb3RzIGFs bCByZWZlcmVuY2luZyB0aGUKKwkJCQkgKiBzYW1lIHR1cGxlIGRlc2NyaXB0b3IpIHdlIGNvcHkg dGhlIGFwcHJvcHJpYXRlIHR1cGxlCisJCQkJICogZGVzY3JpcHRvciBmb3IgZWFjaCBzbG90Lgor CQkJCSAqLworCQkJCWlmIChyZXN1bHRSZWxJbmZvLT5yaV9OdW1TbG90cyA+PSByZXN1bHRSZWxJ bmZvLT5yaV9OdW1TbG90c0luaXRpYWxpemVkKQorCQkJCXsKKwkJCQkJVHVwbGVEZXNjCXRkZXNj ID0gQ3JlYXRlVHVwbGVEZXNjQ29weShzbG90LT50dHNfdHVwbGVEZXNjcmlwdG9yKTsKKwkJCQkJ VHVwbGVEZXNjCXBsYW5fdGRlc2MgPQorCQkJCQkJQ3JlYXRlVHVwbGVEZXNjQ29weShwbGFuU2xv dC0+dHRzX3R1cGxlRGVzY3JpcHRvcik7CiAKLQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9QbGFuU2xv dHNbcmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHNdID0KLQkJCQkJTWFrZVNpbmdsZVR1cGxlVGFi bGVTbG90KHBsYW5fdGRlc2MsIHBsYW5TbG90LT50dHNfb3BzKTsKKwkJCQkJcmVzdWx0UmVsSW5m by0+cmlfU2xvdHNbcmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHNdID0KKwkJCQkJCU1ha2VTaW5n bGVUdXBsZVRhYmxlU2xvdCh0ZGVzYywgc2xvdC0+dHRzX29wcyk7CiAKLQkJCQkvKiByZW1lbWJl ciBob3cgbWFueSBiYXRjaCBzbG90cyB3ZSBpbml0aWFsaXplZCAqLwotCQkJCXJlc3VsdFJlbElu Zm8tPnJpX051bVNsb3RzSW5pdGlhbGl6ZWQrKzsKLQkJCX0KKwkJCQkJcmVzdWx0UmVsSW5mby0+ cmlfUGxhblNsb3RzW3Jlc3VsdFJlbEluZm8tPnJpX051bVNsb3RzXSA9CisJCQkJCQlNYWtlU2lu Z2xlVHVwbGVUYWJsZVNsb3QocGxhbl90ZGVzYywgcGxhblNsb3QtPnR0c19vcHMpOwogCi0JCQlF eGVjQ29weVNsb3QocmVzdWx0UmVsSW5mby0+cmlfU2xvdHNbcmVzdWx0UmVsSW5mby0+cmlfTnVt U2xvdHNdLAotCQkJCQkJIHNsb3QpOworCQkJCQkvKiByZW1lbWJlciBob3cgbWFueSBiYXRjaCBz bG90cyB3ZSBpbml0aWFsaXplZCAqLworCQkJCQlyZXN1bHRSZWxJbmZvLT5yaV9OdW1TbG90c0lu aXRpYWxpemVkKys7CisJCQkJfQogCi0JCQlFeGVjQ29weVNsb3QocmVzdWx0UmVsSW5mby0+cmlf UGxhblNsb3RzW3Jlc3VsdFJlbEluZm8tPnJpX051bVNsb3RzXSwKLQkJCQkJCSBwbGFuU2xvdCk7 CisJCQkJRXhlY0NvcHlTbG90KHJlc3VsdFJlbEluZm8tPnJpX1Nsb3RzW3Jlc3VsdFJlbEluZm8t PnJpX051bVNsb3RzXSwKKwkJCQkJCQkgc2xvdCk7CiAKLQkJCS8qCi0JCQkgKiBJZiB0aGVzZSBh cmUgdGhlIGZpcnN0IHR1cGxlcyBzdG9yZWQgaW4gdGhlIGJ1ZmZlcnMsIGFkZCB0aGUKLQkJCSAq IHRhcmdldCByZWwgYW5kIHRoZSBtdHN0YXRlIHRvIHRoZQotCQkJICogZXNfaW5zZXJ0X3BlbmRp bmdfcmVzdWx0X3JlbGF0aW9ucyBhbmQKLQkJCSAqIGVzX2luc2VydF9wZW5kaW5nX21vZGlmeXRh YmxlcyBsaXN0cyByZXNwZWN0aXZlbHksIGV4Y2VwdCBpbgotCQkJICogdGhlIGNhc2Ugd2hlcmUg Zmx1c2hpbmcgd2FzIGRvbmUgYWJvdmUsIGluIHdoaWNoIGNhc2UgdGhleQotCQkJICogd291bGQg YWxyZWFkeSBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3RzLCBzbyBubyBuZWVkIHRvIGRvCi0J CQkgKiB0aGlzLgotCQkJICovCi0JCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHMgPT0g MCAmJiAhZmx1c2hlZCkKLQkJCXsKLQkJCQlBc3NlcnQoIWxpc3RfbWVtYmVyX3B0cihlc3RhdGUt PmVzX2luc2VydF9wZW5kaW5nX3Jlc3VsdF9yZWxhdGlvbnMsCi0JCQkJCQkJCQkJcmVzdWx0UmVs SW5mbykpOwotCQkJCWVzdGF0ZS0+ZXNfaW5zZXJ0X3BlbmRpbmdfcmVzdWx0X3JlbGF0aW9ucyA9 Ci0JCQkJCWxhcHBlbmQoZXN0YXRlLT5lc19pbnNlcnRfcGVuZGluZ19yZXN1bHRfcmVsYXRpb25z LAotCQkJCQkJCXJlc3VsdFJlbEluZm8pOwotCQkJCWVzdGF0ZS0+ZXNfaW5zZXJ0X3BlbmRpbmdf bW9kaWZ5dGFibGVzID0KLQkJCQkJbGFwcGVuZChlc3RhdGUtPmVzX2luc2VydF9wZW5kaW5nX21v ZGlmeXRhYmxlcywgbXRzdGF0ZSk7Ci0JCQl9Ci0JCQlBc3NlcnQobGlzdF9tZW1iZXJfcHRyKGVz dGF0ZS0+ZXNfaW5zZXJ0X3BlbmRpbmdfcmVzdWx0X3JlbGF0aW9ucywKLQkJCQkJCQkJICAgcmVz dWx0UmVsSW5mbykpOworCQkJCUV4ZWNDb3B5U2xvdChyZXN1bHRSZWxJbmZvLT5yaV9QbGFuU2xv dHNbcmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHNdLAorCQkJCQkJCSBwbGFuU2xvdCk7CiAKLQkJ CXJlc3VsdFJlbEluZm8tPnJpX051bVNsb3RzKys7Ci0JCQkvKiBCYXRjaCBzaXplIGNhbiBncm93 IHVwIHRvIHR1cGxlIGxlbmd0aCBldmVuIGlmIGl0IGV4Y2VlZHMgd29ya19tZW0uICovCi0JCQly ZXN1bHRSZWxJbmZvLT5yaV9CYXRjaE1lbW9yeVVzZWQgKz0gdHVwbGVfbGVuOworCQkJCS8qCisJ CQkJICogSWYgdGhlc2UgYXJlIHRoZSBmaXJzdCB0dXBsZXMgc3RvcmVkIGluIHRoZSBidWZmZXJz LCBhZGQKKwkJCQkgKiB0aGUgdGFyZ2V0IHJlbCBhbmQgdGhlIG10c3RhdGUgdG8gdGhlCisJCQkJ ICogZXNfaW5zZXJ0X3BlbmRpbmdfcmVzdWx0X3JlbGF0aW9ucyBhbmQKKwkJCQkgKiBlc19pbnNl cnRfcGVuZGluZ19tb2RpZnl0YWJsZXMgbGlzdHMgcmVzcGVjdGl2ZWx5LCBleGNlcHQKKwkJCQkg KiBpbiB0aGUgY2FzZSB3aGVyZSBmbHVzaGluZyB3YXMgZG9uZSBhYm92ZSwgaW4gd2hpY2ggY2Fz ZQorCQkJCSAqIHRoZXkgd291bGQgYWxyZWFkeSBoYXZlIGJlZW4gYWRkZWQgdG8gdGhlIGxpc3Rz LCBzbyBubyBuZWVkCisJCQkJICogdG8gZG8gdGhpcy4KKwkJCQkgKi8KKwkJCQlpZiAocmVzdWx0 UmVsSW5mby0+cmlfTnVtU2xvdHMgPT0gMCAmJiAhcmVzdWx0UmVsSW5mby0+cmlfRXhlY3V0b3JQ ZW5kaW5nU3RhdGVNb2RpZmllZCkKKwkJCQl7CisJCQkJCUFzc2VydCghbGlzdF9tZW1iZXJfcHRy KGVzdGF0ZS0+ZXNfaW5zZXJ0X3BlbmRpbmdfcmVzdWx0X3JlbGF0aW9ucywKKwkJCQkJCQkJCQkJ cmVzdWx0UmVsSW5mbykpOworCQkJCQllc3RhdGUtPmVzX2luc2VydF9wZW5kaW5nX3Jlc3VsdF9y ZWxhdGlvbnMgPQorCQkJCQkJbGFwcGVuZChlc3RhdGUtPmVzX2luc2VydF9wZW5kaW5nX3Jlc3Vs dF9yZWxhdGlvbnMsCisJCQkJCQkJCXJlc3VsdFJlbEluZm8pOworCQkJCQllc3RhdGUtPmVzX2lu c2VydF9wZW5kaW5nX21vZGlmeXRhYmxlcyA9CisJCQkJCQlsYXBwZW5kKGVzdGF0ZS0+ZXNfaW5z ZXJ0X3BlbmRpbmdfbW9kaWZ5dGFibGVzLCBtdHN0YXRlKTsKKwkJCQkJcmVzdWx0UmVsSW5mby0+ cmlfRXhlY3V0b3JQZW5kaW5nU3RhdGVNb2RpZmllZCA9IHRydWU7CisJCQkJfQorCQkJCUFzc2Vy dChsaXN0X21lbWJlcl9wdHIoZXN0YXRlLT5lc19pbnNlcnRfcGVuZGluZ19yZXN1bHRfcmVsYXRp b25zLAorCQkJCQkJCQkJICAgcmVzdWx0UmVsSW5mbykpOwogCi0JCQlNZW1vcnlDb250ZXh0U3dp dGNoVG8ob2xkQ29udGV4dCk7CisJCQkJcmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHMrKzsKKwkJ CQlyZXN1bHRSZWxJbmZvLT5yaV9CYXRjaE1lbW9yeVVzZWQgKz0gdHVwbGVfbGVuOworCQkJCS8q IFdlJ3ZlIGZsdXNoZWQgYmF0Y2ggaWYgaXQgaXMgdG9vIGJpZy4gKi8KKwkJCQlBc3NlcnQocmVz dWx0UmVsSW5mby0+cmlfQmF0Y2hNZW1vcnlVc2VkIDwgd29ya19tZW0gKiAxMDI0KTsKIAotCQkJ cmV0dXJuIE5VTEw7CisJCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOworCisJ CQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQkvKiBlbHNlIGRvIHVzdWFsIGZvcmVpZ24gaW5zZXJ0 ICovCiAJCX0KIAogCQkvKgpAQCAtMTQ0NSwxMSArMTQ1MCwxOCBAQCBFeGVjUGVuZGluZ0luc2Vy dHMoRVN0YXRlICplc3RhdGUpCiAJCU1vZGlmeVRhYmxlU3RhdGUgKm10c3RhdGUgPSAoTW9kaWZ5 VGFibGVTdGF0ZSAqKSBsZmlyc3QobDIpOwogCiAJCUFzc2VydChtdHN0YXRlKTsKLQkJRXhlY0Jh dGNoSW5zZXJ0KG10c3RhdGUsIHJlc3VsdFJlbEluZm8sCi0JCQkJCQlyZXN1bHRSZWxJbmZvLT5y aV9TbG90cywKLQkJCQkJCXJlc3VsdFJlbEluZm8tPnJpX1BsYW5TbG90cywKLQkJCQkJCXJlc3Vs dFJlbEluZm8tPnJpX051bVNsb3RzLAotCQkJCQkJZXN0YXRlLCBtdHN0YXRlLT5jYW5TZXRUYWcp OworCisJCS8qCisJCSAqIEJhdGNoIGluc2VydCBjb3VsZCBzd2l0Y2ggdG8gbm9uLWJhdGNoZWQg aW5zZXJ0LCBpbiB0aGlzIGNhc2Ugd2UKKwkJICogY291bGQgaGF2ZSBubyBmaWxsZWQgc2xvdHMu CisJCSAqLworCQlpZiAocmVzdWx0UmVsSW5mby0+cmlfTnVtU2xvdHMgPiAwKQorCQkJRXhlY0Jh dGNoSW5zZXJ0KG10c3RhdGUsIHJlc3VsdFJlbEluZm8sCisJCQkJCQkJcmVzdWx0UmVsSW5mby0+ cmlfU2xvdHMsCisJCQkJCQkJcmVzdWx0UmVsSW5mby0+cmlfUGxhblNsb3RzLAorCQkJCQkJCXJl c3VsdFJlbEluZm8tPnJpX051bVNsb3RzLAorCQkJCQkJCWVzdGF0ZSwgbXRzdGF0ZS0+Y2FuU2V0 VGFnKTsKKwkJcmVzdWx0UmVsSW5mby0+cmlfRXhlY3V0b3JQZW5kaW5nU3RhdGVNb2RpZmllZCA9 IGZhbHNlOwogCX0KIAogCWxpc3RfZnJlZShlc3RhdGUtPmVzX2luc2VydF9wZW5kaW5nX3Jlc3Vs dF9yZWxhdGlvbnMpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAppbmRleCBiODJlYzkzODIyOC4uZGNjMjM3 NzRhNGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3Ny Yy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCkBAIC01NDMsNiArNTQzLDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUmVzdWx0UmVsSW5mbwogCWludAkJCXJpX051bVNsb3RzSW5pdGlhbGl6ZWQ7IC8qIG51 bWJlciBvZiBpbml0aWFsaXplZCBzbG90cyAqLwogCWludAkJCXJpX0JhdGNoU2l6ZTsJLyogbWF4 IHNsb3RzIGluc2VydGVkIGluIGEgc2luZ2xlIGJhdGNoICovCiAJaW50CQkJcmlfQmF0Y2hNZW1v cnlVc2VkOwkvKiBtZW1vcnkgdXNlZCBieSBiYXRjaCAqLworCWJvb2wJCQlyaV9FeGVjdXRvclBl bmRpbmdTdGF0ZU1vZGlmaWVkOyAvKiB0cnVlIGlmIG1lbWJlciBvZiBlc3RhdGUtPmVzX2luc2Vy dF9wZW5kaW5nX3Jlc3VsdF9yZWxhdGlvbnMgKi8KIAlUdXBsZVRhYmxlU2xvdCAqKnJpX1Nsb3Rz OwkvKiBpbnB1dCB0dXBsZXMgZm9yIGJhdGNoIGluc2VydCAqLwogCVR1cGxlVGFibGVTbG90ICoq cmlfUGxhblNsb3RzOwogCi0tIAoyLjQzLjAKCg== --=_15aca88f6432cd71ef2db5ff356d687b Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=v3-0003-WIP-Use-tuplestore-in-PgFdwScanState-scan-state-to-l.patch Content-Disposition: attachment; filename*0*=UTF-8''v3-0003-WIP-Use-tuplestore-in-PgFdwScanState-scan-stat; filename*1*=e-to-l.patch; size=6220 RnJvbSAxZDg5MTY3Y2JiNmIxM2JkM2U3MzM0OGZkNmQ4ZThjZDMzYzE4MGVhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgUHloYWxvdiA8YS5weWhhbG92QHBvc3RncmVz cHJvLnJ1PgpEYXRlOiBUaHUsIDE4IERlYyAyMDI1IDA5OjE3OjQyICswMzAwClN1YmplY3Q6IFtQ QVRDSCAzLzNdIFdJUDogVXNlIHR1cGxlc3RvcmUgaW4gUGdGZHdTY2FuU3RhdGUgc2NhbiBzdGF0 ZSB0byBsaW1pdAogbWVtb3J5IHVzYWdlCgpBIHR1cGxlc3RvcmUgZG9lc24ndCBwcmVzZXJ2ZSBj dGlkcywgc28gd2UgbmVlZCB0byBzdG9yZSB0aGVtCnNlcGFyYXRlbHkuCi0tLQogY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgfCA4MiArKysrKysrKysrKysrKysrKysrKysrKysr Ky0tLQogMSBmaWxlIGNoYW5nZWQsIDc0IGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCA1ZTE3OGMyMWIzOS4uZjE2MGYxYTNm NjIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC0xNTgsOCArMTU4LDEyIEBA IHR5cGVkZWYgc3RydWN0IFBnRmR3U2NhblN0YXRlCiAJY29uc3QgY2hhciAqKnBhcmFtX3ZhbHVl czsJLyogdGV4dHVhbCB2YWx1ZXMgb2YgcXVlcnkgcGFyYW1ldGVycyAqLwogCiAJLyogZm9yIHN0 b3JpbmcgcmVzdWx0IHR1cGxlcyAqLwotCUhlYXBUdXBsZSAgKnR1cGxlczsJCQkvKiBhcnJheSBv ZiBjdXJyZW50bHktcmV0cmlldmVkIHR1cGxlcyAqLwotCWludAkJCW51bV90dXBsZXM7CQkvKiAj IG9mIHR1cGxlcyBpbiBhcnJheSAqLworCVR1cGxlc3RvcmVzdGF0ZSAqcmVzdWx0X3N0b3JlOwkv KiBjdXJyZW50bHktcmV0cmlldmVkIHR1cGxlcyAqLworCUl0ZW1Qb2ludGVyRGF0YSAqY3RpZHM7 CQkvKiBzZXBhcmF0ZSBzdG9yZSBmb3IgY3RpZHMgKi8KKworCVR1cGxlVGFibGVTbG90ICp0dXBz dG9yZV9zbG90OwkvKiBzbG90IG5lZWRlZCBmb3IgcmV0cmlldmluZyB0dXBsZXMgZnJvbQorCQkJ CQkJCQkJICogdHVwbGVzdG9yZSAqLworCWludAkJCW51bV90dXBsZXM7CQkvKiAjIG9mIHR1cGxl cyBpbiB0dXBsZSBzdG9yZSAqLwogCWludAkJCW5leHRfdHVwbGU7CQkvKiBpbmRleCBvZiBuZXh0 IG9uZSB0byByZXR1cm4gKi8KIAogCS8qIGJhdGNoLWxldmVsIHN0YXRlLCBmb3Igb3B0aW1pemlu ZyByZXdpbmRzIGFuZCBhdm9pZGluZyB1c2VsZXNzIGZldGNoICovCkBAIC01NDYsNiArNTUwLDgg QEAgc3RhdGljIHZvaWQgbWVyZ2VfZmR3X29wdGlvbnMoUGdGZHdSZWxhdGlvbkluZm8gKmZwaW5m bywKIAkJCQkJCQkgIGNvbnN0IFBnRmR3UmVsYXRpb25JbmZvICpmcGluZm9faSk7CiBzdGF0aWMg aW50CWdldF9iYXRjaF9zaXplX29wdGlvbihSZWxhdGlvbiByZWwpOwogCitzdGF0aWMgdm9pZCBj bGVhbl9zY2FuX3N0YXRlX3Jlc3VsdF9zdG9yZShQZ0Zkd1NjYW5TdGF0ZSAqZnNzdGF0ZSk7CisK IAogLyoKICAqIEZvcmVpZ24tZGF0YSB3cmFwcGVyIGhhbmRsZXIgZnVuY3Rpb246IHJldHVybiBh IHN0cnVjdCB3aXRoIHBvaW50ZXJzCkBAIC0xNjA1LDYgKzE2MTEsOCBAQCBwb3N0Z3Jlc0l0ZXJh dGVGb3JlaWduU2NhbihGb3JlaWduU2NhblN0YXRlICpub2RlKQogewogCVBnRmR3U2NhblN0YXRl ICpmc3N0YXRlID0gKFBnRmR3U2NhblN0YXRlICopIG5vZGUtPmZkd19zdGF0ZTsKIAlUdXBsZVRh YmxlU2xvdCAqc2xvdCA9IG5vZGUtPnNzLnNzX1NjYW5UdXBsZVNsb3Q7CisJSGVhcFR1cGxlCW5l d3R1cDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CiAKIAkvKgogCSAqIEluIHN5bmMgbW9k ZSwgaWYgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBhZnRlciBCZWdpbiBvciBSZVNjYW4sIHdlIG5l ZWQKQEAgLTE2MzEsMTMgKzE2MzksMzcgQEAgcG9zdGdyZXNJdGVyYXRlRm9yZWlnblNjYW4oRm9y ZWlnblNjYW5TdGF0ZSAqbm9kZSkKIAkJCXJldHVybiBFeGVjQ2xlYXJUdXBsZShzbG90KTsKIAl9 CiAKKwlNZW1vcnlDb250ZXh0UmVzZXQoZnNzdGF0ZS0+dGVtcF9jeHQpOworCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oZnNzdGF0ZS0+dGVtcF9jeHQpOworCWlmICghdHVwbGVz dG9yZV9nZXR0dXBsZXNsb3QoZnNzdGF0ZS0+cmVzdWx0X3N0b3JlLCB0cnVlLCBmYWxzZSwKKwkJ CQkJCQkJIGZzc3RhdGUtPnR1cHN0b3JlX3Nsb3QpKQorCXsKKwkJLyoKKwkJICogV2UndmUgY2hl Y2tlZCB0aGF0IG5leHRfdHVwbGUgaXMgbGVzcyB0aGFuIGZzc3RhdGUtPm51bV90dXBsZXMsIHNv CisJCSAqIHRoZXJlIHNob3VsZCBiZSBzb21lIHJlc3VsdAorCQkgKi8KKwkJTWVtb3J5Q29udGV4 dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVS UkNPREVfSU5URVJOQUxfRVJST1IpLAorCQkJCSBlcnJtc2coInVuZXhwZWN0ZWQgZW5kIG9mIHN0 b3JlIikpKTsKKworCX0KKworCW5ld3R1cCA9IEV4ZWNGZXRjaFNsb3RIZWFwVHVwbGUoZnNzdGF0 ZS0+dHVwc3RvcmVfc2xvdCwgdHJ1ZSwgTlVMTCk7CisJLyogVHVwbGUgc3RvcmUgZG9lc24ndCBw cmVzZXJ2ZSBjdGlkLCBzbyByZXN0b3JlIGl0IHNlcGFyYXRlbHkgKi8KKwluZXd0dXAtPnRfc2Vs ZiA9IG5ld3R1cC0+dF9kYXRhLT50X2N0aWQgPSBmc3N0YXRlLT5jdGlkc1tmc3N0YXRlLT5uZXh0 X3R1cGxlXTsKKwlFeGVjQ2xlYXJUdXBsZShmc3N0YXRlLT50dXBzdG9yZV9zbG90KTsKKwogCS8q CiAJICogUmV0dXJuIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCUV4ZWNTdG9yZUhlYXBUdXBsZShm c3N0YXRlLT50dXBsZXNbZnNzdGF0ZS0+bmV4dF90dXBsZSsrXSwKKwlFeGVjU3RvcmVIZWFwVHVw bGUobmV3dHVwLAogCQkJCQkgICBzbG90LAogCQkJCQkgICBmYWxzZSk7CiAKKwlmc3N0YXRlLT5u ZXh0X3R1cGxlKys7CisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCiAJcmV0 dXJuIHNsb3Q7CiB9CiAKQEAgLTE2OTksNiArMTczMSw4IEBAIHBvc3RncmVzUmVTY2FuRm9yZWln blNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSkKIAl7CiAJCS8qIEVhc3k6IGp1c3QgcmVzY2Fu IHdoYXQgd2UgYWxyZWFkeSBoYXZlIGluIG1lbW9yeSwgaWYgYW55dGhpbmcgKi8KIAkJZnNzdGF0 ZS0+bmV4dF90dXBsZSA9IDA7CisJCWlmIChmc3N0YXRlLT5yZXN1bHRfc3RvcmUpCisJCQl0dXBs ZXN0b3JlX3Jlc2Nhbihmc3N0YXRlLT5yZXN1bHRfc3RvcmUpOwogCQlyZXR1cm47CiAJfQogCkBA IC0xNzA4LDcgKzE3NDIsNyBAQCBwb3N0Z3Jlc1JlU2NhbkZvcmVpZ25TY2FuKEZvcmVpZ25TY2Fu U3RhdGUgKm5vZGUpCiAJUFFjbGVhcihyZXMpOwogCiAJLyogTm93IGZvcmNlIGEgZnJlc2ggRkVU Q0guICovCi0JZnNzdGF0ZS0+dHVwbGVzID0gTlVMTDsKKwljbGVhbl9zY2FuX3N0YXRlX3Jlc3Vs dF9zdG9yZShmc3N0YXRlKTsKIAlmc3N0YXRlLT5udW1fdHVwbGVzID0gMDsKIAlmc3N0YXRlLT5u ZXh0X3R1cGxlID0gMDsKIAlmc3N0YXRlLT5mZXRjaF9jdF8yID0gMDsKQEAgLTE3MzcsNiArMTc3 MSw4IEBAIHBvc3RncmVzRW5kRm9yZWlnblNjYW4oRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSkKIAlS ZWxlYXNlQ29ubmVjdGlvbihmc3N0YXRlLT5jb25uKTsKIAlmc3N0YXRlLT5jb25uID0gTlVMTDsK IAorCWNsZWFuX3NjYW5fc3RhdGVfcmVzdWx0X3N0b3JlKGZzc3RhdGUpOworCiAJLyogTWVtb3J5 Q29udGV4dHMgd2lsbCBiZSBkZWxldGVkIGF1dG9tYXRpY2FsbHkuICovCiB9CiAKQEAgLTM3ODEs NyArMzgxNyw4IEBAIGNyZWF0ZV9jdXJzb3IoRm9yZWlnblNjYW5TdGF0ZSAqbm9kZSkKIAogCS8q IE1hcmsgdGhlIGN1cnNvciBhcyBjcmVhdGVkLCBhbmQgc2hvdyBubyB0dXBsZXMgaGF2ZSBiZWVu IHJldHJpZXZlZCAqLwogCWZzc3RhdGUtPmN1cnNvcl9leGlzdHMgPSB0cnVlOwotCWZzc3RhdGUt PnR1cGxlcyA9IE5VTEw7CisJY2xlYW5fc2Nhbl9zdGF0ZV9yZXN1bHRfc3RvcmUoZnNzdGF0ZSk7 CisKIAlmc3N0YXRlLT5udW1fdHVwbGVzID0gMDsKIAlmc3N0YXRlLT5uZXh0X3R1cGxlID0gMDsK IAlmc3N0YXRlLT5mZXRjaF9jdF8yID0gMDsKQEAgLTM4MDgsNyArMzg0NSw5IEBAIGZldGNoX21v cmVfZGF0YShGb3JlaWduU2NhblN0YXRlICpub2RlKQogCSAqIFdlJ2xsIHN0b3JlIHRoZSB0dXBs ZXMgaW4gdGhlIGJhdGNoX2N4dC4gIEZpcnN0LCBmbHVzaCB0aGUgcHJldmlvdXMKIAkgKiBiYXRj aC4KIAkgKi8KLQlmc3N0YXRlLT50dXBsZXMgPSBOVUxMOworCWNsZWFuX3NjYW5fc3RhdGVfcmVz dWx0X3N0b3JlKGZzc3RhdGUpOworCisJTWVtb3J5Q29udGV4dFJlc2V0KGZzc3RhdGUtPnRlbXBf Y3h0KTsKIAlNZW1vcnlDb250ZXh0UmVzZXQoZnNzdGF0ZS0+YmF0Y2hfY3h0KTsKIAlvbGRjb250 ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGZzc3RhdGUtPmJhdGNoX2N4dCk7CiAKQEAgLTM4 NDQsMjEgKzM4ODMsMjkgQEAgZmV0Y2hfbW9yZV9kYXRhKEZvcmVpZ25TY2FuU3RhdGUgKm5vZGUp CiAKIAkvKiBDb252ZXJ0IHRoZSBkYXRhIGludG8gSGVhcFR1cGxlcyAqLwogCW51bXJvd3MgPSBQ UW50dXBsZXMocmVzKTsKLQlmc3N0YXRlLT50dXBsZXMgPSAoSGVhcFR1cGxlICopIHBhbGxvYzAo bnVtcm93cyAqIHNpemVvZihIZWFwVHVwbGUpKTsKKwlmc3N0YXRlLT5yZXN1bHRfc3RvcmUgPSB0 dXBsZXN0b3JlX2JlZ2luX2hlYXAoZmFsc2UsIGZhbHNlLCB3b3JrX21lbSk7CisJZnNzdGF0ZS0+ dHVwc3RvcmVfc2xvdCA9IE1ha2VTaW5nbGVUdXBsZVRhYmxlU2xvdChmc3N0YXRlLT50dXBkZXNj LCAmVFRTT3BzTWluaW1hbFR1cGxlKTsKIAlmc3N0YXRlLT5udW1fdHVwbGVzID0gbnVtcm93czsK IAlmc3N0YXRlLT5uZXh0X3R1cGxlID0gMDsKKwlmc3N0YXRlLT5jdGlkcyA9IHBhbGxvYzAobnVt cm93cyAqIHNpemVvZihJdGVtUG9pbnRlckRhdGEpKTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1y b3dzOyBpKyspCiAJeworCQlIZWFwVHVwbGUJbmV3dHVwOworCiAJCUFzc2VydChJc0Eobm9kZS0+ c3MucHMucGxhbiwgRm9yZWlnblNjYW4pKTsKIAotCQlmc3N0YXRlLT50dXBsZXNbaV0gPQorCQlu ZXd0dXAgPQogCQkJbWFrZV90dXBsZV9mcm9tX3Jlc3VsdF9yb3cocmVzLCBpLAogCQkJCQkJCQkJ ICAgZnNzdGF0ZS0+cmVsLAogCQkJCQkJCQkJICAgZnNzdGF0ZS0+YXR0aW5tZXRhLAogCQkJCQkJ CQkJICAgZnNzdGF0ZS0+cmV0cmlldmVkX2F0dHJzLAogCQkJCQkJCQkJICAgbm9kZSwKIAkJCQkJ CQkJCSAgIGZzc3RhdGUtPnRlbXBfY3h0KTsKKworCQl0dXBsZXN0b3JlX3B1dHR1cGxlKGZzc3Rh dGUtPnJlc3VsdF9zdG9yZSwgbmV3dHVwKTsKKwkJSXRlbVBvaW50ZXJDb3B5KCZuZXd0dXAtPnRf c2VsZiwgJmZzc3RhdGUtPmN0aWRzW2ldKTsKKwkJaGVhcF9mcmVldHVwbGUobmV3dHVwKTsKIAl9 CiAKIAkvKiBVcGRhdGUgZmV0Y2hfY3RfMiAqLwpAQCAtNzYzNiw2ICs3NjgzLDI1IEBAIG1ha2Vf dHVwbGVfZnJvbV9yZXN1bHRfcm93KFBHcmVzdWx0ICpyZXMsCiAJcmV0dXJuIHR1cGxlOwogfQog CisvKgorICogQ2xlYW4gUGdGZHdTY2FuU3RhdGUgcmVzdWx0IHN0b3JlCisgKi8KK3N0YXRpYyB2 b2lkCitjbGVhbl9zY2FuX3N0YXRlX3Jlc3VsdF9zdG9yZShQZ0Zkd1NjYW5TdGF0ZSAqZnNzdGF0 ZSkKK3sKKwlpZiAoZnNzdGF0ZS0+cmVzdWx0X3N0b3JlKQorCXsKKwkJLyoKKwkJICogV2UgcGFy dGlhbGx5IHJlbHkgb24gdGhlIGZhY3QgdGhhdCBiYXRjaF9jeHQgaXMgYWxzbyByZXNldAorCQkg Ki8KKwkJdHVwbGVzdG9yZV9lbmQoZnNzdGF0ZS0+cmVzdWx0X3N0b3JlKTsKKwkJRXhlY0Ryb3BT aW5nbGVUdXBsZVRhYmxlU2xvdChmc3N0YXRlLT50dXBzdG9yZV9zbG90KTsKKwkJZnNzdGF0ZS0+ cmVzdWx0X3N0b3JlID0gTlVMTDsKKwkJZnNzdGF0ZS0+dHVwc3RvcmVfc2xvdCA9IE5VTEw7CisJ CWZzc3RhdGUtPmN0aWRzID0gTlVMTDsKKwl9Cit9CisKIC8qCiAgKiBDYWxsYmFjayBmdW5jdGlv biB3aGljaCBpcyBjYWxsZWQgd2hlbiBlcnJvciBvY2N1cnMgZHVyaW5nIGNvbHVtbiB2YWx1ZQog ICogY29udmVyc2lvbi4gIFByaW50IG5hbWVzIG9mIGNvbHVtbiBhbmQgcmVsYXRpb24uCi0tIAoy LjQzLjAKCg== --=_15aca88f6432cd71ef2db5ff356d687b--