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 1wWOrx-002aTs-05 for pgpool-hackers@arkaria.postgresql.org; Mon, 08 Jun 2026 01:33:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wWOrt-000LTh-2n for pgpool-hackers@arkaria.postgresql.org; Mon, 08 Jun 2026 01:33:33 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wWOrt-000LTZ-1T for pgpool-hackers@lists.postgresql.org; Mon, 08 Jun 2026 01:33:33 +0000 Received: from meldrar.postgresql.org ([2a02:c0:301:0:ffff::31]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1wWOro-00000001cAS-1NMt for pgpool-hackers@lists.postgresql.org; Mon, 08 Jun 2026 01:33:32 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=postgresql.org; s=20171124; h=Content-Transfer-Encoding:Content-Type: Mime-Version:From:Subject:Cc:To:Message-Id:Date:Sender:Reply-To:Content-ID: Content-Description:In-Reply-To:References; bh=ofbJ+cuaM+0x886nZUMdDnvUHodidnG8/46r7QCxjZs=; b=yXybAIstgSFHpu6q2H55PUyutX sS3hyPrjMGKedeyMuai9u9ZHgrxP5apxI8wKFMOTa2mzDgWLEI68PxAg/qfwfZqBrYlllqTJqZikO agB129fqP5CLHmQ1T0dBzKmxYCCowkrW2Ntuz+ZT+gfXwHePHuK7lN/lkkARCgbtQ3ybwYwKEaoIG mPHq3aa8/LyGtiIzNe7/wlGVUfddVjH0ow2OO6gchJ4h2ONtGwn6xnQYT3jBIafBqg4Peq0sYV5AZ W6e6xnaAC/7/vbX4QoJtDw1lm5yzZ2y3uebovgzCKgxWdajofLkCNfn5LgvmZKSAGMhB4SuOZaN7O n4PNbMfg==; Received: from [2409:11:4120:300:b7c3:835c:486d:d5d7] (helo=localhost) by meldrar.postgresql.org with esmtpsa (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wWOri-005UaB-1C; Mon, 08 Jun 2026 01:33:26 +0000 Date: Mon, 08 Jun 2026 10:33:12 +0900 (JST) Message-Id: <20260608.103312.126925225500634683.ishii@postgresql.org> To: pgpool-hackers@lists.postgresql.org Cc: emond.papegaaij@gmail.com Subject: Fix signal handler in pgpool main From: Tatsuo Ishii X-Mailer: Mew version 6.8 on Emacs 29.3 Mime-Version: 1.0 Content-Type: Multipart/Mixed; boundary="--Next_Part(Mon_Jun__8_10_33_12_2026_106)--" Content-Transfer-Encoding: 7bit X-Host-Lookup-Failed: Reverse DNS lookup failed for 2409:11:4120:300:b7c3:835c:486d:d5d7 (failed) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk ----Next_Part(Mon_Jun__8_10_33_12_2026_106)-- Content-Type: Text/Plain; charset=us-ascii Content-Transfer-Encoding: 7bit I got a bug report regarding pgpool main process from Emond Papegaaij: its exit/reload signal handler uses non signal safe functions, and it could lead to a crash of the process. Attached is the patch from him generated by Claude Code, with slight modifications by me. Basically it changes the signal handler to async-signal-safe calls only: capture the signal number into a new volatile sig_atomic_t main_exit_request, write one byte to the existing self-pipe to wake the main loop, restore errno, and return. The actual shutdown is performed synchronously by a new do_shutdown() function called from the pgpol main loop at the top of every iteration (via check_requests()) and also right after the inner pool_pause() returns, so a signal arriving during the 2-second select() sleep is acted on without an extra tick of latency. I think this patch is important and worth to apply to all supported branches. However, since it touches one of the most critical part of pgpool, I would like to apply to master branch first and see how our build-farm acts before back patching (it will take a few days). Comments? -- Tatsuo Ishii SRA OSS K.K. English: http://www.sraoss.co.jp/index_en/ Japanese:http://www.sraoss.co.jp ----Next_Part(Mon_Jun__8_10_33_12_2026_106)-- Content-Type: Text/X-Patch; charset=iso-8859-7 Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="v1-0001-Do-not-use-signal-unsafe-functions-in-pgpool-main.patch" RnJvbSA5ZjQwMjJmMTZiZTVhNDgyZGE5NWY2MDhhZmU2ODY4MDNlYmJhMGQ0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4N CkRhdGU6IE1vbiwgOCBKdW4gMjAyNiAwOToxODoyMyArMDkwMA0KU3ViamVjdDogW1BBVENIIHYx XSBEbyBub3QgdXNlIHNpZ25hbCB1bnNhZmUgZnVuY3Rpb25zIGluIHBncG9vbCBtYWluIHByb2Nl c3MNCiBzaWduYWwgaGFuZGxlci4NCg0KVGhlIHBncG9vbCBtYWluIHByb2Nlc3MgU0lHVEVSTS9T SUdJTlQvU0lHUVVJVCBoYW5kbGVyIGRpZCB0aGUgZnVsbA0Kc2h1dGRvd24gd29yayBpbmxpbmU6 IGVyZXBvcnQoKSAodHdpY2UpLA0KcG9vbF9zZW1hcGhvcmVfbG9jayhNQUlOX0VYSVRfSEFORExF Ul9TRU0pLCB0ZXJtaW5hdGVfYWxsX2NoaWxkcmVucygpDQp3aXRoIGEgYmxvY2tpbmcgd2FpdHBp ZCgtMSwgLi4uLCAwKSBhbmQgbW9yZSBlcmVwb3J0KCkgY2FsbHMsIGtpbGwoKQ0Kb2YgdGhlIGZv bGxvdy1jaGlsZCBncm91cCwgYW5kIGZpbmFsbHkgZXhpdCgzKSB3aGljaCBydW5zIGF0ZXhpdA0K aGFuZGxlcnMgYW5kIHN0ZGlvIGZsdXNoLiAgTm9uZSBvZiB0aGVzZSBhcmUgYXN5bmMtc2lnbmFs LXNhZmUgKFBPU0lYDQoyMDI0IHNlY3Rpb24gMi40LjMgWzFdKS4gIEluIHBhcnRpY3VsYXIsIFNJ R1RFUk0gYXJyaXZpbmcgd2hpbGUgcGdwb29sDQppcyBtaWQtZXJlcG9ydCgpIC8gbWlkLXBhbGxv YygpIC8gbWlkLXNlbW9wKCkgY291bGQgY3Jhc2gsIGhhbmcsIG9yDQpjb3JydXB0IGhlYXAgc3Rh dGUuICBCZWNhdXNlIHRoZSBwZ3Bvb2wgbWFpbiBwcm9jZXNzIGlzIHRoZSBwYXJlbnQsIGENCmNy YXNoIGhlcmUgdGFrZXMgZG93biBldmVyeSBzZXNzaW9uIGFuZCB0aGUgcGdwb29sIGNsdXN0ZXIu DQoNClRoaXMgY29tbWl0IHJlc3RyaWN0cyB0aGUgaGFuZGxlciB0byBhc3luYy1zaWduYWwtc2Fm ZSBjYWxscyBvbmx5Og0KY2FwdHVyZSB0aGUgc2lnbmFsIG51bWJlciBpbnRvIGEgbmV3IHZvbGF0 aWxlIHNpZ19hdG9taWNfdA0KbWFpbl9leGl0X3JlcXVlc3QsIHdyaXRlIG9uZSBieXRlIHRvIHRo ZSBleGlzdGluZyBzZWxmLXBpcGUgdG8gd2FrZQ0KdGhlIG1haW4gbG9vcCwgcmVzdG9yZSBlcnJu bywgYW5kIHJldHVybi4gIFRoZSBhY3R1YWwgc2h1dGRvd24gaXMNCnBlcmZvcm1lZCBzeW5jaHJv bm91c2x5IGJ5IGEgbmV3IGRvX3NodXRkb3duKCkgZnVuY3Rpb24gY2FsbGVkIGZyb20NCnRoZSBw Z3BvbCBtYWluIGxvb3AgYXQgdGhlIHRvcCBvZiBldmVyeSBpdGVyYXRpb24gKHZpYQ0KY2hlY2tf cmVxdWVzdHMoKSkgYW5kIGFsc28gcmlnaHQgYWZ0ZXIgdGhlIGlubmVyIHBvb2xfcGF1c2UoKSBy ZXR1cm5zLA0Kc28gYSBzaWduYWwgYXJyaXZpbmcgZHVyaW5nIHRoZSAyLXNlY29uZCBzZWxlY3Qo KSBzbGVlcCBpcyBhY3RlZCBvbg0Kd2l0aG91dCBhbiBleHRyYSB0aWNrIG9mIGxhdGVuY3kuDQoN CmRvX3NodXRkb3duKCkgY2FycmllcyB0aGUgcHJldmlvdXMgYm9keSB2ZXJiYXRpbSAtIHRoZQ0K bm9uLWFzeW5jLXNhZmUgY2FsbHMgKGVyZXBvcnQsIHBvb2xfc2VtYXBob3JlX2xvY2ssDQp0ZXJt aW5hdGVfYWxsX2NoaWxkcmVucyB3aXRoIGl0cyBibG9ja2luZyB3YWl0cGlkLCBleGl0KDMpKSBh cmUgbm93DQppbnZva2VkIGZyb20gbm9ybWFsIGNvbnRleHQgd2hlcmUgdGhleSBhcmUgc2FmZS4N Cg0KWzFdIGh0dHBzOi8vcHVicy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvOTc5OTkxOTc5OS9m dW5jdGlvbnMvVjJfY2hhcDAyLmh0bWwjdGFnXzE2XzA0XzAzDQoNClJlcG9ydGVkLWJ5OiBFbW9u ZCBQYXBlZ2FhaWogPGVtb25kLnBhcGVnYWFpakBnbWFpbC5jb20+DQpSZXBvcnRlZC1ieTogQ2xh dWRlIGNvZGUNCkF1dGhvcjogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4NCkRp c2N1c3Npb246DQpCYWNrcGF0Y2gtdGhyb3VnaDogdjQuMw0KLS0tDQogc3JjL21haW4vcGdwb29s X21haW4uYyB8IDExMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLQ0K IDEgZmlsZSBjaGFuZ2VkLCA5NSBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkNCg0KZGlm ZiAtLWdpdCBhL3NyYy9tYWluL3BncG9vbF9tYWluLmMgYi9zcmMvbWFpbi9wZ3Bvb2xfbWFpbi5j DQppbmRleCBkYmYxYmZkMTQuLjViYjMzZThkZSAxMDA2NDQNCi0tLSBhL3NyYy9tYWluL3BncG9v bF9tYWluLmMNCisrKyBiL3NyYy9tYWluL3BncG9vbF9tYWluLmMNCkBAIC0xNzEsNiArMTcxLDcg QEAgc3RhdGljIHZvaWQga2lsbF9hbGxfY2hpbGRyZW4oaW50IHNpZyk7DQogc3RhdGljIHBpZF90 IGZvcmtfZm9sbG93X2NoaWxkKGludCBvbGRfbWFpbl9ub2RlLCBpbnQgbmV3X3ByaW1hcnksIGlu dCBvbGRfcHJpbWFyeSk7DQogc3RhdGljIGludAlyZWFkX3N0YXR1c19maWxlKGJvb2wgZGlzY2Fy ZF9zdGF0dXMpOw0KIHN0YXRpYyBSRVRTSUdUWVBFIGV4aXRfaGFuZGxlcihpbnQgc2lnKTsNCitz dGF0aWMgdm9pZCBkb19zaHV0ZG93bihpbnQgc2lnKTsNCiBzdGF0aWMgUkVUU0lHVFlQRSByZWFw X2hhbmRsZXIoaW50IHNpZyk7DQogc3RhdGljIFJFVFNJR1RZUEUgc2lndXNyMV9oYW5kbGVyKGlu dCBzaWcpOw0KIHN0YXRpYyB2b2lkIHNpZ3VzcjFfaW50ZXJydXB0X3Byb2Nlc3Nvcih2b2lkKTsN CkBAIC0yNTMsNiArMjU0LDEyIEBAIHZvbGF0aWxlIHNpZ19hdG9taWNfdCByZWxvYWRfY29uZmln X3JlcXVlc3QgPSAwOw0KIHN0YXRpYyB2b2xhdGlsZSBzaWdfYXRvbWljX3Qgc2lndXNyMV9yZXF1 ZXN0ID0gMDsNCiBzdGF0aWMgdm9sYXRpbGUgc2lnX2F0b21pY190IHNpZ2NobGRfcmVxdWVzdCA9 IDA7DQogc3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCB3YWtldXBfcmVxdWVzdCA9IDA7DQor c3RhdGljIHZvbGF0aWxlIHNpZ19hdG9taWNfdCBtYWluX2V4aXRfcmVxdWVzdCA9IDA7CS8qIHNl dCBieSBleGl0X2hhbmRsZXI7DQorCQkJCQkJCQkJCQkJICogY2FycmllcyB0aGUgY2FwdHVyZWQg c2lnbmFsDQorCQkJCQkJCQkJCQkJICogbnVtYmVyIChTSUdURVJNL0lOVC9RVUlUKQ0KKwkJCQkJ CQkJCQkJCSAqIHNvIHRoZSBtYWluIGxvb3AgY2FuDQorCQkJCQkJCQkJCQkJICogcGVyZm9ybSB0 aGUgKG5vbi1hc3luYy1zYWZlKQ0KKwkJCQkJCQkJCQkJCSAqIHNodXRkb3duIHdvcmsgaXRzZWxm LiAqLw0KIA0KIHN0YXRpYyBpbnQJcGlwZV9mZHNbMl07CQkvKiBmb3IgZGVsaXZlcmluZyBzaWdu YWxzICovDQogDQpAQCAtNzA4LDYgKzcxNSwxMyBAQCBQZ3Bvb2xNYWluKGJvb2wgZGlzY2FyZF9z dGF0dXMsIGJvb2wgY2xlYXJfbWVtY2FjaGVfb2lkbWFwcykNCiAJCQlyID0gcG9vbF9wYXVzZSgm dCk7DQogCQkJUE9PTF9TRVRNQVNLKCZCbG9ja1NpZyk7DQogDQorCQkJLyoNCisJCQkgKiBJZiBh IFNJR1RFUk0vU0lHSU5UL1NJR1FVSVQgd2FzIHF1ZXVlZCBieSBleGl0X2hhbmRsZXIsDQorCQkJ ICogc2VydmljZSBpdCBpbW1lZGlhdGVseSByYXRoZXIgdGhhbiB3YWl0aW5nIGFub3RoZXIgdGlj ay4NCisJCQkgKi8NCisJCQlpZiAobWFpbl9leGl0X3JlcXVlc3QpDQorCQkJCWRvX3NodXRkb3du KG1haW5fZXhpdF9yZXF1ZXN0KTsNCisNCiAJCQlpZiAocG9vbF9jb25maWctPnByb2Nlc3NfbWFu YWdlbWVudCA9PSBQTV9EWU5BTUlDKQ0KIAkJCQlzZXJ2aWNlX2NoaWxkX3Byb2Nlc3NlcygpOw0K IA0KQEAgLTEyOTAsNDggKzEzMDQsMTA0IEBAIHRlcm1pbmF0ZV9hbGxfY2hpbGRyZW5zKGludCBz aWcpDQogDQogDQogLyoNCi0gKiBQZ3Bvb2wgbWFpbiBwcm9jZXNzIGV4aXQgaGFuZGxlcg0KKyAq IFBncG9vbCBtYWluIHByb2Nlc3MgZXhpdCBoYW5kbGVyLg0KKyAqDQorICogVGhpcyBoYW5kbGVy IHJ1bnMgaW4gYXN5bmMtc2lnbmFsIGNvbnRleHQ6IGl0IE1VU1Qgb25seSBjYWxsDQorICogYXN5 bmMtc2lnbmFsLXNhZmUgcHJpbWl0aXZlcyAoUE9TSVggMjAyNCAyLjQuMykuICBlcmVwb3J0KCks DQorICogcG9vbF9zZW1hcGhvcmVfbG9jaygpLCBNZW1vcnlDb250ZXh0IG9wZXJhdGlvbnMsIGJs b2NraW5nIHdhaXRwaWQoKQ0KKyAqIGFuZCBleGl0KDMpIChhdGV4aXQgY2hhaW4gKyBzdGRpbyBm bHVzaCkgYXJlIGFsbCB1bnNhZmUgaGVyZS4gIEluIGENCisgKiBwcmV2aW91cyB2ZXJzaW9uIHRo aXMgYm9keSBkaWQgdGhlIGZ1bGwgc2h1dGRvd24gaW5saW5lLCB3aGljaCBjb3VsZA0KKyAqIGRl YWRsb2NrIG9yIGNvcnJ1cHQgaGVhcCBzdGF0ZSB3aGVuIFNJR1RFUk0vU0lHSU5UL1NJR1FVSVQg YXJyaXZlZA0KKyAqIHdoaWxlIFBUX01BSU4gd2FzIGluc2lkZSBlcmVwb3J0KCksIHBhbGxvYygp LCBvciBhbm90aGVyIHNlbW9wLg0KKyAqDQorICogVGhlIGhhbmRsZXIgbm93IG9ubHkgcmVjb3Jk cyB0aGUgcmVxdWVzdGVkIHNpZ25hbCBudW1iZXIgaW50byBhDQorICogc2lnX2F0b21pY190IGZs YWcgYW5kIHdyaXRlcyBvbmUgYnl0ZSB0byB0aGUgc2VsZi1waXBlIHNvIHRoZSBtYWluDQorICog bG9vcCdzIHNlbGVjdCgpIHJldHVybnMuICBUaGUgYWN0dWFsIHNodXRkb3duIGlzIHBlcmZvcm1l ZA0KKyAqIHN5bmNocm9ub3VzbHkgYnkgZG9fc2h1dGRvd24oKSBmcm9tIHRoZSBtYWluIGxvb3As IHdoZXJlIGNhbGxpbmcNCisgKiBub24tYXN5bmMtc2FmZSBjb2RlIGlzIHBlcm1pdHRlZC4NCisg Kg0KKyAqIElmIHRoZSBzYW1lIHNpZ25hbCBpcyBkZWxpdmVyZWQgdG8gYSBmb3JrZWQgY2hpbGQg dGhhdCBoYXMgbm90IHlldA0KKyAqIHJlc2V0IHRoaXMgaGFuZGxlciwgZmFsbCB0aHJvdWdoIHRv IHByb2NfZXhpdCgpIHVuY2hhbmdlZC4NCiAgKi8NCiBzdGF0aWMgUkVUU0lHVFlQRSBleGl0X2hh bmRsZXIoaW50IHNpZykNCiB7DQotCWludAkJICAgKndhbGs7DQogCWludAkJCXNhdmVfZXJybm8g PSBlcnJubzsNCiANCi0JZXJlcG9ydChMT0csDQotCQkJKGVycm1zZygiZXhpdCBoYW5kbGVyIGNh bGxlZCAoc2lnbmFsOiAlZCkiLCBzaWcpKSk7DQotDQotCVBPT0xfU0VUTUFTSygmQXV0aEJsb2Nr U2lnKTsNCi0NCiAJLyoNCiAJICogdGhpcyBjb3VsZCBoYXBwZW4gaW4gYSBjaGlsZCBwcm9jZXNz IGlmIGEgc2lnbmFsIGhhcyBiZWVuIHNlbnQgYmVmb3JlDQotCSAqIHJlc2V0dGluZyBzaWduYWwg aGFuZGxlcg0KKwkgKiByZXNldHRpbmcgc2lnbmFsIGhhbmRsZXIuICBwcm9jX2V4aXQoKSB1bHRp bWF0ZWx5IHJlZHVjZXMgdG8gX2V4aXQoKQ0KKwkgKiBmb3Igbm9uLVBUX01BSU4gcHJvY2Vzc2Vz OyBjYWxsaW5nIGl0IGZyb20gYSBoYW5kbGVyIGluIGEgY2hpbGQgdGhhdA0KKwkgKiBoYXNuJ3Qg eWV0IHJld2lyZWQgaXRzIG93biBoYW5kbGVycyBpcyB0aGUgaGlzdG9yaWNhbCBiZWhhdmlvdXIu DQogCSAqLw0KIAlpZiAoZ2V0cGlkKCkgIT0gbXlwaWQpDQogCXsNCi0JCVBPT0xfU0VUTUFTSygm VW5CbG9ja1NpZyk7DQogCQlwcm9jX2V4aXQoMCk7DQorCQllcnJubyA9IHNhdmVfZXJybm87DQor CQlyZXR1cm47DQogCX0NCiANCiAJaWYgKHNpZyAhPSBTSUdURVJNICYmIHNpZyAhPSBTSUdJTlQg JiYgc2lnICE9IFNJR1FVSVQpDQogCXsNCi0JCVBPT0xfU0VUTUFTSygmVW5CbG9ja1NpZyk7DQog CQllcnJubyA9IHNhdmVfZXJybm87DQogCQlyZXR1cm47DQogCX0NCiANCiAJLyoNCi0JICogQ2hl Y2sgaWYgYW5vdGhlciBleGl0IGhhbmRsZXIgaW5zdGFuY2UgaXMgYWxyZWFkeSBydW5uaW5nLiAg SXQgaXMNCi0JICogcG9zc2libGUgdGhhdCBleGl0X2hhbmRsZXIgaXMgaW50ZXJydXB0ZWQgaW4g dGhlIG1pZGRsZSBieSBvdGhlcg0KLQkgKiBzaWduYWwuDQorCSAqIFJlY29yZCB0aGUgc2lnbmFs IGZvciB0aGUgbWFpbiBsb29wLiAgUmVwZWF0ZWQgc2lnbmFscyBjb2FsZXNjZTsgdGhlDQorCSAq IGZpcnN0IG9uZSB3aW5zLCB3aGljaCBtYXRjaGVzIHRoZSBwcmV2aW91cyAiZXhpdGluZyIgZ3Vh cmQuDQorCSAqLw0KKwlpZiAobWFpbl9leGl0X3JlcXVlc3QgPT0gMCkNCisJCW1haW5fZXhpdF9y ZXF1ZXN0ID0gc2lnOw0KKw0KKwkvKiBXYWtlIHVwIHRoZSBtYWluIGxvb3AgaWYgdGhlIHNlbGYt cGlwZSBpcyBzZXQgdXAuICovDQorCWlmIChwaXBlX2Zkc1sxXSkNCisJew0KKwkJLyoNCisJCSAq IHdyaXRlKCkgaXMgYXN5bmMtc2lnbmFsLXNhZmUuICBXZSBkZWxpYmVyYXRlbHkgaWdub3JlIHRo ZQ0KKwkJICogcmV0dXJuIHZhbHVlOiBpZiB0aGUgcGlwZSBpcyBmdWxsIHRoZSBtYWluIGxvb3Ag d2lsbCBwaWNrIHRoZQ0KKwkJICogZmxhZyB1cCBvbiBpdHMgbmV4dCBzZWxlY3QoKSB3YWtlLXVw IGFueXdheS4NCisJCSAqDQorCQkgKiBXZSBkbyBub3QgdXNlICIodm9pZCkgd3JpdGUoKSIgaGVy ZSBiZWNhdXNlIGl0IHdhcm5zICJ3YXJuaW5nOg0KKwkJICogaWdub3JpbmcgcmV0dXJuIHZhbHVl IG9mIKF3cml0ZaIgZGVjbGFyZWQgd2l0aCBhdHRyaWJ1dGUNCisJCSAqIKF3YXJuX3VudXNlZF9y ZXN1bHSiIFstV3VudXNlZC1yZXN1bHRdIG9uIGdjYyAtTzIgLVdhbGwgYW5kIHNvbWUNCisJCSAq IHBsYXRmb3JtcyBlbmFibGluZyBfRk9SVElGWV9TT1VSQ0UuDQorCQkgKi8NCisJCXNzaXplX3QJ CXcgPSB3cml0ZShwaXBlX2Zkc1sxXSwgIlwwIiwgMSk7DQorDQorCQkodm9pZCkgdzsNCisJfQ0K Kw0KKwllcnJubyA9IHNhdmVfZXJybm87DQorfQ0KKw0KKy8qDQorICogU3luY2hyb25vdXMgc2h1 dGRvd24gYm9keSwgaW52b2tlZCBmcm9tIHRoZSBQVF9NQUlOIG1haW4gbG9vcCB3aGVuDQorICog bWFpbl9leGl0X3JlcXVlc3QgaGFzIGJlZW4gc2V0IGJ5IGV4aXRfaGFuZGxlcigpLiAgQWxsIHRo ZSB3b3JrIHRoYXQgdXNlZA0KKyAqIHRvIGxpdmUgaW5zaWRlIHRoZSBzaWduYWwgaGFuZGxlciAo ZXJlcG9ydCwgcG9vbF9zZW1hcGhvcmVfbG9jaywNCisgKiB3YWl0cGlkLCBraWxsIG9mIGNoaWxk IGdyb3VwLCBleGl0KDMpKSBsaXZlcyBoZXJlLCBpbiBub3JtYWwgY29udGV4dA0KKyAqIHdoZXJl IGl0IGlzIHNhZmUuDQorICovDQorc3RhdGljIHZvaWQNCitkb19zaHV0ZG93bihpbnQgc2lnKQ0K K3sNCisJaW50CQkgICAqd2FsazsNCisNCisJZXJlcG9ydChMT0csDQorCQkJKGVycm1zZygiZXhp dCBoYW5kbGVyIGNhbGxlZCAoc2lnbmFsOiAlZCkiLCBzaWcpKSk7DQorDQorCVBPT0xfU0VUTUFT SygmQXV0aEJsb2NrU2lnKTsNCisNCisJLyoNCisJICogQ2hlY2sgaWYgYW5vdGhlciBleGl0IGhh bmRsZXIgaW5zdGFuY2UgaXMgYWxyZWFkeSBydW5uaW5nLiAgU2luY2UgdGhlDQorCSAqIHNodXRk b3duIG5vdyBydW5zIHNlcmlhbGx5IGZyb20gdGhlIG1haW4gbG9vcCB0aGlzIGlzIG1vc3RseSBh DQorCSAqIGJlbHQtYW5kLWJyYWNlcyBndWFyZCwgYnV0IGNoZWFwIGFuZCBoYXJtbGVzcyB0byBr ZWVwLg0KIAkgKi8NCiAJaWYgKGV4aXRpbmcpDQogCXsNCiAJCVBPT0xfU0VUTUFTSygmVW5CbG9j a1NpZyk7DQotCQllcnJubyA9IHNhdmVfZXJybm87DQogCQlyZXR1cm47DQogCX0NCiANCi0JLyog Q2hlY2sgdG8gbWFrZSBzdXJlIHRoYXQgb3RoZXIgZXhpdCBoYW5kbGVyIGlzIG5vdCBydW5uaW5n ICovDQogCXBvb2xfc2VtYXBob3JlX2xvY2soTUFJTl9FWElUX0hBTkRMRVJfU0VNKTsNCiAJaWYg KGV4aXRpbmcgPT0gMCkNCiAJew0KQEAgLTEzNDQsNyArMTQxNCw2IEBAIHN0YXRpYyBSRVRTSUdU WVBFIGV4aXRfaGFuZGxlcihpbnQgc2lnKQ0KIAkJZXJlcG9ydChMT0csDQogCQkJCShlcnJtc2co ImV4aXQgaGFuZGxlciAoc2lnbmFsOiAlZCkgY2FsbGVkLiBidXQgZXhpdCBoYW5kbGVyIGlzIGFs cmVhZHkgaW4gcHJvZ3Jlc3MiLCBzaWcpKSk7DQogCQlQT09MX1NFVE1BU0soJlVuQmxvY2tTaWcp Ow0KLQkJZXJybm8gPSBzYXZlX2Vycm5vOw0KIAkJcmV0dXJuOw0KIAl9DQogDQpAQCAtNTAzMSw2 ICs1MTAwLDE2IEBAIGNoZWNrX3JlcXVlc3RzKHZvaWQpDQogew0KIAlzaWdzZXRfdAlzaWc7DQog DQorCS8qDQorCSAqIFNodXRkb3duIHJlcXVlc3Q/ICBleGl0X2hhbmRsZXIoKSBzZXQgbWFpbl9l eGl0X3JlcXVlc3QgdG8gdGhlIGNhcHR1cmVkDQorCSAqIHNpZ25hbCBudW1iZXI7IHBlcmZvcm0g dGhlIGFjdHVhbCAobm9uLWFzeW5jLXNhZmUpIHNodXRkb3duIGhlcmUsIGluDQorCSAqIG5vcm1h bCBjb250ZXh0LiAgZG9fc2h1dGRvd24oKSBkb2VzIG5vdCByZXR1cm4uDQorCSAqLw0KKwlpZiAo bWFpbl9leGl0X3JlcXVlc3QpDQorCXsNCisJCWRvX3NodXRkb3duKG1haW5fZXhpdF9yZXF1ZXN0 KTsNCisJfQ0KKw0KIAkvKg0KIAkgKiBXYWtpbmcgY2hpbGQgcmVxdWVzdD8NCiAJICovDQotLSAN CjIuNDMuMA0KDQo= ----Next_Part(Mon_Jun__8_10_33_12_2026_106)----