Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nxBzV-0003Nq-A4 for pgsql-bugs@arkaria.postgresql.org; Fri, 03 Jun 2022 18:25:45 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nxBzT-0006Ym-O2 for pgsql-bugs@arkaria.postgresql.org; Fri, 03 Jun 2022 18:25:43 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nxBzT-0006Vo-C4 for pgsql-bugs@lists.postgresql.org; Fri, 03 Jun 2022 18:25:43 +0000 Received: from sfr-1.cri.mines-paristech.fr ([77.158.180.225] helo=smtp.cri.ensmp.fr) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nxBzQ-0005sP-JF for pgsql-bugs@lists.postgresql.org; Fri, 03 Jun 2022 18:25:42 +0000 Received: from pseudo (185.141.6.84.rev.sfr.net [84.6.141.185]) by smtp.cri.ensmp.fr (Postfix) with ESMTPSA id 691CEC005F; Fri, 3 Jun 2022 20:29:22 +0200 (CEST) Date: Fri, 3 Jun 2022 20:25:23 +0200 (CEST) From: Fabien COELHO X-X-Sender: fabien@pseudo Reply-To: Fabien COELHO To: Tom Lane cc: Alastair McKinley , PostgreSQL Bugs , Peter Eisentraut Subject: Re: psql 15beta1 does not print notices on the console until transaction completes In-Reply-To: Message-ID: References: <3662994.1653856025@sss.pgh.pa.us> User-Agent: Alpine 2.22 (DEB 394 2020-01-19) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="2056645051-1047994484-1654280738=:622878" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --2056645051-1047994484-1654280738=:622878 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8BIT >> I've looked into it. This behavior is triggered by the fact that "psql" is >> trying to keep notices and results in some logical order. >> >> The issue did not arise before because intermediate results where coldly >> discarded, so it did not show whether they were discarded before of after >> some notice was already shown:-) >> >> If notices are to be shown "right away", it means that some notice may be >> shown *before* the previous result has been shown, just because psql may >> not have had time to process it and they are just sent through the protocol >> and arriving for the next result, as shown with the attached patch on >> non-regression tests: >> >> SELECT 1 AS one \; SELECT warn('1.5') \; SELECT 2 AS two ; >> +NOTICE: warn 1.5 >> +CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE >> one >> ----- >> 1 >> (1 row) >> >> -NOTICE: warn 1.5 >> -CONTEXT: PL/pgSQL function warn(text) line 2 at RAISE >> warn >> ------ >> t >> >> Now the second statement warning is shown before the first statement >> output. I'm pretty sure that the initial order shoul show up from time to >> time, just because of the underlying race condition. >> >> Would this be okay? It simplifies the code significantly, but introduces >> possible race conditions in the output, which could be hidden from the non >> regression tests by removing the tests… > > This would be the simplest solution. > >> If notices are to be shown "right away" when processing a result, but not >> quite "right away" when the previous result is not yet finished, this is >> probably achievable but would require some effort and not so clear code. > >> Maybe psql could not get the next result when we do not need to know which >> is last, but the execution would have somehow 2 different paths. I have to >> try to see how terrible or not the resulting code would be. > > I've tried that (see v2 attached), but it does not work as I hoped: the fact > that a result has not yet been extracted does not preclude the server from > sending the notices relating to a statement, so delaying the getResult does > not fix the display order problem in anyway. I was quite naïve. > >> Another approach could be do drop the "only show the last result" >> compatibility, because then "psql" would not need to know that a result is >> the last, which requires to trigger the next one before closing the >> previous one, hence opening the race condition. > > That would not work, either, for the reason stated above. > > In order to have the best of both world, this requires more hopus-pocus: > accumulating the notices *but* displaying them as soon as dealing with a > statement is done *and* also while waiting for getResult. I see how I can try > to reduce a lot the out-of-order window… but not how to fully get rid of it. After more investigation and quite a few variants, the end result is that you cannot have the best of both words in all cases, i.e. instantaneous notices while keeping the order of results and their notices. The underlying reason for that is that some cases (gexec and others,) need to know which result is last because they need to to something special about it, which always requires to wait for the next result before doing anything with the previous one, so if the next one takes time, then the previous one is somehow suspended. In the previous setting, because intermediate results where coldly skipped, the user could not see whether notices for one statement where coming before or after some result, so all was well hidden, you just got the notices as they were sent and the final result displayed. The underlying truth was that it depended:-) My short term recommendation is to remove the attempt at keeping the notice/result order for a tradeoff of getting the notices as soon as they are emitted, i.e. basically patch 1 and the acceptance of the diffs, called 1-bis in the attached. Alternatively, the attached patch 3 keeps the order in the simple case, but not in the gset case, at the price of some complexity. I would not bet too much that these codes are immune to race conditions. -- Fabien. --2056645051-1047994484-1654280738=:622878 Content-Type: text/x-diff; name=psql-notices-1-bis.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-notices-1-bis.patch ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tb24uYyBiL3NyYy9iaW4v cHNxbC9jb21tb24uYw0KaW5kZXggMDNlNmQ5Y2U4Zi4uOTc0OTU5YzU5NSAx MDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9jb21tb24uYw0KKysrIGIvc3Jj L2Jpbi9wc3FsL2NvbW1vbi5jDQpAQCAtMTA2MSw0NCArMTA2MSw2IEBAIFBy aW50UXVlcnlSZXN1bHQoUEdyZXN1bHQgKnJlc3VsdCwgYm9vbCBsYXN0LCBi b29sIGlzX3dhdGNoLCBjb25zdCBwcmludFF1ZXJ5T3B0DQogCXJldHVybiBz dWNjZXNzOw0KIH0NCiANCi0vKg0KLSAqIERhdGEgc3RydWN0dXJlIGFuZCBm dW5jdGlvbnMgdG8gcmVjb3JkIG5vdGljZXMgd2hpbGUgdGhleSBhcmUNCi0g KiBlbWl0dGVkLCBzbyB0aGF0IHRoZXkgY2FuIGJlIHNob3duIGxhdGVyLg0K LSAqDQotICogV2UgbmVlZCB0byBrbm93IHdoaWNoIHJlc3VsdCBpcyBsYXN0 LCB3aGljaCByZXF1aXJlcyB0byBleHRyYWN0DQotICogb25lIHJlc3VsdCBp biBhZHZhbmNlLCBoZW5jZSB0d28gYnVmZmVycyBhcmUgbmVlZGVkLg0KLSAq Lw0KLXN0cnVjdCB0X25vdGljZV9tZXNzYWdlcw0KLXsNCi0JUFFFeHBCdWZm ZXJEYXRhIG1lc3NhZ2VzWzJdOw0KLQlpbnQJCQljdXJyZW50Ow0KLX07DQot DQotLyoNCi0gKiBTdG9yZSBub3RpY2VzIGluIGFwcHJvcHJpYXRlIGJ1ZmZl ciwgZm9yIGxhdGVyIGRpc3BsYXkuDQotICovDQotc3RhdGljIHZvaWQNCi1B cHBlbmROb3RpY2VNZXNzYWdlKHZvaWQgKmFyZywgY29uc3QgY2hhciAqbXNn KQ0KLXsNCi0Jc3RydWN0IHRfbm90aWNlX21lc3NhZ2VzICpub3RpY2VzID0g YXJnOw0KLQ0KLQlhcHBlbmRQUUV4cEJ1ZmZlclN0cigmbm90aWNlcy0+bWVz c2FnZXNbbm90aWNlcy0+Y3VycmVudF0sIG1zZyk7DQotfQ0KLQ0KLS8qDQot ICogU2hvdyBub3RpY2VzIHN0b3JlZCBpbiBidWZmZXIsIHdoaWNoIGlzIHRo ZW4gcmVzZXQuDQotICovDQotc3RhdGljIHZvaWQNCi1TaG93Tm90aWNlTWVz c2FnZShzdHJ1Y3QgdF9ub3RpY2VfbWVzc2FnZXMgKm5vdGljZXMpDQotew0K LQlQUUV4cEJ1ZmZlckRhdGEgKmN1cnJlbnQgPSAmbm90aWNlcy0+bWVzc2Fn ZXNbbm90aWNlcy0+Y3VycmVudF07DQotDQotCWlmICgqY3VycmVudC0+ZGF0 YSAhPSAnXDAnKQ0KLQkJcGdfbG9nX2luZm8oIiVzIiwgY3VycmVudC0+ZGF0 YSk7DQotCXJlc2V0UFFFeHBCdWZmZXIoY3VycmVudCk7DQotfQ0KLQ0KLQ0K IC8qDQogICogU2VuZFF1ZXJ5OiBzZW5kIHRoZSBxdWVyeSBzdHJpbmcgdG8g dGhlIGJhY2tlbmQNCiAgKiAoYW5kIHByaW50IG91dCByZXN1bHQpDQpAQCAt MTQ4Myw3ICsxNDQ1LDYgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMo Y29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjLCBib29s ICpzdnB0X2cNCiAJaW5zdHJfdGltZQliZWZvcmUsDQogCQkJCWFmdGVyOw0K IAlQR3Jlc3VsdCAgICpyZXN1bHQ7DQotCXN0cnVjdCB0X25vdGljZV9tZXNz YWdlcyBub3RpY2VzOw0KIA0KIAlpZiAodGltaW5nKQ0KIAkJSU5TVFJfVElN RV9TRVRfQ1VSUkVOVChiZWZvcmUpOw0KQEAgLTE1MTMsMTIgKzE0NzQsNiBA QCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVy eSwgZG91YmxlICplbGFwc2VkX21zZWMsIGJvb2wgKnN2cHRfZw0KIAkJcmV0 dXJuIDA7DQogCX0NCiANCi0JLyogaW50ZXJjZXB0IG5vdGljZXMgKi8NCi0J bm90aWNlcy5jdXJyZW50ID0gMDsNCi0JaW5pdFBRRXhwQnVmZmVyKCZub3Rp Y2VzLm1lc3NhZ2VzWzBdKTsNCi0JaW5pdFBRRXhwQnVmZmVyKCZub3RpY2Vz Lm1lc3NhZ2VzWzFdKTsNCi0JUFFzZXROb3RpY2VQcm9jZXNzb3IocHNldC5k YiwgQXBwZW5kTm90aWNlTWVzc2FnZSwgJm5vdGljZXMpOw0KLQ0KIAkvKiBm aXJzdCByZXN1bHQgKi8NCiAJcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5k Yik7DQogDQpAQCAtMTUzNiw3ICsxNDkxLDYgQEAgRXhlY1F1ZXJ5QW5kUHJv Y2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNl ZF9tc2VjLCBib29sICpzdnB0X2cNCiAJCQkgKi8NCiAJCQljb25zdCBjaGFy ICplcnJvciA9IFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlc3VsdCk7DQogDQot CQkJU2hvd05vdGljZU1lc3NhZ2UoJm5vdGljZXMpOw0KIAkJCWlmIChzdHJs ZW4oZXJyb3IpKQ0KIAkJCQlwZ19sb2dfaW5mbygiJXMiLCBlcnJvcik7DQog DQpAQCAtMTYwMSw4ICsxNTU1LDYgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jl c3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2Vj LCBib29sICpzdnB0X2cNCiAJCWlmIChyZXN1bHRfc3RhdHVzID09IFBHUkVT X0NPUFlfSU4gfHwNCiAJCQlyZXN1bHRfc3RhdHVzID09IFBHUkVTX0NPUFlf T1VUKQ0KIAkJew0KLQkJCVNob3dOb3RpY2VNZXNzYWdlKCZub3RpY2VzKTsN Ci0NCiAJCQlpZiAoaXNfd2F0Y2gpDQogCQkJew0KIAkJCQlDbGVhck9yU2F2 ZUFsbFJlc3VsdHMoKTsNCkBAIC0xNjEwLDEyICsxNTYyLDcgQEAgRXhlY1F1 ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJs ZSAqZWxhcHNlZF9tc2VjLCBib29sICpzdnB0X2cNCiAJCQkJcmV0dXJuIC0x Ow0KIAkJCX0NCiANCi0JCQkvKiB1c2Ugbm9ybWFsIG5vdGljZSBwcm9jZXNz b3IgZHVyaW5nIENPUFkgKi8NCi0JCQlQUXNldE5vdGljZVByb2Nlc3Nvcihw c2V0LmRiLCBOb3RpY2VQcm9jZXNzb3IsIE5VTEwpOw0KLQ0KIAkJCXN1Y2Nl c3MgJj0gSGFuZGxlQ29weVJlc3VsdCgmcmVzdWx0KTsNCi0NCi0JCQlQUXNl dE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBBcHBlbmROb3RpY2VNZXNzYWdl LCAmbm90aWNlcyk7DQogCQl9DQogDQogCQkvKg0KQEAgLTE2MjMsOSArMTU3 MCw3IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIg KnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYywgYm9vbCAqc3ZwdF9nDQog CQkgKiBzdHJpbmcsIGl0IHdpbGwgcmV0dXJuIE5VTEwuICBPdGhlcndpc2Us IHdlJ2xsIGhhdmUgb3RoZXIgcmVzdWx0cw0KIAkJICogdG8gcHJvY2Vzcy4g IFdlIG5lZWQgdG8gZG8gdGhhdCB0byBjaGVjayB3aGV0aGVyIHRoaXMgaXMg dGhlIGxhc3QuDQogCQkgKi8NCi0JCW5vdGljZXMuY3VycmVudCBePSAxOw0K IAkJbmV4dF9yZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0LmRiKTsNCi0JCW5v dGljZXMuY3VycmVudCBePSAxOw0KIAkJbGFzdCA9IChuZXh0X3Jlc3VsdCA9 PSBOVUxMKTsNCiANCiAJCS8qDQpAQCAtMTY0Nyw5ICsxNTkyLDYgQEAgRXhl Y1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRv dWJsZSAqZWxhcHNlZF9tc2VjLCBib29sICpzdnB0X2cNCiAJCQkqZWxhcHNl ZF9tc2VjID0gSU5TVFJfVElNRV9HRVRfTUlMTElTRUMoYWZ0ZXIpOw0KIAkJ fQ0KIA0KLQkJLyogbm90aWNlcyBhbHJlYWR5IHNob3duIGFib3ZlIGZvciBj b3B5ICovDQotCQlTaG93Tm90aWNlTWVzc2FnZSgmbm90aWNlcyk7DQotDQog CQkvKiB0aGlzIG1heSBvciBtYXkgbm90IHByaW50IHNvbWV0aGluZyBkZXBl bmRpbmcgb24gc2V0dGluZ3MgKi8NCiAJCWlmIChyZXN1bHQgIT0gTlVMTCkN CiAJCQlzdWNjZXNzICY9IFByaW50UXVlcnlSZXN1bHQocmVzdWx0LCBsYXN0 LCBmYWxzZSwgb3B0LCBwcmludFF1ZXJ5Rm91dCk7DQpAQCAtMTY1OSw3ICsx NjAxLDYgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hh ciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjLCBib29sICpzdnB0X2cN CiAJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVzdWx0LCB0cnVlKTsNCiANCiAJ CUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7DQotCQlub3RpY2VzLmN1cnJl bnQgXj0gMTsNCiAJCXJlc3VsdCA9IG5leHRfcmVzdWx0Ow0KIA0KIAkJaWYg KGNhbmNlbF9wcmVzc2VkKQ0KQEAgLTE2NjksMTEgKzE2MTAsNiBAQCBFeGVj UXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwgZG91 YmxlICplbGFwc2VkX21zZWMsIGJvb2wgKnN2cHRfZw0KIAkJfQ0KIAl9DQog DQotCS8qIHJlc2V0IG5vdGljZSBob29rICovDQotCVBRc2V0Tm90aWNlUHJv Y2Vzc29yKHBzZXQuZGIsIE5vdGljZVByb2Nlc3NvciwgTlVMTCk7DQotCXRl cm1QUUV4cEJ1ZmZlcigmbm90aWNlcy5tZXNzYWdlc1swXSk7DQotCXRlcm1Q UUV4cEJ1ZmZlcigmbm90aWNlcy5tZXNzYWdlc1sxXSk7DQotDQogCS8qIG1h eSBuZWVkIHRoaXMgdG8gcmVjb3ZlciBmcm9tIGNvbm4gbG9zcyBkdXJpbmcg Q09QWSAqLw0KIAlpZiAoIUNoZWNrQ29ubmVjdGlvbigpKQ0KIAkJcmV0dXJu IC0xOw0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 DQppbmRleCAyYTM4YTkzYTNiLi42MGFjYmQxMjQxIDEwMDY0NA0KLS0tIGEv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KKysrIGIvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KQEAgLTUzMTYsMTMg KzUzMTYsMTMgQEAgQVMgJCQNCiAkJDsNCiAtLSBzaG93IGJvdGgNCiBTRUxF Q1QgMSBBUyBvbmUgXDsgU0VMRUNUIHdhcm4oJzEuNScpIFw7IFNFTEVDVCAy IEFTIHR3byA7DQorTk9USUNFOiAgd2FybiAxLjUNCitDT05URVhUOiAgUEwv cGdTUUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCiAg b25lIA0KIC0tLS0tDQogICAgMQ0KICgxIHJvdykNCiANCi1OT1RJQ0U6ICB3 YXJuIDEuNQ0KLUNPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB3YXJuKHRl eHQpIGxpbmUgMiBhdCBSQUlTRQ0KICB3YXJuIA0KIC0tLS0tLQ0KICB0DQpA QCAtNTMzNSwxMyArNTMzNSwxMyBAQCBDT05URVhUOiAgUEwvcGdTUUwgZnVu Y3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCiANCiAtLSBcZ3Nl dCBhcHBsaWVzIHRvIGxhc3QgcXVlcnkgb25seQ0KIFNFTEVDVCAzIEFTIHRo cmVlIFw7IFNFTEVDVCB3YXJuKCczLjUnKSBcOyBTRUxFQ1QgNCBBUyBmb3Vy IFxnc2V0DQorTk9USUNFOiAgd2FybiAzLjUNCitDT05URVhUOiAgUEwvcGdT UUwgZnVuY3Rpb24gd2Fybih0ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCiAgdGhy ZWUgDQogLS0tLS0tLQ0KICAgICAgMw0KICgxIHJvdykNCiANCi1OT1RJQ0U6 ICB3YXJuIDMuNQ0KLUNPTlRFWFQ6ICBQTC9wZ1NRTCBmdW5jdGlvbiB3YXJu KHRleHQpIGxpbmUgMiBhdCBSQUlTRQ0KICB3YXJuIA0KIC0tLS0tLQ0KICB0 DQo= --2056645051-1047994484-1654280738=:622878 Content-Type: text/x-diff; name=psql-notices-3.patch Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=psql-notices-3.patch ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcHNxbC9jb21tb24uYyBiL3NyYy9iaW4v cHNxbC9jb21tb24uYw0KaW5kZXggMDNlNmQ5Y2U4Zi4uM2E1MjU4MzlhNyAx MDA2NDQNCi0tLSBhL3NyYy9iaW4vcHNxbC9jb21tb24uYw0KKysrIGIvc3Jj L2Jpbi9wc3FsL2NvbW1vbi5jDQpAQCAtMTA2MywyNiArMTA2MywyOCBAQCBQ cmludFF1ZXJ5UmVzdWx0KFBHcmVzdWx0ICpyZXN1bHQsIGJvb2wgbGFzdCwg Ym9vbCBpc193YXRjaCwgY29uc3QgcHJpbnRRdWVyeU9wdA0KIA0KIC8qDQog ICogRGF0YSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyB0byByZWNvcmQgbm90 aWNlcyB3aGlsZSB0aGV5IGFyZQ0KLSAqIGVtaXR0ZWQsIHNvIHRoYXQgdGhl eSBjYW4gYmUgc2hvd24gbGF0ZXIuDQotICoNCi0gKiBXZSBuZWVkIHRvIGtu b3cgd2hpY2ggcmVzdWx0IGlzIGxhc3QsIHdoaWNoIHJlcXVpcmVzIHRvIGV4 dHJhY3QNCi0gKiBvbmUgcmVzdWx0IGluIGFkdmFuY2UsIGhlbmNlIHR3byBi dWZmZXJzIGFyZSBuZWVkZWQuDQorICogZW1pdHRlZCwgc28gdGhhdCB0aGV5 IGNhbiBiZSBzaG93biBsYXRlci4gInByaW50IiB0ZWxscyB3aGV0aGVyDQor ICogdG8gcHJpbnQgb3IgdG8gc3RvcmUgdGhlIG1lc3NhZ2VzLg0KICAqLw0K IHN0cnVjdCB0X25vdGljZV9tZXNzYWdlcw0KIHsNCi0JUFFFeHBCdWZmZXJE YXRhIG1lc3NhZ2VzWzJdOw0KLQlpbnQJCQljdXJyZW50Ow0KKwlQUUV4cEJ1 ZmZlckRhdGEJbWVzc2FnZXM7DQorCXZvbGF0aWxlIGJvb2wJcHJpbnQ7DQog fTsNCiANCiAvKg0KICAqIFN0b3JlIG5vdGljZXMgaW4gYXBwcm9wcmlhdGUg YnVmZmVyLCBmb3IgbGF0ZXIgZGlzcGxheS4NCisgKiBUaGlzIGZ1bmN0aW9u IGlzIGNhbGxlZCBieSBhIHNpZ25hbCBoYW5kbGVyLg0KICAqLw0KIHN0YXRp YyB2b2lkDQotQXBwZW5kTm90aWNlTWVzc2FnZSh2b2lkICphcmcsIGNvbnN0 IGNoYXIgKm1zZykNCitBcHBlbmRPclByaW50Tm90aWNlTWVzc2FnZSh2b2lk ICphcmcsIGNvbnN0IGNoYXIgKm1zZykNCiB7DQogCXN0cnVjdCB0X25vdGlj ZV9tZXNzYWdlcyAqbm90aWNlcyA9IGFyZzsNCiANCi0JYXBwZW5kUFFFeHBC dWZmZXJTdHIoJm5vdGljZXMtPm1lc3NhZ2VzW25vdGljZXMtPmN1cnJlbnRd LCBtc2cpOw0KKwlpZiAobm90aWNlcy0+cHJpbnQpDQorCQlwZ19sb2dfaW5m bygiJXMiLCBtc2cpOw0KKwllbHNlDQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0 cigmbm90aWNlcy0+bWVzc2FnZXMsIG1zZyk7DQogfQ0KIA0KIC8qDQpAQCAt MTA5MSwxMSArMTA5MywxOCBAQCBBcHBlbmROb3RpY2VNZXNzYWdlKHZvaWQg KmFyZywgY29uc3QgY2hhciAqbXNnKQ0KIHN0YXRpYyB2b2lkDQogU2hvd05v dGljZU1lc3NhZ2Uoc3RydWN0IHRfbm90aWNlX21lc3NhZ2VzICpub3RpY2Vz KQ0KIHsNCi0JUFFFeHBCdWZmZXJEYXRhICpjdXJyZW50ID0gJm5vdGljZXMt Pm1lc3NhZ2VzW25vdGljZXMtPmN1cnJlbnRdOw0KKwlib29sIHByaW50ID0g bm90aWNlcy0+cHJpbnQ7DQorCVBRRXhwQnVmZmVyRGF0YSAqc2hvd24gPSAm bm90aWNlcy0+bWVzc2FnZXM7DQogDQotCWlmICgqY3VycmVudC0+ZGF0YSAh PSAnXDAnKQ0KLQkJcGdfbG9nX2luZm8oIiVzIiwgY3VycmVudC0+ZGF0YSk7 DQotCXJlc2V0UFFFeHBCdWZmZXIoY3VycmVudCk7DQorCS8qIGF2b2lkIHJh Y2UgY29uZGl0aW9uIG9uIHRoZSBidWZmZXIgd2hpY2ggY291bGQgbG9zZSBt ZXNzYWdlcyAqLw0KKwlub3RpY2VzLT5wcmludCA9IHRydWU7DQorDQorCWlm ICgqc2hvd24tPmRhdGEgIT0gJ1wwJykNCisJCXBnX2xvZ19pbmZvKCIlcyIs IHNob3duLT5kYXRhKTsNCisJcmVzZXRQUUV4cEJ1ZmZlcihzaG93bik7DQor DQorCS8qIHJlc3RvcmUgcHJldmlvdXMgcHJpbnRpbmcgc3RhdHVzICovDQor CW5vdGljZXMtPnByaW50ID0gcHJpbnQ7DQogfQ0KIA0KIA0KQEAgLTE0Nzgs NiArMTQ4Nyw4IEBAIHN0YXRpYyBpbnQNCiBFeGVjUXVlcnlBbmRQcm9jZXNz UmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21z ZWMsIGJvb2wgKnN2cHRfZ29uZV9wLA0KIAkJCQkJCSAgIGJvb2wgaXNfd2F0 Y2gsIGNvbnN0IHByaW50UXVlcnlPcHQgKm9wdCwgRklMRSAqcHJpbnRRdWVy eUZvdXQpDQogew0KKwkvKiB3aGV0aGVyIHdlIG5lZWQgdG8ga25vdyB3aGV0 aGVyIGEgcmVzdWx0IGlzIHRoZSBsYXN0IGVhcmx5ICovDQorCWJvb2wJCW5l ZWRfbGFzdCA9IHBzZXQuZ3NldF9wcmVmaXggfHwgcHNldC5nZXhlY19mbGFn IHx8IHBzZXQuY3Jvc3N0YWJfZmxhZyB8fCAhcHNldC5zaG93X2FsbF9yZXN1 bHRzOw0KIAlib29sCQl0aW1pbmcgPSBwc2V0LnRpbWluZzsNCiAJYm9vbAkJ c3VjY2VzczsNCiAJaW5zdHJfdGltZQliZWZvcmUsDQpAQCAtMTUxMywxMSAr MTUyNCwxMCBAQCBFeGVjUXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBj aGFyICpxdWVyeSwgZG91YmxlICplbGFwc2VkX21zZWMsIGJvb2wgKnN2cHRf Zw0KIAkJcmV0dXJuIDA7DQogCX0NCiANCi0JLyogaW50ZXJjZXB0IG5vdGlj ZXMgKi8NCi0Jbm90aWNlcy5jdXJyZW50ID0gMDsNCi0JaW5pdFBRRXhwQnVm ZmVyKCZub3RpY2VzLm1lc3NhZ2VzWzBdKTsNCi0JaW5pdFBRRXhwQnVmZmVy KCZub3RpY2VzLm1lc3NhZ2VzWzFdKTsNCi0JUFFzZXROb3RpY2VQcm9jZXNz b3IocHNldC5kYiwgQXBwZW5kTm90aWNlTWVzc2FnZSwgJm5vdGljZXMpOw0K KwkvKiBpbnRlcmNlcHQgbm90aWNlcywgb3Igbm90LCBkZXBlbmRpbmcgb24g c2hvdyBtb2RlICovDQorCW5vdGljZXMucHJpbnQgPSB0cnVlOw0KKwlpbml0 UFFFeHBCdWZmZXIoJm5vdGljZXMubWVzc2FnZXMpOw0KKwlQUXNldE5vdGlj ZVByb2Nlc3Nvcihwc2V0LmRiLCBBcHBlbmRPclByaW50Tm90aWNlTWVzc2Fn ZSwgJm5vdGljZXMpOw0KIA0KIAkvKiBmaXJzdCByZXN1bHQgKi8NCiAJcmVz dWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQpAQCAtMTUyOCw2ICsxNTM4 LDEzIEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0IGNoYXIg KnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYywgYm9vbCAqc3ZwdF9nDQog CQlQR3Jlc3VsdCAgICpuZXh0X3Jlc3VsdDsNCiAJCWJvb2wJCWxhc3Q7DQog DQorCQkvKg0KKwkJICogTm90aWNlcyBjb21pbmcgaW4gZnJvbSBub3cgb24g YXJlIGF0dHJpYnV0ZWQgdG8gdGhlIG5leHQgKGZ1dHVyZSkgcmVzdWx0LA0K KwkJICogc28gZGlyZWN0IHByaW50aW5nIGlzIHN1c3BlbmRlZCB0aWxsIHRo aXMgY3VycmVudCByZXN1bHQgaXMgZGlzcGxheWVkLCBidXQNCisJCSAqIG9u bHkgaWYgaXQgaXMgcmVhbGx5IGdvaW5nIHRvIGJlIGRpc3BsYXllZC4NCisJ CSAqLw0KKwkJbm90aWNlcy5wcmludCA9ICFwc2V0LnNob3dfYWxsX3Jlc3Vs dHM7DQorDQogCQlpZiAoIUFjY2VwdFJlc3VsdChyZXN1bHQsIGZhbHNlKSkN CiAJCXsNCiAJCQkvKg0KQEAgLTE1MzYsMTAgKzE1NTMsMTMgQEAgRXhlY1F1 ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3QgY2hhciAqcXVlcnksIGRvdWJs ZSAqZWxhcHNlZF9tc2VjLCBib29sICpzdnB0X2cNCiAJCQkgKi8NCiAJCQlj b25zdCBjaGFyICplcnJvciA9IFBRcmVzdWx0RXJyb3JNZXNzYWdlKHJlc3Vs dCk7DQogDQotCQkJU2hvd05vdGljZU1lc3NhZ2UoJm5vdGljZXMpOw0KIAkJ CWlmIChzdHJsZW4oZXJyb3IpKQ0KIAkJCQlwZ19sb2dfaW5mbygiJXMiLCBl cnJvcik7DQogDQorCQkJLyogdGhlbiByZWFjdGl2YXRlIG5vdGljZSBmbG93 IHRpbGwgbmV4dCByZXN1bHQgKi8NCisJCQlub3RpY2VzLnByaW50ID0gdHJ1 ZTsNCisJCQlTaG93Tm90aWNlTWVzc2FnZSgmbm90aWNlcyk7DQorDQogCQkJ Q2hlY2tDb25uZWN0aW9uKCk7DQogCQkJaWYgKCFpc193YXRjaCkNCiAJCQkJ U2V0UmVzdWx0VmFyaWFibGVzKHJlc3VsdCwgZmFsc2UpOw0KQEAgLTE1NjYs NiArMTU4Niw5IEBAIEV4ZWNRdWVyeUFuZFByb2Nlc3NSZXN1bHRzKGNvbnN0 IGNoYXIgKnF1ZXJ5LCBkb3VibGUgKmVsYXBzZWRfbXNlYywgYm9vbCAqc3Zw dF9nDQogCQkJZWxzZQ0KIAkJCQlyZXN1bHQgPSBQUWdldFJlc3VsdChwc2V0 LmRiKTsNCiANCisJCQkvKiBzdXNwZW5kIG5vdGljZSBmbG93IGFnYWluIGFm dGVyIHRoZSByZXN1bHQsIGlmIG5lZWRlZCAqLw0KKwkJCW5vdGljZXMucHJp bnQgPSAhcHNldC5zaG93X2FsbF9yZXN1bHRzOw0KKw0KIAkJCS8qDQogCQkJ ICogR2V0IGN1cnJlbnQgdGltaW5nIG1lYXN1cmUgaW4gY2FzZSBhbiBlcnJv ciBvY2N1cnMNCiAJCQkgKi8NCkBAIC0xNjAxLDggKzE2MjQsNiBAQCBFeGVj UXVlcnlBbmRQcm9jZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwgZG91 YmxlICplbGFwc2VkX21zZWMsIGJvb2wgKnN2cHRfZw0KIAkJaWYgKHJlc3Vs dF9zdGF0dXMgPT0gUEdSRVNfQ09QWV9JTiB8fA0KIAkJCXJlc3VsdF9zdGF0 dXMgPT0gUEdSRVNfQ09QWV9PVVQpDQogCQl7DQotCQkJU2hvd05vdGljZU1l c3NhZ2UoJm5vdGljZXMpOw0KLQ0KIAkJCWlmIChpc193YXRjaCkNCiAJCQl7 DQogCQkJCUNsZWFyT3JTYXZlQWxsUmVzdWx0cygpOw0KQEAgLTE2MTAsMjIg KzE2MzEsMzggQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29uc3Qg Y2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjLCBib29sICpzdnB0 X2cNCiAJCQkJcmV0dXJuIC0xOw0KIAkJCX0NCiANCi0JCQkvKiB1c2Ugbm9y bWFsIG5vdGljZSBwcm9jZXNzb3IgZHVyaW5nIENPUFkgKi8NCi0JCQlQUXNl dE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBOb3RpY2VQcm9jZXNzb3IsIE5V TEwpOw0KKwkJCS8qIGJhY2sgdG8gbm9ybWFsIG5vdGljZSBwcm9jZXNzb3Ig ZHVyaW5nIENPUFkgKi8NCisJCQlub3RpY2VzLnByaW50ID0gdHJ1ZTsNCisJ CQlTaG93Tm90aWNlTWVzc2FnZSgmbm90aWNlcyk7DQogDQogCQkJc3VjY2Vz cyAmPSBIYW5kbGVDb3B5UmVzdWx0KCZyZXN1bHQpOw0KIA0KLQkJCVBRc2V0 Tm90aWNlUHJvY2Vzc29yKHBzZXQuZGIsIEFwcGVuZE5vdGljZU1lc3NhZ2Us ICZub3RpY2VzKTsNCisJCQlub3RpY2VzLnByaW50ID0gIXBzZXQuc2hvd19h bGxfcmVzdWx0czsNCiAJCX0NCiANCiAJCS8qDQogCQkgKiBDaGVjayBQUWdl dFJlc3VsdCgpIGFnYWluLiAgSW4gdGhlIHR5cGljYWwgY2FzZSBvZiBhIHNp bmdsZS1jb21tYW5kDQogCQkgKiBzdHJpbmcsIGl0IHdpbGwgcmV0dXJuIE5V TEwuICBPdGhlcndpc2UsIHdlJ2xsIGhhdmUgb3RoZXIgcmVzdWx0cw0KIAkJ ICogdG8gcHJvY2Vzcy4gIFdlIG5lZWQgdG8gZG8gdGhhdCB0byBjaGVjayB3 aGV0aGVyIHRoaXMgaXMgdGhlIGxhc3QuDQorCQkgKg0KKwkJICogTm90ZSB0 aGF0IG5vdGljZXMgYXJlIHBvc3NpYmx5IHN1c3BlbmRlZCB3aGlsZSB3YWl0 aW5nIGZvciB0aGUgbmV4dA0KKwkJICogcmVzdWx0IGJlY2F1c2UgdGhlIHBy ZXZpb3VzIHJlc3VsdCBoYXMgbm90IGJlZW4gZGlzcGxheWVkIHlldC4NCisJ CSAqDQorCQkgKiBJZiB0aGUgbmV4dCBxdWVyaWVzIHRha2VzIHNvbWUgdGlt ZSwgdGhlIG91dHB1dCBvZiB0aGUgY3VycmVudCBxdWVyeQ0KKwkJICogaXMg c3VzcGVuZGVkLCBlZyAiU0VMRUNUIDAgXDsgU0VMRUNUIHRha2VfbG9uZ190 aW1lKCkgXGdzZXQiIHdpbGwgd2FpdA0KKwkJICogYmVmb3JlIHNob3dpbmcg dGhlIGluaXRpYWwgMC4gVGhlIG5vdGljZXMgYXJlIHNob3duIGFueXdheSwg cG9zc2libHkgb3V0DQorCQkgKiBvZiBvcmRlciwgYXMgYSB0cmFkZW9mZiBi ZXR3ZWVuIGtlZXBpbmcgdGhlIG9yZGVyIHZzIGRlbGF5aW5nIHRoZSBub3Rp Y2VzLg0KIAkJICovDQotCQlub3RpY2VzLmN1cnJlbnQgXj0gMTsNCi0JCW5l eHRfcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNldC5kYik7DQotCQlub3RpY2Vz LmN1cnJlbnQgXj0gMTsNCisJCWlmIChuZWVkX2xhc3QpDQorCQl7DQorCQkJ bm90aWNlcy5wcmludCA9IHRydWU7DQorCQkJU2hvd05vdGljZU1lc3NhZ2Uo Jm5vdGljZXMpOw0KKwkJCW5leHRfcmVzdWx0ID0gUFFnZXRSZXN1bHQocHNl dC5kYik7DQorCQkJbm90aWNlcy5wcmludCA9ICFwc2V0LnNob3dfYWxsX3Jl c3VsdHM7DQorCQl9DQorCQllbHNlDQorCQkJbmV4dF9yZXN1bHQgPSBOVUxM Ow0KKw0KIAkJbGFzdCA9IChuZXh0X3Jlc3VsdCA9PSBOVUxMKTsNCiANCiAJ CS8qDQpAQCAtMTY0NywxOSArMTY4NCwyOCBAQCBFeGVjUXVlcnlBbmRQcm9j ZXNzUmVzdWx0cyhjb25zdCBjaGFyICpxdWVyeSwgZG91YmxlICplbGFwc2Vk X21zZWMsIGJvb2wgKnN2cHRfZw0KIAkJCSplbGFwc2VkX21zZWMgPSBJTlNU Ul9USU1FX0dFVF9NSUxMSVNFQyhhZnRlcik7DQogCQl9DQogDQotCQkvKiBu b3RpY2VzIGFscmVhZHkgc2hvd24gYWJvdmUgZm9yIGNvcHkgKi8NCi0JCVNo b3dOb3RpY2VNZXNzYWdlKCZub3RpY2VzKTsNCi0NCiAJCS8qIHRoaXMgbWF5 IG9yIG1heSBub3QgcHJpbnQgc29tZXRoaW5nIGRlcGVuZGluZyBvbiBzZXR0 aW5ncyAqLw0KIAkJaWYgKHJlc3VsdCAhPSBOVUxMKQ0KKwkJew0KIAkJCXN1 Y2Nlc3MgJj0gUHJpbnRRdWVyeVJlc3VsdChyZXN1bHQsIGxhc3QsIGZhbHNl LCBvcHQsIHByaW50UXVlcnlGb3V0KTsNCiANCisJCQkvKiByZWFjdGl2YXRl IG5vdGljZSBmbG93IGFmdGVyIHByaW50aW5nIHRoZSByZXN1bHQgKi8NCisJ CQlub3RpY2VzLnByaW50ID0gdHJ1ZTsNCisJCQlTaG93Tm90aWNlTWVzc2Fn ZSgmbm90aWNlcyk7DQorCQl9DQorDQorCQkvKiB3ZSBuZWVkIHRvIGtub3cg d2hldGhlciBpdCB3YXMgdGhlIGxhc3Qgbm93IGFueXdheSAqLw0KKwkJaWYg KCFuZWVkX2xhc3QpDQorCQl7DQorCQkJbmV4dF9yZXN1bHQgPSBQUWdldFJl c3VsdChwc2V0LmRiKTsNCisJCQlsYXN0ID0gKG5leHRfcmVzdWx0ID09IE5V TEwpOw0KKwkJfQ0KKw0KIAkJLyogc2V0IHZhcmlhYmxlcyBvbiBsYXN0IHJl c3VsdCBpZiBhbGwgd2VudCB3ZWxsICovDQogCQlpZiAoIWlzX3dhdGNoICYm IGxhc3QgJiYgc3VjY2VzcykNCiAJCQlTZXRSZXN1bHRWYXJpYWJsZXMocmVz dWx0LCB0cnVlKTsNCiANCiAJCUNsZWFyT3JTYXZlUmVzdWx0KHJlc3VsdCk7 DQotCQlub3RpY2VzLmN1cnJlbnQgXj0gMTsNCiAJCXJlc3VsdCA9IG5leHRf cmVzdWx0Ow0KIA0KIAkJaWYgKGNhbmNlbF9wcmVzc2VkKQ0KQEAgLTE2Njks MTAgKzE3MTUsMTMgQEAgRXhlY1F1ZXJ5QW5kUHJvY2Vzc1Jlc3VsdHMoY29u c3QgY2hhciAqcXVlcnksIGRvdWJsZSAqZWxhcHNlZF9tc2VjLCBib29sICpz dnB0X2cNCiAJCX0NCiAJfQ0KIA0KLQkvKiByZXNldCBub3RpY2UgaG9vayAq Lw0KKwkvKiByZXNldCBzdGFuZGFyZCBub3RpY2UgaG9vayAqLw0KIAlQUXNl dE5vdGljZVByb2Nlc3Nvcihwc2V0LmRiLCBOb3RpY2VQcm9jZXNzb3IsIE5V TEwpOw0KLQl0ZXJtUFFFeHBCdWZmZXIoJm5vdGljZXMubWVzc2FnZXNbMF0p Ow0KLQl0ZXJtUFFFeHBCdWZmZXIoJm5vdGljZXMubWVzc2FnZXNbMV0pOw0K Kw0KKwkvKiBmbHVzaCBub3RpY2VzIGlmIGFueSwgYmVmb3JlIGNsZWFuaW5n IHVwICovDQorCW5vdGljZXMucHJpbnQgPSB0cnVlOw0KKwlTaG93Tm90aWNl TWVzc2FnZSgmbm90aWNlcyk7DQorCXRlcm1QUUV4cEJ1ZmZlcigmbm90aWNl cy5tZXNzYWdlcyk7DQogDQogCS8qIG1heSBuZWVkIHRoaXMgdG8gcmVjb3Zl ciBmcm9tIGNvbm4gbG9zcyBkdXJpbmcgQ09QWSAqLw0KIAlpZiAoIUNoZWNr Q29ubmVjdGlvbigpKQ0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHNxbC5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BzcWwub3V0DQppbmRleCAyYTM4YTkzYTNiLi5iYWVkZjA0YmE1IDEwMDY0 NA0KLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0K KysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dA0KQEAg LTUzMzUsMTMgKzUzMzUsMTMgQEAgQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0 aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0IFJBSVNFDQogDQogLS0gXGdzZXQg YXBwbGllcyB0byBsYXN0IHF1ZXJ5IG9ubHkNCiBTRUxFQ1QgMyBBUyB0aHJl ZSBcOyBTRUxFQ1Qgd2FybignMy41JykgXDsgU0VMRUNUIDQgQVMgZm91ciBc Z3NldA0KK05PVElDRTogIHdhcm4gMy41DQorQ09OVEVYVDogIFBML3BnU1FM IGZ1bmN0aW9uIHdhcm4odGV4dCkgbGluZSAyIGF0IFJBSVNFDQogIHRocmVl IA0KIC0tLS0tLS0NCiAgICAgIDMNCiAoMSByb3cpDQogDQotTk9USUNFOiAg d2FybiAzLjUNCi1DT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gd2Fybih0 ZXh0KSBsaW5lIDIgYXQgUkFJU0UNCiAgd2FybiANCiAtLS0tLS0NCiAgdA0K --2056645051-1047994484-1654280738=:622878--