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 1rOJCp-0037qe-GH for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jan 2024 15:12:24 +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 1rOJCo-002fTd-H2 for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jan 2024 15:12:22 +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.94.2) (envelope-from ) id 1rOJCo-002fTV-3C for pgsql-hackers@lists.postgresql.org; Fri, 12 Jan 2024 15:12:22 +0000 Received: from meesny.iki.fi ([2001:67c:2b0:1c1::201]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rOJCl-001Chw-4L for pgsql-hackers@lists.postgresql.org; Fri, 12 Jan 2024 15:12:21 +0000 Received: from [192.168.1.115] (dsl-hkibng22-54f8db-125.dhcp.inet.fi [84.248.219.125]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by meesny.iki.fi (Postfix) with ESMTPSA id 4TBQ4b0p5DzyWN; Fri, 12 Jan 2024 17:12:15 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1705072335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=l+5mpP5MVXkkeY2UNdSdbBfNCHg2nHD1SY0YxXUnP9c=; b=ggvul1v28yUu9W76qStXya8BwBXJRx0WgJpmWjxVaxJdB1aV3tEgZ3K9M7FAoSRtEk+cm0 j3zWd8hZuhHIQuTM9uFssS2VkWSvYguYqxLUAXiQ1nAJ8DkHIdGjnTSbrMm8QHV4oeLL9l NwWcDR2iJ+Seg9yBaT9n1TEJ11F+Qeo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=meesny; t=1705072335; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=l+5mpP5MVXkkeY2UNdSdbBfNCHg2nHD1SY0YxXUnP9c=; b=SwCvWQCUJaSirtZhbS4wapKRk79EZQeE5ppofgeQYvuWF4xxBgCVkt+H47iJDuJLl90LCl IaJnoIAGKKALCeQrqwefGy2rGLm81AdqeV3FA0SvnyAEpfHbahYLi4la6aqMMP98mWyX4B 9GC1Oevvh4Xv3J2EeAAuuDrJiFlCq+w= ARC-Seal: i=1; s=meesny; d=iki.fi; t=1705072335; a=rsa-sha256; cv=none; b=iu61Z0GB5WPGBaE3yJlY8z76di7XcUGBNUCzxkmQEVxKHVT35+SrrcTKBRuaZiOEM+kxf4 kyl6CdjDOfuDK91vjNZaSTI7wLt2pE/yv0X2PDql7ORPg++AY76PyHFX6Q9k09PwAcRyeY nWpSF3xwwuMTf2mYlCN+tc7wLXLoOW4= ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------mFxJ1r5w0tFAbUkfZao8kOFV" Message-ID: <04c785f6-36ac-4065-8d29-9e4d66bfb5ad@iki.fi> Date: Fri, 12 Jan 2024 17:12:14 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Stack overflow issue Content-Language: en-US To: Robert Haas Cc: Egor Chindyaskin , Sascha Kuhl , pgsql-hackers@lists.postgresql.org References: <1661334672.728714027@f473.i.mail.ru> <485cf2a2-d504-fb5f-6751-1085ccf614ec@mail.ru> <4530546a-3216-eaa9-4c92-92d33290a211@mail.ru> <6b48c746-9704-46dc-b9be-01fe4137c824@iki.fi> From: Heikki Linnakangas In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------mFxJ1r5w0tFAbUkfZao8kOFV Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 11/01/2024 19:37, Robert Haas wrote: > On Wed, Jan 10, 2024 at 4:25 PM Heikki Linnakangas wrote: >> The problem with CommitTransactionCommand (or rather >> AbortCurrentTransaction() which has the same problem) >> and ShowTransactionStateRec is that they get called in a state where >> aborting can lead to a panic. If you add a "check_stack_depth()" to them >> and try to reproducer scripts that Egor posted, you still get a panic. > > Hmm, that's unfortunate. I'm not sure what to do about that. But I'd > still suggest looking for a goto-free approach. Here's one goto-free attempt. It adds a local loop to where the recursion was, so that if you have a chain of subtransactions that need to be aborted in CommitTransactionCommand, they are aborted iteratively. The TBLOCK_SUBCOMMIT case already had such a loop. I added a couple of comments in the patch marked with "REVIEWER NOTE", to explain why I changed some things. They are to be removed before committing. I'm not sure if this is better than a goto. In fact, even if we commit this, I think I'd still prefer to replace the remaining recursive calls with a goto. Recursion feels a weird to me, when we're unwinding the states from the stack as we go. Of course we could use a "for (;;) { ... continue }" construct around the whole function, instead of a goto, but I don't think that's better than a goto in this case. -- Heikki Linnakangas Neon (https://neon.tech) --------------mFxJ1r5w0tFAbUkfZao8kOFV Content-Type: text/x-patch; charset=UTF-8; name="v2-0001-Turn-tail-recursion-into-iteration-in-AbortCurren.patch" Content-Disposition: attachment; filename*0="v2-0001-Turn-tail-recursion-into-iteration-in-AbortCurren.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA0NDU2OGU2ZmVlZjc5ZDYwNGJiZTE2OGMwODM5YWIyZTAzYzk5ZjhhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IEZyaSwgMTIgSmFuIDIwMjQgMTc6MDc6MjUgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyIDEvMV0gVHVybiB0YWlsIHJlY3Vyc2lvbiBpbnRvIGl0ZXJh dGlvbiBpbgogQWJvcnRDdXJyZW50VHJhbnNhY3Rpb24oKQoKVXN1YWxseSB0aGUgY29tcGls ZXIgd2lsbCBvcHRpbWl6ZSBhd2F5IHRoZSB0YWlsIHJlY3Vyc2lvbiBhbnl3YXksIGJ1dApp ZiBpdCBkb2Vzbid0LCB5b3UgY2FuIGRyaXZlIHRoZSBmdW5jdGlvbiBpbnRvIHN0YWNrIG92 ZXJmbG93LiBGb3IKZXhhbXBsZToKCiAgICAobj0xMDAwMDAwOyBwcmludGYgIkJFR0lOOyI7 IGZvciAoKGk9MTtpPD0kbjtpKyspKTsgZG8gcHJpbnRmICJTQVZFUE9JTlQgcyRpOyI7IGRv bmU7IHByaW50ZiAiRVJST1I7IENPTU1JVDsiKSB8IHBzcWwgPi9kZXYvbnVsbAoKVGhlIHVz dWFsIGZpeCB3b3VsZCBiZSB0byBhZGQgYSBjaGVja19zdGFja19kZXB0aCgpIHRvIHRoZSBm dW5jdGlvbiwKYnV0IHRoYXQncyBub3QgZ29vZCBpbiBBYm9ydEN1cnJlbnRUcmFuc2FjdGlv bigpLCBhcyB5b3UgYXJlIGFscmVhZHkKdHJ5aW5nIHRvIGNsZWFuIHVwIGFmdGVyIGEgZmFp bHVyZS4gZXJlcG9ydGluZyB0aGVyZSBsZWFkcyB0byBhIHBhbmljLgoKRml4IEN1cnJlbnRU cmFuc2FjdGlvbkNvbW1hbmQoKSBpbiBhIHNpbWlsYXIgZmFzaGlvbiwgYWx0aG91Z2gKZXJl cG9ydGluZyB3b3VsZCBiZSBsZXNzIGJhZCB0aGVyZS4KClJlcG9ydCBieSBFZ29yIENoaW5k eWFza2luIGFuZCBBbGV4YW5kZXIgTGFraGluLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cu cG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8xNjcyNzYwNDU3Ljk0MDQ2MjA3OSU0MGYzMDYu aS5tYWlsLnJ1Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jIHwgMTQx ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDc1IGlu c2VydGlvbnMoKyksIDY2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hh Y3QuYwppbmRleCA0NjQ4NTgxMTdlMC4uMzI5YTEzOWM5OTEgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94YWN0LmMKQEAgLTMxOTQsNDcgKzMxOTQsNjIgQEAgQ29tbWl0VHJhbnNhY3Rp b25Db21tYW5kKHZvaWQpCiAJCQkJQ29tbWl0U3ViVHJhbnNhY3Rpb24oKTsKIAkJCQlzID0g Q3VycmVudFRyYW5zYWN0aW9uU3RhdGU7CS8qIGNoYW5nZWQgYnkgcG9wICovCiAJCQl9IHdo aWxlIChzLT5ibG9ja1N0YXRlID09IFRCTE9DS19TVUJDT01NSVQpOworCQkJLyoKKwkJCSAq IFJFVklFV0VSIE5PVEU6IFdlIHVzZWQgdG8gaGF2ZSBkdXBsaWNhdGVkIGNvZGUgaGVyZSwg dG8gaGFuZGxlCisJCQkgKiB0aGUgVEJMT0NLX0VORCBhbmQgVEJMT0NLX1BSRVBBUkUgY2Fz ZXMgZXhhY3RseSB0aGUgc2FtZSB3YXkKKwkJCSAqIHRoYXQgd2UgZG8gYWJvdmUuICBJIHJl cGxhY2VkIHRoYXQgd2l0aCBhIHJlY3Vyc2l2ZSBjYWxsIHRvCisJCQkgKiBDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKSwgdG8gbWFrZSB0aGlzIGNvbnNpc3RlbnQgd2l0aCB0aGUKKwkJ CSAqIFRCTE9DS19TVUJBQk9SVF9FTkQgYW5kIFRCTE9DS19TVUJBQk9SVF9QRU5ESU5HIGhh bmRsaW5nLiAgVGhpcworCQkJICogY2FuIG9ubHkgcmVjdXJzZSBvbmNlLCBzbyB0aGVyZSdz IG5vIHJpc2sgb2Ygc3RhY2sgb3ZlcmZsb3cuCisJCQkgKi8KIAkJCS8qIElmIHdlIGhhZCBh IENPTU1JVCBjb21tYW5kLCBmaW5pc2ggb2ZmIHRoZSBtYWluIHhhY3QgdG9vICovCi0JCQlp ZiAocy0+YmxvY2tTdGF0ZSA9PSBUQkxPQ0tfRU5EKQotCQkJewotCQkJCUFzc2VydChzLT5w YXJlbnQgPT0gTlVMTCk7Ci0JCQkJQ29tbWl0VHJhbnNhY3Rpb24oKTsKLQkJCQlzLT5ibG9j a1N0YXRlID0gVEJMT0NLX0RFRkFVTFQ7Ci0JCQkJaWYgKHMtPmNoYWluKQotCQkJCXsKLQkJ CQkJU3RhcnRUcmFuc2FjdGlvbigpOwotCQkJCQlzLT5ibG9ja1N0YXRlID0gVEJMT0NLX0lO UFJPR1JFU1M7Ci0JCQkJCXMtPmNoYWluID0gZmFsc2U7Ci0JCQkJCVJlc3RvcmVUcmFuc2Fj dGlvbkNoYXJhY3RlcmlzdGljcygmc2F2ZXRjKTsKLQkJCQl9Ci0JCQl9Ci0JCQllbHNlIGlm IChzLT5ibG9ja1N0YXRlID09IFRCTE9DS19QUkVQQVJFKQotCQkJewotCQkJCUFzc2VydChz LT5wYXJlbnQgPT0gTlVMTCk7Ci0JCQkJUHJlcGFyZVRyYW5zYWN0aW9uKCk7Ci0JCQkJcy0+ YmxvY2tTdGF0ZSA9IFRCTE9DS19ERUZBVUxUOwotCQkJfQotCQkJZWxzZQorCQkJaWYgKHMt PmJsb2NrU3RhdGUgIT0gVEJMT0NLX0VORCAmJiBzLT5ibG9ja1N0YXRlICE9IFRCTE9DS19Q UkVQQVJFKQogCQkJCWVsb2coRVJST1IsICJDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQ6IHVu ZXhwZWN0ZWQgc3RhdGUgJXMiLAogCQkJCQkgQmxvY2tTdGF0ZUFzU3RyaW5nKHMtPmJsb2Nr U3RhdGUpKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCQkJYnJlYWs7CiAK IAkJCS8qCi0JCQkgKiBUaGUgY3VycmVudCBhbHJlYWR5LWZhaWxlZCBzdWJ0cmFuc2FjdGlv biBpcyBlbmRpbmcgZHVlIHRvIGEKLQkJCSAqIFJPTExCQUNLIG9yIFJPTExCQUNLIFRPIGNv bW1hbmQsIHNvIHBvcCBpdCBhbmQgcmVjdXJzaXZlbHkKLQkJCSAqIGV4YW1pbmUgdGhlIHBh cmVudCAod2hpY2ggY291bGQgYmUgaW4gYW55IG9mIHNldmVyYWwgc3RhdGVzKS4KKwkJCSAq IFRoZSBjdXJyZW50IHN1YnRyYW5zYWN0aW9uIGlzIGVuZGluZyBkdWUgdG8gYSBST0xMQkFD SyBvcgorCQkJICogUk9MTEJBQ0sgVE8gY29tbWFuZC4gIFBvcCBpdCwgYXMgd2VsbCBhcyBh bnkgb2YgaXQgcGFyZW50cyB0aGF0CisJCQkgKiBhcmUgYWxzbyBiZWluZyByb2xsZWQgYmFj ay4KIAkJCSAqLwogCQljYXNlIFRCTE9DS19TVUJBQk9SVF9FTkQ6Ci0JCQlDbGVhbnVwU3Vi VHJhbnNhY3Rpb24oKTsKLQkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwotCQkJYnJl YWs7CisJCWNhc2UgVEJMT0NLX1NVQkFCT1JUX1BFTkRJTkc6CisJCQlkbyB7CisJCQkJLyoK KwkJCQkgKiBUaGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFNVQkFCT1JUX0VORCBhbmQgU1VCQUJP UlRfUEVORElORyBpcworCQkJCSAqIHdoZXRoZXIgdGhlIHN1YnRyYW5zYWN0aW9uIGhhcyBh bHJlYWR5IGJlZW4gYWJvcnRlZCBhbmQgd2UKKwkJCQkgKiBqdXN0IG5lZWQgdG8gY2xlYW4g aXQgdXAsIG9yIGlmIHdlIG5lZWQgdG8gYWxzbyBhYm9ydCBpdAorCQkJCSAqIGZpcnN0Lgor CQkJCSAqLworCQkJCWlmIChzLT5ibG9ja1N0YXRlID09IFRCTE9DS19TVUJBQk9SVF9QRU5E SU5HKQorCQkJCQlBYm9ydFN1YlRyYW5zYWN0aW9uKCk7CisJCQkJQ2xlYW51cFN1YlRyYW5z YWN0aW9uKCk7CisJCQkJcyA9IEN1cnJlbnRUcmFuc2FjdGlvblN0YXRlOwkvKiBjaGFuZ2Vk IGJ5IHBvcCAqLworCQkJfSB3aGlsZSAocy0+YmxvY2tTdGF0ZSA9PSBUQkxPQ0tfU1VCQUJP UlRfRU5EIHx8CisJCQkJCSBzLT5ibG9ja1N0YXRlID09IFRCTE9DS19TVUJBQk9SVF9QRU5E SU5HKTsKIAogCQkJLyoKLQkJCSAqIEFzIGFib3ZlLCBidXQgaXQncyBub3QgZGVhZCB5ZXQs IHNvIGFib3J0IGZpcnN0LgorCQkJICogUkVWSUVXRVIgTk9URTogdGhlIG9sZCBjb21tZW50 IHNhaWQgdGhhdCB0aGUgcGFyZW50IGNhbiBiZSAiaW4KKwkJCSAqIGFueSBvZiBzZXZlcmFs IHN0YXRlcyIuICBJIGxvb2tlZCBhdCB0aGUgY29kZSB0aGF0IHNldHMgdGhlCisJCQkgKiBz dGF0ZSB0byBUQkxPQ0tfU1VCQUJPUlRfRU5EIG9yIFRCTE9DS19TVUJBQk9SVF9QRU5ESU5H LCBhbmQKKwkJCSAqIGNhbWUgdG8gdGhlIGNvbmNsdXNpb24gdGhhdCB0aGVzZSBhcmUgdGhl IG9ubHkgcG9zc2libGUgc3RhdGVzCisJCQkgKiBhYm92ZSB0aGUgY2hhaW4gb2YgVEJMT0NL X1NVQkFCT1JUX0VORCBvcgorCQkJICogVEJMT0NLX1NVQkFCT1JUX1BFTkRJTkcgc3VidHJh bnNhY3Rpb25zLgogCQkJICovCi0JCWNhc2UgVEJMT0NLX1NVQkFCT1JUX1BFTkRJTkc6Ci0J CQlBYm9ydFN1YlRyYW5zYWN0aW9uKCk7Ci0JCQlDbGVhbnVwU3ViVHJhbnNhY3Rpb24oKTsK KwkJCS8qCisJCQkgKiBSZWN1cnNlIHRvIHJvbGwgYmFjayB0aGUgdG9wLWxldmVsIHRyYW5z YWN0aW9uIHRvbywgb3IgdG8KKwkJCSAqIHJlc3RhcnQgYXQgYSBzYXZlcG9pbnQgaW4gY2Fz ZSBvZiBST0xMQkFDSyBUTy4KKwkJCSAqLworCQkJaWYgKHMtPmJsb2NrU3RhdGUgIT0gVEJM T0NLX0FCT1JUX1BFTkRJTkcgJiYKKwkJCQlzLT5ibG9ja1N0YXRlICE9IFRCTE9DS19BQk9S VCAmJgorCQkJCXMtPmJsb2NrU3RhdGUgIT0gVEJMT0NLX1NVQlJFU1RBUlQgJiYKKwkJCQlz LT5ibG9ja1N0YXRlICE9IFRCTE9DS19TVUJBQk9SVF9SRVNUQVJUKQorCQkJeworCQkJCWVs b2coRVJST1IsICJDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQ6IHVuZXhwZWN0ZWQgc3RhdGUg JXMiLAorCQkJCQkgQmxvY2tTdGF0ZUFzU3RyaW5nKHMtPmJsb2NrU3RhdGUpKTsKKwkJCX0K IAkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOwogCQkJYnJlYWs7CiAKQEAgLTMyNDMs MzUgKzMyNTgsMTMgQEAgQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKHZvaWQpCiAJCQkgKiBj b21tYW5kLiAgQWJvcnQgYW5kIHBvcCBpdCwgdGhlbiBzdGFydCBhIG5ldyBzdWJ0cmFuc2Fj dGlvbgogCQkJICogd2l0aCB0aGUgc2FtZSBuYW1lLgogCQkJICovCi0JCWNhc2UgVEJMT0NL X1NVQlJFU1RBUlQ6Ci0JCQl7Ci0JCQkJY2hhcgkgICAqbmFtZTsKLQkJCQlpbnQJCQlzYXZl cG9pbnRMZXZlbDsKLQotCQkJCS8qIHNhdmUgbmFtZSBhbmQga2VlcCBDbGVhbnVwIGZyb20g ZnJlZWluZyBpdCAqLwotCQkJCW5hbWUgPSBzLT5uYW1lOwotCQkJCXMtPm5hbWUgPSBOVUxM OwotCQkJCXNhdmVwb2ludExldmVsID0gcy0+c2F2ZXBvaW50TGV2ZWw7Ci0KLQkJCQlBYm9y dFN1YlRyYW5zYWN0aW9uKCk7Ci0JCQkJQ2xlYW51cFN1YlRyYW5zYWN0aW9uKCk7Ci0KLQkJ CQlEZWZpbmVTYXZlcG9pbnQoTlVMTCk7Ci0JCQkJcyA9IEN1cnJlbnRUcmFuc2FjdGlvblN0 YXRlOwkvKiBjaGFuZ2VkIGJ5IHB1c2ggKi8KLQkJCQlzLT5uYW1lID0gbmFtZTsKLQkJCQlz LT5zYXZlcG9pbnRMZXZlbCA9IHNhdmVwb2ludExldmVsOwotCi0JCQkJLyogVGhpcyBpcyB0 aGUgc2FtZSBhcyBUQkxPQ0tfU1VCQkVHSU4gY2FzZSAqLwotCQkJCUFzc2VydChzLT5ibG9j a1N0YXRlID09IFRCTE9DS19TVUJCRUdJTik7Ci0JCQkJU3RhcnRTdWJUcmFuc2FjdGlvbigp OwotCQkJCXMtPmJsb2NrU3RhdGUgPSBUQkxPQ0tfU1VCSU5QUk9HUkVTUzsKLQkJCX0KLQkJ CWJyZWFrOwotCiAJCQkvKgotCQkJICogU2FtZSBhcyBhYm92ZSwgYnV0IHRoZSBzdWJ0cmFu c2FjdGlvbiBoYWQgYWxyZWFkeSBmYWlsZWQsIHNvIHdlCi0JCQkgKiBkb24ndCBuZWVkIEFi b3J0U3ViVHJhbnNhY3Rpb24uCisJCQkgKiBSRVZJRVdFUiBOT1RFOiBJIG1lcmdlZCB0aGUg VEJMT0NLX1NVQlJFU1RBUlQgYW5kCisJCQkgKiBUQkxPQ0tfU1VCQUJPUlRfUkVTVEFSVCBj YXNlcy4gTm90IHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGl0CisJCQkgKiBtYWtlcyB0aGlz IG1vcmUgc2ltaWxhciB0byBob3cgdGhlIFRCTE9DS19TVUJBQk9SVF9FTkQgYW5kCisJCQkg KiBUQkxPQ0tfU1VCQUJPUlRfUEVORElORyBjYXNlcyBhcmUgaGFuZGxlZCBub3cuCiAJCQkg Ki8KKwkJY2FzZSBUQkxPQ0tfU1VCUkVTVEFSVDoKIAkJY2FzZSBUQkxPQ0tfU1VCQUJPUlRf UkVTVEFSVDoKIAkJCXsKIAkJCQljaGFyCSAgICpuYW1lOwpAQCAtMzI4Miw2ICszMjc1LDEy IEBAIENvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCh2b2lkKQogCQkJCXMtPm5hbWUgPSBOVUxM OwogCQkJCXNhdmVwb2ludExldmVsID0gcy0+c2F2ZXBvaW50TGV2ZWw7CiAKKwkJCQkvKgor CQkJCSAqIEluIFNVQkFCT1JUX1JFU1RBUlQgc3RhdGUsIHRoZSBzdWJ0cmFuc2FjdGlvbiBo YWQgYWxyZWFkeQorCQkJCSAqIGZhaWxlZCwgc28gd2UgZG9uJ3QgbmVlZCBBYm9ydFN1YlRy YW5zYWN0aW9uLgorCQkJCSAqLworCQkJCWlmIChzLT5ibG9ja1N0YXRlID09IFRCTE9DS19T VUJSRVNUQVJUKQorCQkJCQlBYm9ydFN1YlRyYW5zYWN0aW9uKCk7CiAJCQkJQ2xlYW51cFN1 YlRyYW5zYWN0aW9uKCk7CiAKIAkJCQlEZWZpbmVTYXZlcG9pbnQoTlVMTCk7CkBAIC0zNDM3 LDE3ICszNDM2LDI3IEBAIEFib3J0Q3VycmVudFRyYW5zYWN0aW9uKHZvaWQpCiAJCWNhc2Ug VEJMT0NLX1NVQkNPTU1JVDoKIAkJY2FzZSBUQkxPQ0tfU1VCQUJPUlRfUEVORElORzoKIAkJ Y2FzZSBUQkxPQ0tfU1VCUkVTVEFSVDoKLQkJCUFib3J0U3ViVHJhbnNhY3Rpb24oKTsKLQkJ CUNsZWFudXBTdWJUcmFuc2FjdGlvbigpOwotCQkJQWJvcnRDdXJyZW50VHJhbnNhY3Rpb24o KTsKLQkJCWJyZWFrOwotCi0JCQkvKgotCQkJICogU2FtZSBhcyBhYm92ZSwgZXhjZXB0IHRo ZSBBYm9ydCgpIHdhcyBhbHJlYWR5IGRvbmUuCi0JCQkgKi8KIAkJY2FzZSBUQkxPQ0tfU1VC QUJPUlRfRU5EOgogCQljYXNlIFRCTE9DS19TVUJBQk9SVF9SRVNUQVJUOgotCQkJQ2xlYW51 cFN1YlRyYW5zYWN0aW9uKCk7CisJCQkvKgorCQkJICogSWYgbXVsdGlwbGUgc3VidHJhbnNh Y3Rpb25zIG5lZWQgdG8gYmUgY2xlYW5lZCB1cCwgaXRlcmF0ZQorCQkJICogdGhyb3VnaCB0 aGVtIGhlcmUuIFRoZSByZWN1cnNpb24gd291bGQgaGFuZGxlIHRoZW0gdG9vLCBidXQKKwkJ CSAqIHRoaXMgYXZvaWRzIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIGlmIHRoZXJlIGlzIGEgZGVl cCBzdGFjayBvZgorCQkJICogYWJvcnRlZCBzdWJ0cmFuc2FjdGlvbnMsIGFuZCB0aGUgY29t cGlsZXIgaXNuJ3Qgc21hcnQgZW5vdWdoCisJCQkgKiB0byBvcHRpbWl6ZSBhd2F5IHRoZSB0 YWlsIHJlY3Vyc2lvbi4KKwkJCSAqLworCQkJZG8geworCQkJCWlmIChzLT5ibG9ja1N0YXRl ID09IFRCTE9DS19TVUJBQk9SVF9FTkQgfHwgcy0+YmxvY2tTdGF0ZSA9PSBUQkxPQ0tfU1VC QUJPUlRfUkVTVEFSVCkKKwkJCQkJQWJvcnRTdWJUcmFuc2FjdGlvbigpOworCQkJCUNsZWFu dXBTdWJUcmFuc2FjdGlvbigpOworCQkJfSB3aGlsZShzLT5ibG9ja1N0YXRlID09IFRCTE9D S19TVUJCRUdJTiB8fAorCQkJCQlzLT5ibG9ja1N0YXRlID09IFRCTE9DS19TVUJSRUxFQVNF IHx8CisJCQkJCXMtPmJsb2NrU3RhdGUgPT0gVEJMT0NLX1NVQkNPTU1JVCB8fAorCQkJCQlz LT5ibG9ja1N0YXRlID09IFRCTE9DS19TVUJBQk9SVF9QRU5ESU5HIHx8CisJCQkJCXMtPmJs b2NrU3RhdGUgPT0gVEJMT0NLX1NVQlJFU1RBUlQgfHwKKwkJCQkJcy0+YmxvY2tTdGF0ZSA9 PSBUQkxPQ0tfU1VCQUJPUlRfRU5EIHx8CisJCQkJCXMtPmJsb2NrU3RhdGUgPT0gVEJMT0NL X1NVQkFCT1JUX1JFU1RBUlQpOworCQkJLyogQWJvcnQgdGhlIHRvcC1sZXZlbCB0cmFuc2Fj dGlvbiwgdG9vICovCiAJCQlBYm9ydEN1cnJlbnRUcmFuc2FjdGlvbigpOwogCQkJYnJlYWs7 CiAJfQotLSAKMi4zOS4yCgo= --------------mFxJ1r5w0tFAbUkfZao8kOFV--