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 1wfyL8-005pF8-2O for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Jul 2026 11:15:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wfyL7-00AALb-1k for pgsql-hackers@arkaria.postgresql.org; Sat, 04 Jul 2026 11:15:17 +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 1wfyL6-00AALT-2c for pgsql-hackers@lists.postgresql.org; Sat, 04 Jul 2026 11:15:17 +0000 Received: from mail-ej1-x632.google.com ([2a00:1450:4864:20::632]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wfyL3-00000001Ry0-37ty for pgsql-hackers@postgresql.org; Sat, 04 Jul 2026 11:15:15 +0000 Received: by mail-ej1-x632.google.com with SMTP id a640c23a62f3a-c125bce2294so134570666b.3 for ; Sat, 04 Jul 2026 04:15:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=jeltef.nl; s=google; t=1783163712; x=1783768512; darn=postgresql.org; h=in-reply-to:references:mime-version:subject:cc:from:to:message-id :date:from:to:cc:subject:date:message-id:reply-to; bh=Z3BqTpLlrip09aBKhwMTLGf9t8kPKIWFygvAFtsTeyk=; b=uAk13v1SUDGsSMCJ2LDGmanRauyEvxrawYPBc031mH4E3I9yje/P3PC7WSijFIgvqs bgMvDma0derHyLC3HXYU8OVo4NFiXLSblZxzf7/dSQQSvt8+58Q2OQbsjjdy6F8U5AkA utY1bUDg5Wi0/ZS8cUglcEL4J26ER9waxXUBt8tVHztmFTnoiRSeCH/XbgM7uUo/Laut sYLM7ieHi3GBL9MebDiv1U/NVmypHwtdUNW7nnTwi+pqGIsl15PXW1uoO+GsSkOtoJNw /8bj8cmo/RVS+vMWXw+OaZFmqv1hdOxftcSJewP50wc4z1tXNidbWfEfQR8UKgEtSGtN 8TMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1783163712; x=1783768512; h=in-reply-to:references:mime-version:subject:cc:from:to:message-id :date:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Z3BqTpLlrip09aBKhwMTLGf9t8kPKIWFygvAFtsTeyk=; b=AUGRaAw0vEl8Pl9v2HoaoBRkpiHXjHMFXqdyz10p5nJaabRnXp0AIKQFIdbtuaVD3Q Zv3I3/WOzfDUG0D+D+jAdgygXuhXUWLCSBt5BPgzZiJRxSK5mgRvcr7kjBBam49mLgOa b7Z+T8lJ4TlxXVbnFVLyspEHEcHxt1/ZFgtobSYuvOnVwkkrHexIIpIDjUMG5fs8jgHd rf8dZUwgQsIb88MymfMwnKzZxcEUHldhr1AuC+TAU8ewDz0fQupYKS7pWkP/efZ8un75 WyfB7VJZLHCvixOm4mMv//wzlBseCqswg+sucWi9dlzCsC60ZXq9UUibWNw5c7fe6VeB 02yg== X-Forwarded-Encrypted: i=1; AHgh+RqTcxeMCZPbD7sdcUGi6UcDJy+ZSvsN+oQkheIqsS8xR0sajUDN4PiZA6C3uBugaeFLoo4JLbNlFzw2EwOu@postgresql.org X-Gm-Message-State: AOJu0Ywucw5yyqIH0y4SrdtSE2kNpSPMGIRaRQxy9Vr2lMWWyNEMiZaU UMTeEqiEdRxpyMWWvJNgEBMAFZ7MNer9sfSJDcOnbWR06foocpo2VBjKzCVqmxDZPEs= X-Gm-Gg: AfdE7cmHfzQYaBkpG1Ini7Kyv6K7ROxc+/937+fQdh5LbTpC8euT1JKdVHWvAuQz413 +cGchlS2tJ+Ab+/yreWAFF5CIpJ8VYtMMFmyDSyTytkctg0DAMLQY/4OYhQsy3IxYF8zt9Kz6ic EtxBD1bYCEw3l4fpJ2PsvhemSg2HFr7ga5K/Fync6L/ogGUwsU8XFTGgnFSTGTsaEopfGztNB+m 8kr8QrWga0M6j/Z8aXyyKsPv8PKP36yt3txIQFrPr3TTdPft9MVl/BiYTsffBYjMEXzs9bL2RA6 l9LnsZ7S5hWfCdgZJV0BLX8xtEJS5VSoKWrm8KLk1R53wLbgs1k9W8i7TJAh3Tq088HSlNTHV03 n6+xvAk5InmkI0vTFDo1aAXQ0fnEfml1+2ODB4dzrXpv1XMp7jDv+/vbzozBeKg68/SKpzzKm6x uObyQQltuzla1PRMtV1hqVbC0YUvx066nC/GxLcw== X-Received: by 2002:a17:907:3f86:b0:bee:4562:3308 with SMTP id a640c23a62f3a-c12e6b2d28fmr102711466b.26.1783163711587; Sat, 04 Jul 2026 04:15:11 -0700 (PDT) Received: from localhost (145-53-221-196.fixed.kpn.net. [145.53.221.196]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-69a19cf68f5sm1050259a12.13.2026.07.04.04.15.09 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sat, 04 Jul 2026 04:15:10 -0700 (PDT) Content-Type: multipart/mixed; boundary=e71a508dc0b69d2f950c89d39cce81f4734c14f6dec47af1c26e5a0296f2 Date: Sat, 04 Jul 2026 13:15:09 +0200 Message-Id: To: "Thomas Munro" From: "Jelte Fennema-Nio" Cc: "Bryan Green" , "Heikki Linnakangas" , "pgsql-hackers" , "Tom Lane" , "Kyotaro Horiguchi" Subject: Re: Can we get rid of TerminateThread() in pg_dump? MIME-Version: 1.0 References: <56821e0d-bfd5-4619-b13f-12e28c78289b@iki.fi> In-Reply-To: X-TUID: yefIVb5miwGO List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --e71a508dc0b69d2f950c89d39cce81f4734c14f6dec47af1c26e5a0296f2 Content-Type: multipart/alternative; boundary=3d35b400a9acb4e4055425424511311284378c01bcd9952cee869581e855 --3d35b400a9acb4e4055425424511311284378c01bcd9952cee869581e855 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Sat, 4 Jul 2026 at 02:51, Thomas Munro wrote: > We don't actually care about the threads > themselves, and it doesn't seem that great if we have to introduce an > IPC ping-pong of some kind with each thread. =20 Agreed. But I do agree with Heikki that swapping out stderr seems pretty hacky. At the very least because now the main thread cannot write to stderr either anymore (which is why you removed the "terminated by user" write I guess). How about instead we do something like the attached? To be clear, I do think we should stop using TerminateThread because I wanna replace PQcancel there with PQcancelBlocking[1] PQcancelBlocking does a whole TLS handshake, which is almost certainly taking some locks. Note that the way to achieve that I moved the Ctrl+C handler to a dedicated thread on Unix too, so it starts behaving the same as Windows in that respect. I think combined with you changing pg_dump to use worker *threads* on Unix too, we would then get pretty much identical behaviour across OSes for pg_dump. P.S. I now realize that anything involving the (already existing) CancelRequested flag is actually not actually safe/correct on Windows, because it's not using read nor written using atomic operations while the consoleHandler runs on its own thread. Would be good to fix that too I guess, but it seems that for now it has worked in practice at least. [1]: https://www.postgresql.org/message-id/flat/DJPAH0WPJV3K.1PYZ8P0QXZVMX%= 40jeltef.nl#5642e337a4e4d04b21c66e089484f80d --3d35b400a9acb4e4055425424511311284378c01bcd9952cee869581e855-- --e71a508dc0b69d2f950c89d39cce81f4734c14f6dec47af1c26e5a0296f2 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0001-Use-exit_nicely-in-die_on_query_failure.patch Content-Type: text/x-patch; charset=utf-8; name=v2-0001-Use-exit_nicely-in-die_on_query_failure.patch RnJvbSBhMjgzMTgwYWQzYjNiZmZlOGFlMDRkNTlmNjEyMTJmZjk1Y2NiZWU2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDQgSnVsIDIwMjYgMTE6MTE6MDkgKzAyMDAKU3ViamVjdDogW1BBVENIIHYy IDEvMl0gVXNlIGV4aXRfbmljZWx5IGluIGRpZV9vbl9xdWVyeV9mYWlsdXJlCgpXZSB3YW50IGEg cXVlcnkgZmFpbHVyZSB0byBraWxsIHRoZSB3b3JrZXIgbm90IHRoZSB3aG9sZSBwcm9jZXNzLiBP bgpVbml4IHRoYXQncyBjdXJyZW50bHkgdGhlIHNhbWUgdGhpbmcsIGJ1dCBvbiBXaW5kb3dzIHdv cmtlcnMgYXJlCnRocmVhZHMuCi0tLQogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jIHwg OCArKysrKysrLQogMSBmaWxlIGNoYW5nZWQsIDcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigt KQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfZGIuYwppbmRleCA1YzM0OTI3OWJlYi4uZjZiY2E3ZGM1MDggMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfZGIuYworKysgYi9zcmMvYmluL3Bn X2R1bXAvcGdfYmFja3VwX2RiLmMKQEAgLTIxMCw3ICsyMTAsMTMgQEAgZGllX29uX3F1ZXJ5X2Zh aWx1cmUoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKnF1ZXJ5KQogCXBnX2xvZ19lcnJv cigicXVlcnkgZmFpbGVkOiAlcyIsCiAJCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0aW9u KSk7CiAJcGdfbG9nX2Vycm9yX2RldGFpbCgiUXVlcnkgd2FzOiAlcyIsIHF1ZXJ5KTsKLQlleGl0 KDEpOworCisJLyoKKwkgKiBVc2UgZXhpdF9uaWNlbHkoKSByYXRoZXIgdGhhbiBleGl0KCk6IG9u IFdpbmRvd3MgdGhlIHdvcmtlcnMgYXJlCisJICogdGhyZWFkcywgYW5kIGEgZmFpbGVkIHdvcmtl cidzIHF1ZXJ5IG11c3Qgb25seSBlbmQgaXRzIG93biB0aHJlYWQsIG5vdAorCSAqIGJyaW5nIGRv d24gdGhlIHdob2xlIHByb2Nlc3MuCisJICovCisJZXhpdF9uaWNlbHkoMSk7CiB9CiAKIHZvaWQK CmJhc2UtY29tbWl0OiBlNDJkNGExZjNkYzU5NDIwYmU3OTY4ODM0MDQwMjBjYjQxZGRkMDVlCi0t IAoyLjU0LjAKCg== --e71a508dc0b69d2f950c89d39cce81f4734c14f6dec47af1c26e5a0296f2 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v2-0002-pg_dump-Remove-TerminateThread-call.patch Content-Type: text/x-patch; charset=utf-8; name=v2-0002-pg_dump-Remove-TerminateThread-call.patch RnJvbSA4N2M2Y2JkNDM2ODViMmYxNThmZDY4Y2M1ZmQ4ZTE1YTBjZDFiNDRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWx0ZSBGZW5uZW1hLU5pbyA8cG9zdGdyZXNAamVsdGVmLm5s PgpEYXRlOiBTYXQsIDQgSnVsIDIwMjYgMTE6MTI6MTUgKzAyMDAKU3ViamVjdDogW1BBVENIIHYy IDIvMl0gcGdfZHVtcDogUmVtb3ZlIFRlcm1pbmF0ZVRocmVhZCgpIGNhbGwKCldoZW4gcGdfZHVt cCBvciBwZ19yZXN0b3JlIC0tam9icyBOIGlzIGludGVycnVwdGVkIHdpdGggXkMgb24gV2luZG93 cywKd2UgY2FuY2VsIGFsbCBxdWVyaWVzLCBidXQgd2UgZG9uJ3Qgd2FudCB0aGUgY2FuY2VsbGF0 aW9ucyB0byBiZQpyZXBvcnRlZCBhcyBlcnJvcnMgdG8gdGhlIHVzZXIgaW4gdGhlIHNob3J0IHRp bWUgYmVmb3JlIHRoZSB3aG9sZQpwcm9jZXNzIGV4aXRzLgoKVGhhdCB3YXMgcHJldmlvdXNseSBh Y2hpZXZlZCBieSBjYWxsaW5nIFRlcm1pbmF0ZVRocmVhZCgpIG9uIGVhY2ggd29ya2VyCnRocmVh ZCBiZWZvcmUgc2VuZGluZyB0aGUgY2FuY2VsIG1lc3NhZ2UsIGJ1dCB0aGF0IGRvZXNuJ3QgYXBw ZWFyIHRvIGJlCjEwMCUgc2FmZTogdGhlIGltcGxlbWVudGF0aW9ucyBvZiB3cml0ZSgpIGFuZCB0 aGUgc29ja2V0IGNhbGxzIGluc2lkZQpQUWNhbmNlbCgpIG1pZ2h0IGFjcXVpcmUgdXNlciBzcGFj ZSBsb2NrcyB0aGF0IHdlcmUgaGVsZCBieSB0aGUKdGVybWluYXRlZCB0aHJlYWRzLiAgKHdyaXRl KCkgY2VydGFpbmx5IGRvZXMgdGhhdC4pCgpJbnN0ZWFkIG9mIGRvaW5nIGl0IHRoYXQgc2tldGNo eSB3YXkgdGhpcyBub3cgYXRvbWljYWxseSBzZXRzIGEgZmxhZwooYmVmb3JlIHNlbmRpbmcgYW55 IGNhbmNlbCByZXF1ZXN0cykgdGhhdCB0ZWxscyB0aGUgdGhyZWFkcyB0byBub3QgbG9nCmVycm9y cyBhbnltb3JlLgotLS0KIHNyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5jICAgICAgICAgICB8IDQ5 ICsrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0KIHNyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBf YXJjaGl2ZXIuYyB8IDE0ICsrKysrKy0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2RiLmMg ICAgICAgfCAxOCArKysrKysrLS0tCiBzcmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX3V0aWxzLmMg ICAgfCAyNCArKysrKysrKysrKysrKwogc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5o ICAgIHwgMjEgKysrKysrKysrKysrCiA1IGZpbGVzIGNoYW5nZWQsIDkyIGluc2VydGlvbnMoKyks IDM0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wYXJhbGxlbC5j IGIvc3JjL2Jpbi9wZ19kdW1wL3BhcmFsbGVsLmMKaW5kZXggN2UyZTlmOTU4ZWEuLmUxMWY3Y2E5 MzYzIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGFyYWxsZWwuYworKysgYi9zcmMvYmlu L3BnX2R1bXAvcGFyYWxsZWwuYwpAQCAtNTMxLDExICs1MzEsMTIgQEAgV2FpdEZvclRlcm1pbmF0 aW5nV29ya2VycyhQYXJhbGxlbFN0YXRlICpwc3RhdGUpCiAgKiBtaWdodCBiZSB0aGF0IG9ubHkg dGhlIGxlYWRlciBnZXRzIHNpZ25hbGVkLgogICoKICAqIE9uIFdpbmRvd3MsIHRoZSBjYW5jZWwg aGFuZGxlciBydW5zIGluIGEgc2VwYXJhdGUgdGhyZWFkLCBiZWNhdXNlIHRoYXQncwotICogaG93 IFNldENvbnNvbGVDdHJsSGFuZGxlciB3b3Jrcy4gIFdlIG1ha2UgaXQgc3RvcCB3b3JrZXIgdGhy ZWFkcywgc2VuZAotICogY2FuY2VscyBvbiBhbGwgYWN0aXZlIGNvbm5lY3Rpb25zLCBhbmQgdGhl biByZXR1cm4gRkFMU0UsIHdoaWNoIHdpbGwgYWxsb3cKLSAqIHRoZSBwcm9jZXNzIHRvIGRpZS4g IEZvciBzYWZldHkncyBzYWtlLCB3ZSB1c2UgYSBjcml0aWNhbCBzZWN0aW9uIHRvCi0gKiBwcm90 ZWN0IHRoZSBQR2NhbmNlbCBzdHJ1Y3R1cmVzIGFnYWluc3QgYmVpbmcgY2hhbmdlZCB3aGlsZSB0 aGUgc2lnbmFsCi0gKiB0aHJlYWQgcnVucy4KKyAqIGhvdyBTZXRDb25zb2xlQ3RybEhhbmRsZXIg d29ya3MuICBCZWNhdXNlIHRoZSB3b3JrZXJzIGFyZSB0aHJlYWRzIGluIHRoaXMKKyAqIHNhbWUg cHJvY2Vzcywgd2Ugc2V0IGEgZmxhZyAoaXNfY2FuY2VsX2luX3Byb2dyZXNzKCkpIHNvIHRoZXkg c3RheSBxdWlldCBhYm91dAorICogdGhlIHF1ZXJ5IGNhbmNlbGxhdGlvbnMgaW5zdGVhZCBvZiBj bHV0dGVyaW5nIHRoZSBzY3JlZW4sIHRoZW4gc2VuZCBjYW5jZWxzCisgKiBvbiBhbGwgYWN0aXZl IGNvbm5lY3Rpb25zIGFuZCByZXR1cm4gRkFMU0UsIHdoaWNoIHdpbGwgYWxsb3cgdGhlIHByb2Nl c3MgdG8KKyAqIGRpZS4gIEZvciBzYWZldHkncyBzYWtlLCB3ZSB1c2UgYSBjcml0aWNhbCBzZWN0 aW9uIHRvIHByb3RlY3QgdGhlIFBHY2FuY2VsCisgKiBzdHJ1Y3R1cmVzIGFnYWluc3QgYmVpbmcg Y2hhbmdlZCB3aGlsZSB0aGUgc2lnbmFsIHRocmVhZCBydW5zLgogICovCiAKICNpZm5kZWYgV0lO MzIKQEAgLTY0MSwzNCArNjQyLDMwIEBAIGNvbnNvbGVIYW5kbGVyKERXT1JEIGR3Q3RybFR5cGUp CiAJaWYgKGR3Q3RybFR5cGUgPT0gQ1RSTF9DX0VWRU5UIHx8CiAJCWR3Q3RybFR5cGUgPT0gQ1RS TF9CUkVBS19FVkVOVCkKIAl7CisJCS8qCisJCSAqIFRlbGwgd29ya2VyIHRocmVhZHMgdG8gc3Rh eSBxdWlldCBhYm91dCB0aGUgcXVlcnkgY2FuY2VsbGF0aW9ucworCQkgKiB3ZSdyZSBhYm91dCB0 byBzZW5kIHRoZW07IG90aGVyd2lzZSB0aGV5J2QgcmVwb3J0IHRoZW0gYXMgZXJyb3JzCisJCSAq IGFuZCBjbHV0dGVyIHRoZSB1c2VyJ3Mgc2NyZWVuLiAgVGhpcyBtdXN0IGJlIHNldCBiZWZvcmUg d2Ugc2VuZCBhbnkKKwkJICogY2FuY2VsLCBzbyB0aGF0IGEgd29ya2VyIGlzIGd1YXJhbnRlZWQg dG8gc2VlIGl0IGJ5IHRoZSB0aW1lIGl0cworCQkgKiBxdWVyeSBmYWlscyBhcyBhIHJlc3VsdC4K KwkJICovCisJCXNldF9jYW5jZWxfaW5fcHJvZ3Jlc3MoKTsKKwogCQkvKiBDcml0aWNhbCBzZWN0 aW9uIHByZXZlbnRzIGNoYW5naW5nIGRhdGEgd2UgbG9vayBhdCBoZXJlICovCiAJCUVudGVyQ3Jp dGljYWxTZWN0aW9uKCZzaWduYWxfaW5mb19sb2NrKTsKIAogCQkvKgotCQkgKiBJZiBpbiBwYXJh bGxlbCBtb2RlLCBzdG9wIHdvcmtlciB0aHJlYWRzIGFuZCBzZW5kIFF1ZXJ5Q2FuY2VsIHRvCi0J CSAqIHRoZWlyIGNvbm5lY3RlZCBiYWNrZW5kcy4gIFRoZSBtYWluIHBvaW50IG9mIHN0b3BwaW5n IHRoZSB3b3JrZXIKLQkJICogdGhyZWFkcyBpcyB0byBrZWVwIHRoZW0gZnJvbSByZXBvcnRpbmcg dGhlIHF1ZXJ5IGNhbmNlbHMgYXMgZXJyb3JzLAotCQkgKiB3aGljaCB3b3VsZCBjbHV0dGVyIHRo ZSB1c2VyJ3Mgc2NyZWVuLiAgV2UgbmVlZG4ndCBzdG9wIHRoZSBsZWFkZXIKLQkJICogdGhyZWFk IHNpbmNlIGl0IHdvbid0IGJlIGRvaW5nIG11Y2ggYW55d2F5LiAgRG8gdGhpcyBiZWZvcmUKLQkJ ICogY2FuY2VsaW5nIHRoZSBtYWluIHRyYW5zYWN0aW9uLCBlbHNlIHdlIG1pZ2h0IGdldCBpbnZh bGlkLXNuYXBzaG90Ci0JCSAqIGVycm9ycyByZXBvcnRlZCBiZWZvcmUgd2UgY2FuIHN0b3AgdGhl IHdvcmtlcnMuICBJZ25vcmUgZXJyb3JzLAotCQkgKiB0aGVyZSdzIG5vdCBtdWNoIHdlIGNhbiBk byBhYm91dCB0aGVtIGFueXdheS4KKwkJICogSWYgaW4gcGFyYWxsZWwgbW9kZSwgc2VuZCBRdWVy eUNhbmNlbCB0byBlYWNoIHdvcmtlcidzIGNvbm5lY3RlZAorCQkgKiBiYWNrZW5kLiAgRG8gdGhp cyBiZWZvcmUgY2FuY2VsaW5nIHRoZSBtYWluIHRyYW5zYWN0aW9uLCBlbHNlIHdlCisJCSAqIG1p Z2h0IGdldCBpbnZhbGlkLXNuYXBzaG90IGVycm9ycyByZXBvcnRlZCBiZWZvcmUgd2UgY2FuIHN0 b3AgdGhlCisJCSAqIHdvcmtlcnMuICBJZ25vcmUgZXJyb3JzLCB0aGVyZSdzIG5vdCBtdWNoIHdl IGNhbiBkbyBhYm91dCB0aGVtCisJCSAqIGFueXdheS4KIAkJICovCiAJCWlmIChzaWduYWxfaW5m by5wc3RhdGUgIT0gTlVMTCkKIAkJewogCQkJZm9yIChpID0gMDsgaSA8IHNpZ25hbF9pbmZvLnBz dGF0ZS0+bnVtV29ya2VyczsgaSsrKQogCQkJewotCQkJCVBhcmFsbGVsU2xvdCAqc2xvdCA9ICYo c2lnbmFsX2luZm8ucHN0YXRlLT5wYXJhbGxlbFNsb3RbaV0pOwotCQkJCUFyY2hpdmVIYW5kbGUg KkFIID0gc2xvdC0+QUg7Ci0JCQkJSEFORExFCQloVGhyZWFkID0gKEhBTkRMRSkgc2xvdC0+aFRo cmVhZDsKLQotCQkJCS8qCi0JCQkJICogVXNpbmcgVGVybWluYXRlVGhyZWFkIGhlcmUgbWF5IGxl YXZlIHNvbWUgcmVzb3VyY2VzIGxlYWtlZCwKLQkJCQkgKiBidXQgaXQgZG9lc24ndCBtYXR0ZXIg c2luY2Ugd2UncmUgYWJvdXQgdG8gZW5kIHRoZSB3aG9sZQotCQkJCSAqIHByb2Nlc3MuCi0JCQkJ ICovCi0JCQkJaWYgKGhUaHJlYWQgIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCi0JCQkJCVRlcm1p bmF0ZVRocmVhZChoVGhyZWFkLCAwKTsKKwkJCQlBcmNoaXZlSGFuZGxlICpBSCA9IHNpZ25hbF9p bmZvLnBzdGF0ZS0+cGFyYWxsZWxTbG90W2ldLkFIOwogCiAJCQkJaWYgKEFIICE9IE5VTEwgJiYg QUgtPmNvbm5DYW5jZWwgIT0gTlVMTCkKIAkJCQkJKHZvaWQpIFBRY2FuY2VsKEFILT5jb25uQ2Fu Y2VsLCBlcnJidWYsIHNpemVvZihlcnJidWYpKTsKQEAgLTY4Nyw5ICs2ODQsNyBAQCBjb25zb2xl SGFuZGxlcihEV09SRCBkd0N0cmxUeXBlKQogCiAJCS8qCiAJCSAqIFJlcG9ydCB3ZSdyZSBxdWl0 dGluZywgdXNpbmcgbm90aGluZyBtb3JlIGNvbXBsaWNhdGVkIHRoYW4KLQkJICogd3JpdGUoMiku ICAoV2UgbWlnaHQgYmUgYWJsZSB0byBnZXQgYXdheSB3aXRoIHVzaW5nIHBnX2xvZ18qKCkKLQkJ ICogaGVyZSwgYnV0IHNpbmNlIHdlIHRlcm1pbmF0ZWQgb3RoZXIgdGhyZWFkcyB1bmNsZWFubHkg YWJvdmUsIGl0Ci0JCSAqIHNlZW1zIGJldHRlciB0byBhc3N1bWUgYXMgbGl0dGxlIGFzIHBvc3Np YmxlLikKKwkJICogd3JpdGUoMikuCiAJCSAqLwogCQlpZiAocHJvZ25hbWUpCiAJCXsKZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYyBiL3NyYy9iaW4vcGdf ZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYwppbmRleCA0NmY0YzUxODM0Ny4uNWMwOTgzZmQxMWEg MTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfYXJjaGl2ZXIuYworKysgYi9z cmMvYmluL3BnX2R1bXAvcGdfYmFja3VwX2FyY2hpdmVyLmMKQEAgLTE5MzMsOSArMTkzMywxNyBA QCB3YXJuX29yX2V4aXRfaG9ycmlibHkoQXJjaGl2ZUhhbmRsZSAqQUgsIGNvbnN0IGNoYXIgKmZt dCwgLi4uKQogCUFILT5sYXN0RXJyb3JTdGFnZSA9IEFILT5zdGFnZTsKIAlBSC0+bGFzdEVycm9y VEUgPSBBSC0+Y3VycmVudFRFOwogCi0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JcGdfbG9nX2dlbmVy aWNfdihQR19MT0dfRVJST1IsIFBHX0xPR19QUklNQVJZLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXAp OworCS8qCisJICogRG9uJ3QgcmVwb3J0IHRoZSBmYWlsdXJlIGlmIHdlJ3JlIGNhbmNlbGxpbmcg dGhpcyBxdWVyeSBvdXJzZWx2ZXMgYXMKKwkgKiBwYXJ0IG9mIHRlYXJpbmcgZG93biB0aGUgcHJv Y2VzczsgdGhlIGVycm9yIGlzIGV4cGVjdGVkLiAgKE9ubHkKKwkgKiBwb3NzaWJsZSBvbiBXaW5k b3dzLCB3aGVyZSB0aGUgd29ya2VycyBhcmUgdGhyZWFkcy4pCisJICovCisJaWYgKCFpc19jYW5j ZWxfaW5fcHJvZ3Jlc3MoKSkKKwl7CisJCXZhX3N0YXJ0KGFwLCBmbXQpOworCQlwZ19sb2dfZ2Vu ZXJpY192KFBHX0xPR19FUlJPUiwgUEdfTE9HX1BSSU1BUlksIGZtdCwgYXApOworCQl2YV9lbmQo YXApOworCX0KIAogCWlmIChBSC0+cHVibGljLmV4aXRfb25fZXJyb3IpCiAJCWV4aXRfbmljZWx5 KDEpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCmluZGV4IGY2YmNhN2RjNTA4Li5jOTYwY2E1NzI0MyAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF9kYi5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfZGIuYwpAQCAtNDAyLDggKzQwMiwxMyBAQCBFeGVjdXRlU3FsQ29t bWFuZEJ1ZihBcmNoaXZlICpBSFgsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZkxlbikKIAkJ ICovCiAJCWlmIChBSC0+cGdDb3B5SW4gJiYKIAkJCVBRcHV0Q29weURhdGEoQUgtPmNvbm5lY3Rp b24sIGJ1ZiwgYnVmTGVuKSA8PSAwKQotCQkJcGdfZmF0YWwoImVycm9yIHJldHVybmVkIGJ5IFBR cHV0Q29weURhdGE6ICVzIiwKLQkJCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0aW9uKSk7 CisJCXsKKwkJCS8qIFN0YXkgcXVpZXQgaWYgdGhpcyBpcyBhIHJlc3VsdCBvZiBvdXIgb3duIGNh bmNlbGxhdGlvbi4gKi8KKwkJCWlmICghaXNfY2FuY2VsX2luX3Byb2dyZXNzKCkpCisJCQkJcGdf bG9nX2Vycm9yKCJlcnJvciByZXR1cm5lZCBieSBQUXB1dENvcHlEYXRhOiAlcyIsCisJCQkJCQkJ IFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0aW9uKSk7CisJCQlleGl0X25pY2VseSgxKTsKKwkJ fQogCX0KIAllbHNlIGlmIChBSC0+b3V0cHV0S2luZCA9PSBPVVRQVVRfT1RIRVJEQVRBKQogCXsK QEAgLTQ1MSw4ICs0NTYsMTMgQEAgRW5kREJDb3B5TW9kZShBcmNoaXZlICpBSFgsIGNvbnN0IGNo YXIgKnRvY0VudHJ5VGFnKQogCQlQR3Jlc3VsdCAgICpyZXM7CiAKIAkJaWYgKFBRcHV0Q29weUVu ZChBSC0+Y29ubmVjdGlvbiwgTlVMTCkgPD0gMCkKLQkJCXBnX2ZhdGFsKCJlcnJvciByZXR1cm5l ZCBieSBQUXB1dENvcHlFbmQ6ICVzIiwKLQkJCQkJIFBRZXJyb3JNZXNzYWdlKEFILT5jb25uZWN0 aW9uKSk7CisJCXsKKwkJCS8qIFN0YXkgcXVpZXQgaWYgdGhpcyBpcyBhIHJlc3VsdCBvZiBvdXIg b3duIGNhbmNlbGxhdGlvbi4gKi8KKwkJCWlmICghaXNfY2FuY2VsX2luX3Byb2dyZXNzKCkpCisJ CQkJcGdfbG9nX2Vycm9yKCJlcnJvciByZXR1cm5lZCBieSBQUXB1dENvcHlFbmQ6ICVzIiwKKwkJ CQkJCQkgUFFlcnJvck1lc3NhZ2UoQUgtPmNvbm5lY3Rpb24pKTsKKwkJCWV4aXRfbmljZWx5KDEp OworCQl9CiAKIAkJLyogQ2hlY2sgY29tbWFuZCBzdGF0dXMgYW5kIHJldHVybiB0byBub3JtYWwg bGlicHEgc3RhdGUgKi8KIAkJcmVzID0gUFFnZXRSZXN1bHQoQUgtPmNvbm5lY3Rpb24pOwpkaWZm IC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jIGIvc3JjL2Jpbi9wZ19k dW1wL3BnX2JhY2t1cF91dGlscy5jCmluZGV4IDAzNjhmNzYyM2E3Li5jNTI5ZWMwNzhmZSAxMDA2 NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5jCisrKyBiL3NyYy9iaW4v cGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuYwpAQCAtMjEsNiArMjEsMzAgQEAKIC8qIEdsb2JhbHMg ZXhwb3J0ZWQgYnkgdGhpcyBmaWxlICovCiBjb25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CiAK KyNpZmRlZiBXSU4zMgorCisvKgorICogRmxhZyB0ZWxsaW5nIHdvcmtlciB0aHJlYWRzIHRvIHN0 YXkgcXVpZXQgYWJvdXQgcXVlcnkgZmFpbHVyZXMgYmVjYXVzZSB3ZSdyZQorICogY2FuY2VsbGlu ZyB0aGVpciBxdWVyaWVzIGFzIHBhcnQgb2YgdGVhcmluZyBkb3duIHRoZSBwcm9jZXNzLiAgU2Vl IHRoZQorICogY29tbWVudCBpbiBwZ19iYWNrdXBfdXRpbHMuaC4gIEFjY2Vzc2VkIHdpdGggaW50 ZXJsb2NrZWQgcHJpbWl0aXZlcyBiZWNhdXNlCisgKiB0aGUgY2FuY2VsIHRocmVhZCB3cml0ZXMg aXQgd2hpbGUgd29ya2VyIHRocmVhZHMgcmVhZCBpdC4KKyAqLworc3RhdGljIHZvbGF0aWxlIExP TkcgY2FuY2VsSW5Qcm9ncmVzcyA9IDA7CisKK3ZvaWQKK3NldF9jYW5jZWxfaW5fcHJvZ3Jlc3Mo dm9pZCkKK3sKKwlJbnRlcmxvY2tlZEV4Y2hhbmdlKCZjYW5jZWxJblByb2dyZXNzLCAxKTsKK30K KworYm9vbAoraXNfY2FuY2VsX2luX3Byb2dyZXNzKHZvaWQpCit7CisJcmV0dXJuIEludGVybG9j a2VkQ29tcGFyZUV4Y2hhbmdlKCZjYW5jZWxJblByb2dyZXNzLCAwLCAwKSAhPSAwOworfQorCisj ZW5kaWYJCQkJCQkJLyogV0lOMzIgKi8KKwogI2RlZmluZSBNQVhfT05fRVhJVF9OSUNFTFkJCQkJ MjAKIAogc3RhdGljIHN0cnVjdApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF91dGlscy5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1cF91dGlscy5oCmluZGV4IDllOThl ZDExNjE5Li43NzliMTBkOGFmNSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19kdW1wL3BnX2JhY2t1 cF91dGlscy5oCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19iYWNrdXBfdXRpbHMuaApAQCAtMzEs NiArMzEsMjcgQEAgZXh0ZXJuIHZvaWQgc2V0X2R1bXBfc2VjdGlvbihjb25zdCBjaGFyICphcmcs IGludCAqZHVtcFNlY3Rpb25zKTsKIGV4dGVybiB2b2lkIG9uX2V4aXRfbmljZWx5KG9uX2V4aXRf bmljZWx5X2NhbGxiYWNrIGZ1bmN0aW9uLCB2b2lkICphcmcpOwogcGdfbm9yZXR1cm4gZXh0ZXJu IHZvaWQgZXhpdF9uaWNlbHkoaW50IGNvZGUpOwogCisvKgorICogT24gV2luZG93cyB0aGUgcGFy YWxsZWwgd29ya2VycyBhcmUgdGhyZWFkcyBpbnNpZGUgdGhlIGxlYWRlciBwcm9jZXNzLiAgV2hl bgorICogYSBjYW5jZWwgaXMgcHJvY2Vzc2VkIHRoZXJlLCB0aGUgbGVhZGVyIHNlbmRzIGNhbmNl bHMgdG8gdGhlIHdvcmtlcnMnCisgKiBpbi1mbGlnaHQgcXVlcmllczsgd2l0aG91dCB0aGlzIGZs YWcgZWFjaCB3b3JrZXIgd291bGQgdGhlbiByZXBvcnQgdGhlCisgKiByZXN1bHRpbmcgImNhbmNl bGluZyBzdGF0ZW1lbnQgZHVlIHRvIHVzZXIgcmVxdWVzdCIgZXJyb3IgYW5kIGNsdXR0ZXIgdGhl CisgKiBzY3JlZW4gaW4gdGhlIGJyaWVmIHdpbmRvdyBiZWZvcmUgdGhlIHdob2xlIHByb2Nlc3Mg ZXhpdHMuICBUaGUgY2FuY2VsCisgKiB0aHJlYWQgc2V0cyB0aGlzIGZsYWcgYmVmb3JlIHNlbmRp bmcgYW55IGNhbmNlbCwgYW5kIHdvcmtlciB0aHJlYWRzIGNoZWNrIGl0CisgKiBiZWZvcmUgcmVw b3J0aW5nIGEgcXVlcnkgZmFpbHVyZS4gIEl0J3Mgd3JpdHRlbiBhbmQgcmVhZCBmcm9tIGRpZmZl cmVudAorICogdGhyZWFkcywgc28gaXQncyBhY2Nlc3NlZCB3aXRoIHRoZSBXaW5kb3dzIGludGVy bG9ja2VkIChhdG9taWMpIHByaW1pdGl2ZXMuCisgKgorICogT24gb3RoZXIgcGxhdGZvcm1zIHRo ZSB3b3JrZXJzIGFyZSBzZXBhcmF0ZSBwcm9jZXNzZXMgdGhhdCBqdXN0IF9leGl0KCkgd2hlbgor ICogY2FuY2VsbGVkLCBzbyB0aGV5IG5ldmVyIHJlYWNoIHRoZSBlcnJvci1yZXBvcnRpbmcgY29k ZTsgdGhlcmUgdGhlIGNoZWNrIGlzCisgKiBjb21waWxlZCBvdXQgdG8gYSBjb25zdGFudCBmYWxz ZSBhbmQgdGhlIGZsYWcgZG9lc24ndCBleGlzdC4KKyAqLworI2lmZGVmIFdJTjMyCitleHRlcm4g dm9pZCBzZXRfY2FuY2VsX2luX3Byb2dyZXNzKHZvaWQpOworZXh0ZXJuIGJvb2wgaXNfY2FuY2Vs X2luX3Byb2dyZXNzKHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgaXNfY2FuY2VsX2luX3Byb2dyZXNz KCkgZmFsc2UKKyNlbmRpZgorCiAvKiBJbiBwZ19kdW1wLCB3ZSBtb2RpZnkgcGdfZmF0YWwgdG8g Y2FsbCBleGl0X25pY2VseSBpbnN0ZWFkIG9mIGV4aXQgKi8KICN1bmRlZiBwZ19mYXRhbAogI2Rl ZmluZSBwZ19mYXRhbCguLi4pIGRvIHsgXAotLSAKMi41NC4wCgo= --e71a508dc0b69d2f950c89d39cce81f4734c14f6dec47af1c26e5a0296f2--