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.94.2) (envelope-from ) id 1r8OgK-009fbD-TF for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Nov 2023 17:49:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r8OgJ-00CDqu-ER for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Nov 2023 17:49:03 +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.94.2) (envelope-from ) id 1r8OgI-00CDqm-Ry for pgsql-hackers@lists.postgresql.org; Wed, 29 Nov 2023 17:49:03 +0000 Received: from mail-oa1-x32.google.com ([2001:4860:4864:20::32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1r8OgF-007yW5-Df for pgsql-hackers@postgresql.org; Wed, 29 Nov 2023 17:49:01 +0000 Received: by mail-oa1-x32.google.com with SMTP id 586e51a60fabf-1fa486a0e10so2315771fac.3 for ; Wed, 29 Nov 2023 09:48:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=neon.tech; s=google; t=1701280138; x=1701884938; darn=postgresql.org; h=in-reply-to:references:from:to:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Bln14Ee8i3xEo8EP+vbwRILfmg6rBVMy8wmJzUAh4Do=; b=Ia2BBdvVBMSZyKdgG0O7XqSB0yBA1G+yIV5HkPa3eYOXTkC2VWZvLIhpQhxBc0SDJw OaynIH4Hr+FckiVcsfCiDaqhk3ssGNnRC1hh4WwK82l4leKpjCg5iXtNrocHYhoqVcUS Dc1O2CzW5dzHmdSuMKsydVh5qvmOfW0CO55Pk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701280138; x=1701884938; h=in-reply-to:references:from:to:subject:cc:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Bln14Ee8i3xEo8EP+vbwRILfmg6rBVMy8wmJzUAh4Do=; b=sGuHtUuVBRIouUsrtftZI7prc6Qb7OIUXvMNYpU8Ogm0JwLgo7mW3wGKSQ8J8fDx0r 64fAVmpCB+z4yfD2Wx4Ksb6tHVZgbejS03kr+sp5pMYh2KHwlu0p8E8KNt9w5RvArl3d +wvU5Si2CVBDKyOeonX2RWpWQ0PcxehNk4LuTY8S9e/OHjIi3B5EVCfouYO5BnkQJwSX LVgmxzT8gk78zIj04tKzqgXEwPh/L2IAp10qjlT2fnuUpn9dBxMHcBWQ/IQNNohMOBeg ujZ7Jrja06kphDxvlAgQQQmYlxIZ7Apa2RtKjCiB21j14JugBbHiqQXGxYJ524AMdYO2 buBg== X-Gm-Message-State: AOJu0Yz1gNBckrPQ1udXKgtZTFeNDCK7hvzI7LwyPUgcAsiEKFRbaxXg TCa/oOfYxTVSZ5EA6t0cFNGpow== X-Google-Smtp-Source: AGHT+IGN2myzCSIrnALooEgeiMhau45Vv9VXEz5M5qpYC7tUySK4Gd6fZKiQPPxm1JifLDVZnfrcQA== X-Received: by 2002:a05:6870:c146:b0:1fa:174d:293 with SMTP id g6-20020a056870c14600b001fa174d0293mr18636943oad.26.1701280138624; Wed, 29 Nov 2023 09:48:58 -0800 (PST) Received: from localhost ([2607:fb91:128d:c7a0:3996:e070:71ee:42fb]) by smtp.gmail.com with ESMTPSA id a3-20020a056830100300b006cdf9935af2sm2029622otp.53.2023.11.29.09.48.56 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 29 Nov 2023 09:48:58 -0800 (PST) Content-Type: multipart/mixed; boundary=d86522dc12b2f21f4d5da39f32546dbc76d20c0d6cc7c8d75bd90394217f Mime-Version: 1.0 Date: Wed, 29 Nov 2023 11:48:51 -0600 Message-Id: Cc: "Tom Lane" , , "Shlok Kyal" Subject: Re: psql not responding to SIGINT upon db reconnection To: "Heikki Linnakangas" From: "Tristan Partin" X-Mailer: aerc 0.16.0-85-g0be135a38186 References: <1588058.1690220636@sss.pgh.pa.us> <5e28b89f-0033-4e42-8184-b71b731c1aa2@iki.fi> <9b3693b7-0bc3-430a-b43f-eae44e8a39b6@iki.fi> <032868e0-a530-4fc7-972c-af6f08950b7e@iki.fi> In-Reply-To: <032868e0-a530-4fc7-972c-af6f08950b7e@iki.fi> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --d86522dc12b2f21f4d5da39f32546dbc76d20c0d6cc7c8d75bd90394217f Content-Type: multipart/alternative; boundary=a22549bb83ff59f84e9b686ad44176798581913379c128e17dfe4682fca3 --a22549bb83ff59f84e9b686ad44176798581913379c128e17dfe4682fca3 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8; format=Flowed On Thu Nov 23, 2023 at 3:19 AM CST, Heikki Linnakangas wrote: > On 22/11/2023 23:29, Tristan Partin wrote: > > Ha, you're right. I had this working yesterday, but convinced myself it > > didn't. I had a do while loop wrapping the blocking call. Here is a v4, > > which seems to pass the tests that were pointed out to be failing > > earlier. > > Thanks! This suffers from a classic race condition: > > > + if (cancel_pressed) > > + break; > > + > > + sock =3D PQsocket(n_conn); > > + if (sock =3D=3D -1) > > + break; > > + > > + rc =3D pqSocketPoll(sock, for_read, !for_read, (time_t)-1); > > + Assert(rc !=3D 0); /* Timeout is impossible. */ > > + if (rc =3D=3D -1) > > + { > > + success =3D false; > > + break; > > + } > > If a signal arrives between the "if (cancel_pressed)" check and=20 > pqSocketPoll(), pgSocketPoll will "miss" the signal and block=20 > indefinitely. There are three solutions to this: > > 1. Use a timeout, so that you wake up periodically to check for any=20 > missed signals. Easy solution, the downsides are that you will not react= =20 > as quickly if the signal is missed, and you waste some cycles by waking= =20 > up unnecessarily. > > 2. The Self-pipe trick: https://cr.yp.to/docs/selfpipe.html. We also use= =20 > that in src/backend/storage/ipc/latch.c. It's portable, but somewhat=20 > complicated. > > 3. Use pselect() or ppoll(). They were created specifically to address=20 > this problem. Not fully portable, I think it's missing on Windows at leas= t. > > Maybe use pselect() if it's available, and select() with a timeout if=20 > it's not. First I have ever heard of this race condition, and now I will commit it=20 to durable storage :). I went ahead and did option #3 that you proposed.=20 On Windows, I have a 1 second timeout for the select/poll. That seemed=20 like a good balance of user experience and spinning the CPU. But I am=20 open to other values. I don't have a Windows VM, but maybe I should set=20 one up... I am not completely in love with the code I have written. Lots of=20 conditional compilation which makes it hard to read. Looking forward to=20 another round of review to see what y'all think. For what it's worth, I did try #2, but since psql installs its own=20 SIGINT handler, the code became really hairy. --=20 Tristan Partin Neon (https://neon.tech) --a22549bb83ff59f84e9b686ad44176798581913379c128e17dfe4682fca3-- --d86522dc12b2f21f4d5da39f32546dbc76d20c0d6cc7c8d75bd90394217f Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v5-0001-Allow-SIGINT-to-cancel-psql-database-reconnection.patch Content-Type: text/x-patch; charset=utf-8; name=v5-0001-Allow-SIGINT-to-cancel-psql-database-reconnection.patch RnJvbSA0ZmRjY2Y5MjExYWM3OGJiZDc0MzA0ODhkNTE1NjQ2ZjllOWNjZTliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUcmlzdGFuIFBhcnRpbiA8dHJpc3RhbkBuZW9uLnRlY2g+CkRh dGU6IE1vbiwgMjQgSnVsIDIwMjMgMTE6MTI6NTkgLTA1MDAKU3ViamVjdDogW1BBVENIIHY1XSBB bGxvdyBTSUdJTlQgdG8gY2FuY2VsIHBzcWwgZGF0YWJhc2UgcmVjb25uZWN0aW9ucwoKQWZ0ZXIg aW5zdGFsbGluZyB0aGUgU0lHSU5UIGhhbmRsZXIgaW4gcHNxbCwgU0lHSU5UIGNhbiBubyBsb25n ZXIgY2FuY2VsCmRhdGFiYXNlIHJlY29ubmVjdGlvbnMuIEZvciBpbnN0YW5jZSwgaWYgdGhlIHVz ZXIgc3RhcnRzIGEgcmVjb25uZWN0aW9uCmFuZCB0aGVuIG5lZWRzIHRvIGRvIHNvbWUgZm9ybSBv ZiBpbnRlcmFjdGlvbiAoaWUgcHNxbCBpcyBwb2xsaW5nKSwKdGhlcmUgaXMgbm8gd2F5IHRvIGNh bmNlbCB0aGUgcmVjb25uZWN0aW9uIHByb2Nlc3MgY3VycmVudGx5LgoKVXNlIFBRY29ubmVjdFN0 YXJ0UGFyYW1zKCkgaW4gb3JkZXIgdG8gaW5zZXJ0IGEgQ2FuY2VsUmVxdWVzdGVkIGNoZWNrCmlu dG8gdGhlIHBvbGxpbmcgbG9vcC4KLS0tCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICB8ICAg MSArCiBzcmMvYmluL3BzcWwvY29tbWFuZC5jICAgICB8IDIyMiArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiB8ICAgMyArCiBz cmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbSB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQsIDIyNiBp bnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9t ZXNvbi5idWlsZAppbmRleCBlZTU4ZWU3YTA2Li4yZDYzNDg1YzUzIDEwMDY0NAotLS0gYS9tZXNv bi5idWlsZAorKysgYi9tZXNvbi5idWlsZApAQCAtMjQ0MCw2ICsyNDQwLDcgQEAgZnVuY19jaGVj a3MgPSBbCiAgIFsncG9zaXhfZmFkdmlzZSddLAogICBbJ3Bvc2l4X2ZhbGxvY2F0ZSddLAogICBb J3Bwb2xsJ10sCisgIFsncHNlbGVjdCddLAogICBbJ3BzdGF0J10sCiAgIFsncHRocmVhZF9iYXJy aWVyX3dhaXQnLCB7J2RlcGVuZGVuY2llcyc6IFt0aHJlYWRfZGVwXX1dLAogICBbJ3B0aHJlYWRf aXNfdGhyZWFkZWRfbnAnLCB7J2RlcGVuZGVuY2llcyc6IFt0aHJlYWRfZGVwXX1dLApkaWZmIC0t Z2l0IGEvc3JjL2Jpbi9wc3FsL2NvbW1hbmQuYyBiL3NyYy9iaW4vcHNxbC9jb21tYW5kLmMKaW5k ZXggODJjYzA5MTU2OC4uYzMyNWZlZGI1MSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2NvbW1h bmQuYworKysgYi9zcmMvYmluL3BzcWwvY29tbWFuZC5jCkBAIC0xMSw2ICsxMSwxMSBAQAogI2lu Y2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDx1dGltZS5oPgorI2lm IEhBVkVfUE9MTAorI2luY2x1ZGUgPHBvbGwuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3lzL3NlbGVj dC5oPgorI2VuZGlmCiAjaWZuZGVmIFdJTjMyCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4JCQkvKiBm b3Igc3RhdCgpICovCiAjaW5jbHVkZSA8c3lzL3RpbWUuaD4JCQkvKiBmb3Igc2V0aXRpbWVyKCkg Ki8KQEAgLTQwLDYgKzQ1LDcgQEAKICNpbmNsdWRlICJsYXJnZV9vYmouaCIKICNpbmNsdWRlICJs aWJwcS1mZS5oIgogI2luY2x1ZGUgImxpYnBxL3BxY29tbS5oIgorI2luY2x1ZGUgImxpYnBxL3Bx c2lnbmFsLmgiCiAjaW5jbHVkZSAibWFpbmxvb3AuaCIKICNpbmNsdWRlICJwb3J0YWJpbGl0eS9p bnN0cl90aW1lLmgiCiAjaW5jbHVkZSAicHFleHBidWZmZXIuaCIKQEAgLTMyNTEsNiArMzI1Nywx NjkgQEAgY29weV9wcmV2aW91c19xdWVyeShQUUV4cEJ1ZmZlciBxdWVyeV9idWYsIFBRRXhwQnVm ZmVyIHByZXZpb3VzX2J1ZikKIAlyZXR1cm4gZmFsc2U7CiB9CiAKKy8qCisgKiBDaGVjayBhIGZp bGUgZGVzY3JpcHRvciBmb3IgcmVhZCBhbmQvb3Igd3JpdGUgZGF0YSwgcG9zc2libHkgd2FpdGlu Zy4KKyAqIElmIG5laXRoZXIgZm9yUmVhZCBub3IgZm9yV3JpdGUgYXJlIHNldCwgaW1tZWRpYXRl bHkgcmV0dXJuIGEgdGltZW91dAorICogY29uZGl0aW9uICh3aXRob3V0IHdhaXRpbmcpLiAgUmV0 dXJuID4wIGlmIGNvbmRpdGlvbiBpcyBtZXQsIDAKKyAqIGlmIGEgdGltZW91dCBvY2N1cnJlZCwg LTEgaWYgYW4gZXJyb3Igb3IgaW50ZXJydXB0IG9jY3VycmVkLgorICoKKyAqIFRpbWVvdXQgaXMg aW5maW5pdGUgaWYgZW5kX3RpbWUgaXMgLTEuICBUaW1lb3V0IGlzIGltbWVkaWF0ZSAobm8gYmxv Y2tpbmcpCisgKiBpZiBlbmRfdGltZSBpcyAwIChvciBpbmRlZWQsIGFueSB0aW1lIGJlZm9yZSBu b3cpLgorICovCitzdGF0aWMgaW50CitwcVNvY2tldFBvbGwoaW50IHNvY2ssIGludCBmb3JSZWFk LCBpbnQgZm9yV3JpdGUsIHRpbWVfdCBlbmRfdGltZSkKK3sKKwkvKgorCSAqIFdlIHVzZSBmdW5j dGlvbnMgaW4gdGhlIGZvbGxvd2luZyBvcmRlciBpZiBhdmFpbGFibGU6CisJICogICAtIHBwb2xs KDIpIE9SIHBzZWxlY3QoMikKKwkgKiAgIC0gcG9sbCgyKSBPUiBzZWxlY3QoMikKKwkgKi8KKyNp ZmRlZiBIQVZFX1BPTEwKKwlzdHJ1Y3QgcG9sbGZkIGlucHV0X2ZkOworI2lmZGVmIEhBVkVfUFBP TEwKKwlpbnQJCQkJcmM7CisJc2lnc2V0X3QJCWVtcHR5c2V0OworCXNpZ3NldF90CQlibG9ja3Nl dDsKKwlzaWdzZXRfdAkJb3JpZ3NldDsKKwlzdHJ1Y3QgdGltZXNwZWMgdGltZW91dDsKKwlzdHJ1 Y3QgdGltZXNwZWMgKnB0cl90aW1lb3V0OworI2Vsc2UKKwlpbnQJCQl0aW1lb3V0X21zOworI2Vu ZGlmCisKKwlpZiAoIWZvclJlYWQgJiYgIWZvcldyaXRlKQorCQlyZXR1cm4gMDsKKworCWlucHV0 X2ZkLmZkID0gc29jazsKKwlpbnB1dF9mZC5ldmVudHMgPSBQT0xMRVJSOworCWlucHV0X2ZkLnJl dmVudHMgPSAwOworCisJaWYgKGZvclJlYWQpCisJCWlucHV0X2ZkLmV2ZW50cyB8PSBQT0xMSU47 CisJaWYgKGZvcldyaXRlKQorCQlpbnB1dF9mZC5ldmVudHMgfD0gUE9MTE9VVDsKKworCS8qIENv bXB1dGUgYXBwcm9wcmlhdGUgdGltZW91dCBpbnRlcnZhbCAqLworI2lmZGVmIEhBVkVfUFBPTEwK KwlzaWdlbXB0eXNldCgmYmxvY2tzZXQpOworCXNpZ2FkZHNldCgmYmxvY2tzZXQsIFNJR0lOVCk7 CisJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmYmxvY2tzZXQsICZvcmlnc2V0KTsKKworCWlmIChl bmRfdGltZSA9PSAoKHRpbWVfdCkgLTEpKQorCQlwdHJfdGltZW91dCA9IE5VTEw7CisJZWxzZQor CXsKKwkJdGltZW91dC50dl9zZWMgPSBlbmRfdGltZTsKKwkJdGltZW91dC50dl9uc2VjID0gMDsK KwkJcHRyX3RpbWVvdXQgPSAmdGltZW91dDsKKwl9CisjZWxzZQorCWlmIChlbmRfdGltZSA9PSAo KHRpbWVfdCkgLTEpKQorCQl0aW1lb3V0X21zID0gLTE7CisJZWxzZQorCXsKKwkJdGltZV90CQlu b3cgPSB0aW1lKE5VTEwpOworCisJCWlmIChlbmRfdGltZSA+IG5vdykKKwkJCXRpbWVvdXRfbXMg PSAoZW5kX3RpbWUgLSBub3cpICogMTAwMDsKKwkJZWxzZQorCQkJdGltZW91dF9tcyA9IDA7CisJ fQorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BQT0xMCisJc2lnZW1wdHlzZXQoJmVtcHR5c2V0KTsK KwlpZiAoY2FuY2VsX3ByZXNzZWQpCisJeworCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJm9y aWdzZXQsIE5VTEwpOworCQlyZXR1cm4gMTsKKwl9CisKKwlyYyA9IHBwb2xsKCZpbnB1dF9mZCwg MSwgcHRyX3RpbWVvdXQsICZlbXB0eXNldCk7CisJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZv cmlnc2V0LCBOVUxMKTsKKwlyZXR1cm4gcmM7CisjZWxzZQorCXJldHVybiBwb2xsKCZpbnB1dF9m ZCwgMSwgdGltZW91dF9tcyk7CisjZW5kaWYKKyNlbHNlCQkJCQkJCS8qICFIQVZFX1BPTEwgKi8K KworCWZkX3NldAkJaW5wdXRfbWFzazsKKwlmZF9zZXQJCW91dHB1dF9tYXNrOworCWZkX3NldAkJ ZXhjZXB0X21hc2s7CisjaWZkZWYgSEFWRV9QU0VMRUNUCisJaW50IAkJCXJjOworCXNpZ3NldF90 CQllbXB0eXNldDsKKwlzaWdzZXRfdAkJYmxvY2tzZXQ7CisJc2lnc2V0X3QJCW9yaWdzZXQ7CisJ c3RydWN0IHRpbWVzcGVjIHRpbWVvdXQ7CisJc3RydWN0IHRpbWVzcGVjICpwdHJfdGltZW91dDsK KyNlbHNlCisJc3RydWN0IHRpbWV2YWwgdGltZW91dDsKKwlzdHJ1Y3QgdGltZXZhbCAqcHRyX3Rp bWVvdXQ7CisjZW5kaWYKKworCWlmICghZm9yUmVhZCAmJiAhZm9yV3JpdGUpCisJCXJldHVybiAw OworCisJRkRfWkVSTygmaW5wdXRfbWFzayk7CisJRkRfWkVSTygmb3V0cHV0X21hc2spOworCUZE X1pFUk8oJmV4Y2VwdF9tYXNrKTsKKwlpZiAoZm9yUmVhZCkKKwkJRkRfU0VUKHNvY2ssICZpbnB1 dF9tYXNrKTsKKworCWlmIChmb3JXcml0ZSkKKwkJRkRfU0VUKHNvY2ssICZvdXRwdXRfbWFzayk7 CisJRkRfU0VUKHNvY2ssICZleGNlcHRfbWFzayk7CisKKwkvKiBDb21wdXRlIGFwcHJvcHJpYXRl IHRpbWVvdXQgaW50ZXJ2YWwgKi8KKyNpZmRlZiBIQVZFX1BTRUxFQ1QKKwlzaWdlbXB0eXNldCgm YmxvY2tzZXQpOworCXNpZ2FkZHNldCgmYmxvY2tzZXQsIFNJR0lOVCk7CisJc2lncHJvY21hc2so U0lHX0JMT0NLLCAmYmxvY2tzZXQsICZvcmlnc2V0KTsKKworCWlmIChlbmRfdGltZSA9PSAoKHRp bWVfdCkgLTEpKQorCQlwdHJfdGltZW91dCA9IE5VTEw7CisJZWxzZQorCXsKKwkJdGltZW91dC50 dl9zZWMgPSBlbmRfdGltZTsKKwkJdGltZW91dC50dl9uc2VjID0gMDsKKwkJcHRyX3RpbWVvdXQg PSAmdGltZW91dDsKKwl9CisjZWxzZQorCWlmIChlbmRfdGltZSA9PSAoKHRpbWVfdCkgLTEpKQor CQlwdHJfdGltZW91dCA9IE5VTEw7CisJZWxzZQorCXsKKwkJdGltZV90CQlub3cgPSB0aW1lKE5V TEwpOworCisJCWlmIChlbmRfdGltZSA+IG5vdykKKwkJCXRpbWVvdXQudHZfc2VjID0gZW5kX3Rp bWUgLSBub3c7CisJCWVsc2UKKwkJCXRpbWVvdXQudHZfc2VjID0gMDsKKwkJdGltZW91dC50dl91 c2VjID0gMDsKKwkJcHRyX3RpbWVvdXQgPSAmdGltZW91dDsKKwl9CisjZW5kaWYKKworI2lmZGVm IEhBVkVfUFNFTEVDVAorCXNpZ2VtcHR5c2V0KCZlbXB0eXNldCk7CisJaWYgKGNhbmNlbF9wcmVz c2VkKQorCXsKKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvcmlnc2V0LCBOVUxMKTsKKwkJ cmV0dXJuIDE7CisJfQorCisJcmMgPSBwc2VsZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywgJm91 dHB1dF9tYXNrLAorCQkJCSAmZXhjZXB0X21hc2ssIHB0cl90aW1lb3V0LCAmZW1wdHlzZXQpOwor CXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb3JpZ3NldCwgTlVMTCk7CisJcmV0dXJuIHJjOwor I2Vsc2UKKwlyZXR1cm4gc2VsZWN0KHNvY2sgKyAxLCAmaW5wdXRfbWFzaywgJm91dHB1dF9tYXNr LAorCQkJCSAgJmV4Y2VwdF9tYXNrLCBwdHJfdGltZW91dCk7CisjZW5kaWYKKyNlbmRpZgkJCQkJ CQkvKiBIQVZFX1BPTEwgKi8KK30KKwogLyoKICAqIEFzayB0aGUgdXNlciBmb3IgYSBwYXNzd29y ZDsgJ3VzZXJuYW1lJyBpcyB0aGUgdXNlcm5hbWUgdGhlCiAgKiBwYXNzd29yZCBpcyBmb3IsIGlm IG9uZSBoYXMgYmVlbiBleHBsaWNpdGx5IHNwZWNpZmllZC4KQEAgLTMzMjQsNiArMzQ5Myw3IEBA IGRvX2Nvbm5lY3QoZW51bSB0cml2YWx1ZSByZXVzZV9wcmV2aW91c19zcGVjaWZpY2F0aW9uLAog CWJvb2wJCWtlZXBfcGFzc3dvcmQgPSB0cnVlOwogCWJvb2wJCWhhc19jb25uZWN0aW9uX3N0cmlu ZzsKIAlib29sCQlyZXVzZV9wcmV2aW91czsKKwlib29sCQlmb3JfcmVhZDsKIAogCWhhc19jb25u ZWN0aW9uX3N0cmluZyA9IGRibmFtZSA/CiAJCXJlY29nbml6ZWRfY29ubmVjdGlvbl9zdHJpbmco ZGJuYW1lKSA6IGZhbHNlOwpAQCAtMzYxNCwxMSArMzc4NCw2MSBAQCBkb19jb25uZWN0KGVudW0g dHJpdmFsdWUgcmV1c2VfcHJldmlvdXNfc3BlY2lmaWNhdGlvbiwKIAkJdmFsdWVzW3BhcmFtbnVt XSA9IE5VTEw7CiAKIAkJLyogTm90ZSB3ZSBkbyBub3Qgd2FudCBsaWJwcSB0byByZS1leHBhbmQg dGhlIGRibmFtZSBwYXJhbWV0ZXIgKi8KLQkJbl9jb25uID0gUFFjb25uZWN0ZGJQYXJhbXMoa2V5 d29yZHMsIHZhbHVlcywgZmFsc2UpOworCQluX2Nvbm4gPSBQUWNvbm5lY3RTdGFydFBhcmFtcyhr ZXl3b3JkcywgdmFsdWVzLCBmYWxzZSk7CiAKIAkJcGdfZnJlZShrZXl3b3Jkcyk7CiAJCXBnX2Zy ZWUodmFsdWVzKTsKIAorCQlmb3JfcmVhZCA9IGZhbHNlOworCQl3aGlsZSAodHJ1ZSkgeworCQkJ aW50CQlyYzsKKwkJCWludAkJc29jazsKKwkJCXRpbWVfdAl0aW1lb3V0OworCisJCQlpZiAoY2Fu Y2VsX3ByZXNzZWQpCisJCQkJYnJlYWs7CisKKwkJCXNvY2sgPSBQUXNvY2tldChuX2Nvbm4pOwor CQkJaWYgKHNvY2sgPT0gLTEpCisJCQkJYnJlYWs7CisKKwkJCS8qCisJCQkgKiBXZSB1c2UgcHBv bGwoMikvcHNlbGVjdCgyKSB0byBhY2NvdW50IGZvciB0aGUgcmFjZSBjb25kaXRpb24gaW4KKwkJ CSAqIHdoaWNoIFNJR0lOVCBpcyBzZW50IGFmdGVyIGNoZWNraW5nIGNhbmNlbF9wcmVzc2VkLiBC dXQgb24KKwkJCSAqIHBsYXRmb3JtcyB0aGF0IGRvbid0IGhhdmUgZWl0aGVyIGZ1bmN0aW9uLCB3 ZSBjYW4ganVzdCBzcGluIHRoZQorCQkJICogQ1BVIGEgYml0IHBvbGxpbmcsIHNvIHNldCB0aGUg dGltZW91dCB0byAxIHNlY29uZCBpZiB3ZSBkb24ndAorCQkJICogaGF2ZSB0aGUgYWZvcmVtZW50 aW9uZWQgZnVuY3Rpb25zLCBvdGhlcndpc2Ugc2V0IHRpbWVvdXQgdG8KKwkJCSAqIGEgbmVnYXRp dmUgdmFsdWUgaW5kaWNhdGluZyB3ZSB3aWxsIHNpdCBhbmQgd2FpdCBmb3JldmVyLgorCQkJICov CisjaWYgZGVmaW5lZChIQVZFX1BQT0xMKSB8fCBkZWZpbmVkKEhBVkVfUFNFTEVDVCkKKwkJCXRp bWVvdXQgPSAtMTsKKyNlbHNlCisJCQl0aW1lb3V0ID0gMTsKKyNlbmRpZgorCisJCQlyYyA9IHBx U29ja2V0UG9sbChzb2NrLCBmb3JfcmVhZCwgIWZvcl9yZWFkLCB0aW1lb3V0KTsKKwkJCWlmIChy YyA9PSAtMSkKKwkJCXsKKwkJCQlzdWNjZXNzID0gZmFsc2U7CisJCQkJYnJlYWs7CisJCQl9CisK KwkJCXN3aXRjaCAoUFFjb25uZWN0UG9sbChuX2Nvbm4pKSB7CisJCQljYXNlIFBHUkVTX1BPTExJ TkdfT0s6CisJCQljYXNlIFBHUkVTX1BPTExJTkdfRkFJTEVEOgorCQkJCWdvdG8gZmluaXNoOwor CQkJY2FzZSBQR1JFU19QT0xMSU5HX1JFQURJTkc6CisJCQkJZm9yX3JlYWQgPSB0cnVlOworCQkJ CWNvbnRpbnVlOworCQkJY2FzZSBQR1JFU19QT0xMSU5HX1dSSVRJTkc6CisJCQkJZm9yX3JlYWQg PSBmYWxzZTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgUEdSRVNfUE9MTElOR19BQ1RJVkU6CisJ CQkJcGdfdW5yZWFjaGFibGUoKTsKKwkJCX0KKwkJfQorCisJZmluaXNoOgogCQlpZiAoUFFzdGF0 dXMobl9jb25uKSA9PSBDT05ORUNUSU9OX09LKQogCQkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KaW5k ZXggZDhhMjk4NTU2Ny4uZjlmZDdkMGRlNyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcGdfY29u ZmlnLmguaW4KKysrIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KQEAgLTMzMyw2ICszMzMs OSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcG9sbCcgZnVuY3Rpb24uICov CiAjdW5kZWYgSEFWRV9QUE9MTAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBz ZWxlY3QnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUFNFTEVDVAorCiAvKiBEZWZpbmUgaWYg eW91IGhhdmUgUE9TSVggdGhyZWFkcyBsaWJyYXJpZXMgYW5kIGhlYWRlciBmaWxlcy4gKi8KICN1 bmRlZiBIQVZFX1BUSFJFQUQKIApkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL21zdmMvU29sdXRpb24u cG0gYi9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbQppbmRleCA5OGE1YjVkODcyLi5kMDM1ZjQ0 ZjczIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvbXN2Yy9Tb2x1dGlvbi5wbQorKysgYi9zcmMvdG9v bHMvbXN2Yy9Tb2x1dGlvbi5wbQpAQCAtMzA4LDYgKzMwOCw3IEBAIHN1YiBHZW5lcmF0ZUZpbGVz CiAJCUhBVkVfUE9TSVhfRkFEVklTRSA9PiB1bmRlZiwKIAkJSEFWRV9QT1NJWF9GQUxMT0NBVEUg PT4gdW5kZWYsCiAJCUhBVkVfUFBPTEwgPT4gdW5kZWYsCisJCUhBVkVfUFNFTEVDVCA9PiB1bmRl ZiwKIAkJSEFWRV9QVEhSRUFEID0+IHVuZGVmLAogCQlIQVZFX1BUSFJFQURfQkFSUklFUl9XQUlU ID0+IHVuZGVmLAogCQlIQVZFX1BUSFJFQURfSVNfVEhSRUFERURfTlAgPT4gdW5kZWYsCi0tIApU cmlzdGFuIFBhcnRpbgpOZW9uIChodHRwczovL25lb24udGVjaCkKCg== --d86522dc12b2f21f4d5da39f32546dbc76d20c0d6cc7c8d75bd90394217f--