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 1vvGcw-00BCRg-0u for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Feb 2026 15:16:39 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvGcv-006iQr-03 for pgsql-hackers@arkaria.postgresql.org; Wed, 25 Feb 2026 15:16:37 +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 1vvGcu-006iQi-14 for pgsql-hackers@lists.postgresql.org; Wed, 25 Feb 2026 15:16:36 +0000 Received: from mail.postgrespro.ru ([93.174.132.70]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vvGcp-000000018RX-2CYq for pgsql-hackers@lists.postgresql.org; Wed, 25 Feb 2026 15:16:35 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1772032588; bh=GkuXRkhy3KuEU70qTKHYB3mooClEEgNVIgWsFZ2NA20=; h=Message-ID:Date:User-Agent:Subject:To:Cc:References:From: In-Reply-To:From; b=qWLYNUgjTssflZoAm49Lfcc4KSI+FqTjmGo6dGofraNNOsy0pNgbOLYzsYK9EZNjn hlPQ+YHR3b9/aYsSgvPDpos41P1NX4xEm6Zxk+VANoXI/f+O/NWd70KwLOJjsqnlmR 94eGxxXTgusYrfcDUi+Y/dmg91bxDXpThG5RBkFJPWrY3TV+LK+b02Nw45+R6mcd8g Zf2T0V3prpnc2HyGae2TuxKAIDqZ4vU1wap5zOihDhXxLz56GgqyeXd95wuoouLwDg 0qgfyLUmvvavfAVGC2BFDqC+yp0APkiqMcyjuwSq2+b05/zUkre1rjYYqcvYhHv6Dp dqDjl8f3PC/Mg== Received: from [172.30.50.246] (debian11-template.l.postgrespro.ru [192.168.2.254]) (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) (Client did not present a certificate) (Authenticated sender: y.sokolov@postgrespro.ru) by mail.postgrespro.ru (Postfix/465) with ESMTPSA id A6E6460E1C; Wed, 25 Feb 2026 18:16:28 +0300 (MSK) Content-Type: multipart/mixed; boundary="------------kYVsStq2vpFhvTsrRYRFf9SZ" Message-ID: Date: Wed, 25 Feb 2026 18:16:27 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Fix bug in multixact Oldest*MXactId initialization and access To: "pgsql-hackers@lists.postgresql.org" Cc: Heikki Linnakangas , Andres Freund , Chao Li , Sami Imseih References: <7acc94b0-ea82-4657-b1b0-77842cb7a60c@postgrespro.ru> <93F0BD0A-0B8B-4592-9D4B-53F405A86F6A@gmail.com> Content-Language: en-US From: Yura Sokolov In-Reply-To: <93F0BD0A-0B8B-4592-9D4B-53F405A86F6A@gmail.com> X-KSMG-AntiPhishing: NotDetected X-KSMG-AntiSpam-Interceptor-Info: not scanned X-KSMG-AntiSpam-Status: not scanned, disabled by settings X-KSMG-AntiVirus: Kaspersky Secure Mail Gateway, version 2.1.0.7854, bases: 2026/02/25 12:24:00 #28223302 X-KSMG-AntiVirus-Status: NotDetected, skipped X-KSMG-LinksScanning: not scanned, disabled by settings X-KSMG-Message-Action: skipped X-KSMG-Rule-ID: 1 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. --------------kYVsStq2vpFhvTsrRYRFf9SZ Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Good day. Chao Li and Sami Imseih, thank you for looking at. After thinking a bit, I've decided to make sizes of arrays precise: - OldestMemberMXactId's size remains MaxBackends + max_prepared_xacts. Instead of changing its size, procno is now adjusted to not include auxiliary procs. - OldestVisibleMXactId contains only MaxBackends elemenents now. It is used only for real backends and not prepared transactions. All accesses are validated with asserts certainly. I believe, index transformation in access of OldestMemberMXactId will not cost much since all this operations are quite rare. In the loops arrays are accessed directly since limiting loop index is enough. -- regards Yura Sokolov aka funny-falcon --------------kYVsStq2vpFhvTsrRYRFf9SZ Content-Type: text/x-patch; charset=UTF-8; name="v3-0001-Fix-multixacts-OldestMemberMXactId-and-OldestVisi.patch" Content-Disposition: attachment; filename*0="v3-0001-Fix-multixacts-OldestMemberMXactId-and-OldestVisi.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBjNGFlOWVlNWY4ZDI4N2NiZGE4YzRhNWE3ODBhZDZjYTI1YjFlZGUxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBZdXJhIFNva29sb3YgPHkuc29rb2xvdkBwb3N0Z3Jl c3Byby5ydT4KRGF0ZTogV2VkLCAyNSBGZWIgMjAyNiAxODowMzo1NyArMDMwMApTdWJqZWN0 OiBbUEFUQ0ggdjNdIEZpeCBtdWx0aXhhY3RzIE9sZGVzdE1lbWJlck1YYWN0SWQgYW5kCiBP bGRlc3RWaXNpYmxlTVhhY3RJZCB1c2FnZQoKRHVlIHRvIFsxXSwgT2xkZXN0TWVtYmVyTVhh Y3RJZCBpcyBubyBsb25nZXIgYWNjZXNzZWQgYnkgc3ludGhldGljCmR1bW15QmFja2VuZElk LCBidXQgcmF0aGVyIHdpdGggcGdwcm9jbm8uIFByb2NzIGZvciBwcmVwYXJlZCB4YWN0cyBh cmUKcGxhY2VkIGFmdGVyIGF1eGlsaWFyeSBwcm9jcywgdGhlcmVmb3JlIGNhbGN1bGF0aW9u IGZvciBNYXhPbGRlc3RTbG90CmJlY2FtZSBpbnZhbGlkLgoKT24gdGhlIG90aGVyIGhhbmQs IE9sZGVzdFZpc2libGVNWGFjdElkIGlzIHVzZWQgb25seSBmb3IgcmVhbCBiYWNrZW5kcywK YW5kIHNvIG5ldmVyIGFjY2Vzc2VkIGF0IGluZGV4IGdyZWF0ZXIgdGhhbiBNYXhCYWNrZW5k cy4KCkxldHMgc2VwYXJhdGUgc2l6ZSBjYWxjdWxhdGlvbiBmb3IgYXJyYXlzIGFuZCB1c2Ug Y29udmVyc2lvbiBvZiBpbmRleAppbiBhY2Nlc3MgdG8gT2xkZXN0TWVtYmVyTVhhY3RJZC4K ClsxXSBhYjM1NWUzYTg4ZGU3NDUgIlJlZGVmaW5lIGJhY2tlbmQgSUQgdG8gYmUgYW4gaW5k ZXggaW50byB0aGUgcHJvYyBhcnJheSIKLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNh bS9tdWx0aXhhY3QuYyB8IDEwMiArKysrKysrKysrKysrKysrKy0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCA5MGVjODdkOWRkNi4uY2E1MTUw OTJjZmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0x NTksMTIgKzE1OSw3IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCiAJ LyoKIAkgKiBQZXItYmFja2VuZCBkYXRhIHN0YXJ0cyBoZXJlLiAgV2UgaGF2ZSB0d28gYXJy YXlzIHN0b3JlZCBpbiB0aGUgYXJlYQotCSAqIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUg TXVsdGlYYWN0U3RhdGVEYXRhIHN0cnVjdC4gRWFjaCBpcyBpbmRleGVkIGJ5Ci0JICogUHJv Y051bWJlci4KLQkgKgotCSAqIEluIGJvdGggYXJyYXlzLCB0aGVyZSdzIGEgc2xvdCBmb3Ig YWxsIG5vcm1hbCBiYWNrZW5kcwotCSAqICgwLi5NYXhCYWNrZW5kcy0xKSBmb2xsb3dlZCBi eSBhIHNsb3QgZm9yIG1heF9wcmVwYXJlZF94YWN0cyBwcmVwYXJlZAotCSAqIHRyYW5zYWN0 aW9ucy4KKwkgKiBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIE11bHRpWGFjdFN0YXRlRGF0 YSBzdHJ1Y3QuCiAJICoKIAkgKiBPbGRlc3RNZW1iZXJNWGFjdElkW2tdIGlzIHRoZSBvbGRl c3QgTXVsdGlYYWN0SWQgZWFjaCBiYWNrZW5kJ3MgY3VycmVudAogCSAqIHRyYW5zYWN0aW9u KHMpIGNvdWxkIHBvc3NpYmx5IGJlIGEgbWVtYmVyIG9mLCBvciBJbnZhbGlkTXVsdGlYYWN0 SWQKQEAgLTIwMyw2ICsxOTgsMTQgQEAgdHlwZWRlZiBzdHJ1Y3QgTXVsdGlYYWN0U3RhdGVE YXRhCiAJICogSW4gdHVybiwgdGhlIG1pbmltdW0gb2YgYWxsIG9mIHRob3NlIHZhbHVlcyBp cyBzdG9yZWQgaW4gcGdfY29udHJvbC4KIAkgKiBUaGlzIGlzIHVzZWQgYXMgdGhlIHRydW5j YXRpb24gcG9pbnQgZm9yIHBnX211bHRpeGFjdCB3aGVuIHVubmVlZGVkCiAJICogc2VnbWVu dHMgZ2V0IHJlbW92ZWQgYnkgdmFjX3RydW5jYXRlX2Nsb2coKSBkdXJpbmcgdmFjdXVtaW5n LgorCSAqCisJICogSW4gT2xkZXN0TWVtYmVyTVhhY3RJZFtdIHRoZXJlJ3MgYSBzbG90IGZv ciBhbGwgbm9ybWFsIGJhY2tlbmRzCisJICogKDAuLk1heEJhY2tlbmRzLTEpIGZvbGxvd2Vk IGJ5IGEgc2xvdCBmb3IgbWF4X3ByZXBhcmVkX3hhY3RzIHByZXBhcmVkCisJICogdHJhbnNh Y3Rpb25zLiBJdCBpcyBpbmRleGVkIGJ5IHZhbHVlIGRlcml2ZWQgZnJvbSBQcm9jTnVtYmVy LgorCSAqCisJICogT2xkZXN0VmlzaWJsZU1YYWN0SWQgaGFzIG9ubHkgc2xvdHMgZm9yIG5v cm1hbCBiYWNrZW5kcyBzaW5jZSBpdCBpcyBub3QKKwkgKiB1c2VkIGZvciBwcmVwYXJlZCB0 cmFuc2FjdGlvbnMuIEFuZCBpdCBpcyBpbmRleGVkIGJ5IFByb2NOdW1iZXIKKwkgKiBkaXJl Y3RseS4KIAkgKi8KIAlNdWx0aVhhY3RJZCBwZXJCYWNrZW5kWGFjdElkc1tGTEVYSUJMRV9B UlJBWV9NRU1CRVJdOwogfSBNdWx0aVhhY3RTdGF0ZURhdGE7CkBAIC0yMTAsMTMgKzIxMyw1 MiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIC8qCiAgKiBTaXplIG9m IE9sZGVzdE1lbWJlck1YYWN0SWQgYW5kIE9sZGVzdFZpc2libGVNWGFjdElkIGFycmF5cy4K ICAqLwotI2RlZmluZSBNYXhPbGRlc3RTbG90CShNYXhCYWNrZW5kcyArIG1heF9wcmVwYXJl ZF94YWN0cykKKyNkZWZpbmUgTWF4T2xkZXN0TWVtYmVyU2xvdAkoTWF4QmFja2VuZHMgKyBt YXhfcHJlcGFyZWRfeGFjdHMpCisjZGVmaW5lIE1heE9sZGVzdFZpc2libGVTbG90CU1heEJh Y2tlbmRzCisjZGVmaW5lIE1heE9sZGVzdFNsb3QJKE1heE9sZGVzdE1lbWJlclNsb3QgKyBN YXhPbGRlc3RWaXNpYmxlU2xvdCkKIAogLyogUG9pbnRlcnMgdG8gdGhlIHN0YXRlIGRhdGEg aW4gc2hhcmVkIG1lbW9yeSAqLwogc3RhdGljIE11bHRpWGFjdFN0YXRlRGF0YSAqTXVsdGlY YWN0U3RhdGU7CiBzdGF0aWMgTXVsdGlYYWN0SWQgKk9sZGVzdE1lbWJlck1YYWN0SWQ7CiBz dGF0aWMgTXVsdGlYYWN0SWQgKk9sZGVzdFZpc2libGVNWGFjdElkOwogCitzdGF0aWMgaW5s aW5lIE11bHRpWGFjdElkCitHZXRPbGRlc3RNZW1iZXJNWGFjdElkKFByb2NOdW1iZXIgcHJv Y25vKQoreworCWlmIChwcm9jbm8gPj0gTWF4QmFja2VuZHMpCisJeworCQlBc3NlcnQocHJv Y25vID49IE1heEJhY2tlbmRzICsgTlVNX0FVWElMSUFSWV9QUk9DUyk7CisJCXByb2NubyAt PSBOVU1fQVVYSUxJQVJZX1BST0NTOworCX0KKwlBc3NlcnQocHJvY25vID49IDAgJiYgcHJv Y25vIDwgTWF4T2xkZXN0TWVtYmVyU2xvdCk7CisJcmV0dXJuIE9sZGVzdE1lbWJlck1YYWN0 SWRbcHJvY25vXTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitTZXRPbGRlc3RNZW1iZXJN WGFjdElkKFByb2NOdW1iZXIgcHJvY25vLCBNdWx0aVhhY3RJZCB2YWx1ZSkKK3sKKwlpZiAo cHJvY25vID49IE1heEJhY2tlbmRzKQorCXsKKwkJQXNzZXJ0KHByb2NubyA+PSBNYXhCYWNr ZW5kcyArIE5VTV9BVVhJTElBUllfUFJPQ1MpOworCQlwcm9jbm8gLT0gTlVNX0FVWElMSUFS WV9QUk9DUzsKKwl9CisJQXNzZXJ0KHByb2NubyA+PSAwICYmIHByb2NubyA8IE1heE9sZGVz dE1lbWJlclNsb3QpOworCU9sZGVzdE1lbWJlck1YYWN0SWRbcHJvY25vXSA9IHZhbHVlOwor fQorCitzdGF0aWMgaW5saW5lIE11bHRpWGFjdElkCitHZXRPbGRlc3RWaXNpYmxlTVhhY3RJ ZChQcm9jTnVtYmVyIHByb2NubykKK3sKKwlBc3NlcnQocHJvY25vID49IDAgJiYgcHJvY25v IDwgTWF4T2xkZXN0VmlzaWJsZVNsb3QpOworCXJldHVybiBPbGRlc3RWaXNpYmxlTVhhY3RJ ZFtwcm9jbm9dOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK1NldE9sZGVzdFZpc2libGVN WGFjdElkKFByb2NOdW1iZXIgcHJvY25vLCBNdWx0aVhhY3RJZCB2YWx1ZSkKK3sKKwlBc3Nl cnQocHJvY25vID49IDAgJiYgcHJvY25vIDwgTWF4T2xkZXN0VmlzaWJsZVNsb3QpOworCU9s ZGVzdFZpc2libGVNWGFjdElkW3Byb2Nub10gPSB2YWx1ZTsKK30KIAogLyoKICAqIERlZmlu aXRpb25zIGZvciB0aGUgYmFja2VuZC1sb2NhbCBNdWx0aVhhY3RJZCBjYWNoZS4KQEAgLTMw OCw3ICszNTAsNyBAQCBNdWx0aVhhY3RJZENyZWF0ZShUcmFuc2FjdGlvbklkIHhpZDEsIE11 bHRpWGFjdFN0YXR1cyBzdGF0dXMxLAogCUFzc2VydCghVHJhbnNhY3Rpb25JZEVxdWFscyh4 aWQxLCB4aWQyKSB8fCAoc3RhdHVzMSAhPSBzdGF0dXMyKSk7CiAKIAkvKiBNdWx0aVhhY3RJ ZFNldE9sZGVzdE1lbWJlcigpIG11c3QgaGF2ZSBiZWVuIGNhbGxlZCBhbHJlYWR5LiAqLwot CUFzc2VydChNdWx0aVhhY3RJZElzVmFsaWQoT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NO dW1iZXJdKSk7CisJQXNzZXJ0KE11bHRpWGFjdElkSXNWYWxpZChHZXRPbGRlc3RNZW1iZXJN WGFjdElkKE15UHJvY051bWJlcikpKTsKIAogCS8qCiAJICogTm90ZTogdW5saWtlIE11bHRp WGFjdElkRXhwYW5kLCB3ZSBkb24ndCBib3RoZXIgdG8gY2hlY2sgdGhhdCBib3RoIFhJRHMK QEAgLTM2Miw3ICs0MDQsNyBAQCBNdWx0aVhhY3RJZEV4cGFuZChNdWx0aVhhY3RJZCBtdWx0 aSwgVHJhbnNhY3Rpb25JZCB4aWQsIE11bHRpWGFjdFN0YXR1cyBzdGF0dXMpCiAJQXNzZXJ0 KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpOwogCiAJLyogTXVsdGlYYWN0SWRTZXRPbGRl c3RNZW1iZXIoKSBtdXN0IGhhdmUgYmVlbiBjYWxsZWQgYWxyZWFkeS4gKi8KLQlBc3NlcnQo TXVsdGlYYWN0SWRJc1ZhbGlkKE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVyXSkp OworCUFzc2VydChNdWx0aVhhY3RJZElzVmFsaWQoR2V0T2xkZXN0TWVtYmVyTVhhY3RJZChN eVByb2NOdW1iZXIpKSk7CiAKIAlkZWJ1Z19lbG9nNShERUJVRzIsICJFeHBhbmQ6IHJlY2Vp dmVkIG11bHRpICV1LCB4aWQgJXUgc3RhdHVzICVzIiwKIAkJCQltdWx0aSwgeGlkLCBteHN0 YXR1c190b19zdHJpbmcoc3RhdHVzKSk7CkBAIC01MzYsNyArNTc4LDcgQEAgTXVsdGlYYWN0 SWRJc1J1bm5pbmcoTXVsdGlYYWN0SWQgbXVsdGksIGJvb2wgaXNMb2NrT25seSkKIHZvaWQK IE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKHZvaWQpCiB7Ci0JaWYgKCFNdWx0aVhhY3RJ ZElzVmFsaWQoT2xkZXN0TWVtYmVyTVhhY3RJZFtNeVByb2NOdW1iZXJdKSkKKwlpZiAoIU11 bHRpWGFjdElkSXNWYWxpZChHZXRPbGRlc3RNZW1iZXJNWGFjdElkKE15UHJvY051bWJlcikp KQogCXsKIAkJTXVsdGlYYWN0SWQgbmV4dE1YYWN0OwogCkBAIC01NTgsNyArNjAwLDcgQEAg TXVsdGlYYWN0SWRTZXRPbGRlc3RNZW1iZXIodm9pZCkKIAogCQluZXh0TVhhY3QgPSBNdWx0 aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwogCi0JCU9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9j TnVtYmVyXSA9IG5leHRNWGFjdDsKKwkJU2V0T2xkZXN0TWVtYmVyTVhhY3RJZChNeVByb2NO dW1iZXIsIG5leHRNWGFjdCk7CiAKIAkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2Nr KTsKIApAQCAtNTk0LDcgKzYzNiw3IEBAIE11bHRpWGFjdElkU2V0T2xkZXN0VmlzaWJsZSh2 b2lkKQogCQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7 CiAKIAkJb2xkZXN0TVhhY3QgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwotCQlmb3Ig KGkgPSAwOyBpIDwgTWF4T2xkZXN0U2xvdDsgaSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgTWF4 T2xkZXN0TWVtYmVyU2xvdDsgaSsrKQogCQl7CiAJCQlNdWx0aVhhY3RJZCB0aGlzb2xkZXN0 ID0gT2xkZXN0TWVtYmVyTVhhY3RJZFtpXTsKIApAQCAtNjAzLDcgKzY0NSw3IEBAIE11bHRp WGFjdElkU2V0T2xkZXN0VmlzaWJsZSh2b2lkKQogCQkJCW9sZGVzdE1YYWN0ID0gdGhpc29s ZGVzdDsKIAkJfQogCi0JCU9sZGVzdFZpc2libGVNWGFjdElkW015UHJvY051bWJlcl0gPSBv bGRlc3RNWGFjdDsKKwkJU2V0T2xkZXN0VmlzaWJsZU1YYWN0SWQoTXlQcm9jTnVtYmVyLCBv bGRlc3RNWGFjdCk7CiAKIAkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIApA QCAtMTU3NCw4ICsxNjE2LDggQEAgQXRFT1hhY3RfTXVsdGlYYWN0KHZvaWQpCiAJICogV2Ug YXNzdW1lIHRoYXQgc3RvcmluZyBhIE11bHRpWGFjdElkIGlzIGF0b21pYyBhbmQgc28gd2Ug bmVlZCBub3QgdGFrZQogCSAqIE11bHRpWGFjdEdlbkxvY2sgdG8gZG8gdGhpcy4KIAkgKi8K LQlPbGRlc3RNZW1iZXJNWGFjdElkW015UHJvY051bWJlcl0gPSBJbnZhbGlkTXVsdGlYYWN0 SWQ7Ci0JT2xkZXN0VmlzaWJsZU1YYWN0SWRbTXlQcm9jTnVtYmVyXSA9IEludmFsaWRNdWx0 aVhhY3RJZDsKKwlTZXRPbGRlc3RNZW1iZXJNWGFjdElkKE15UHJvY051bWJlciwgSW52YWxp ZE11bHRpWGFjdElkKTsKKwlTZXRPbGRlc3RWaXNpYmxlTVhhY3RJZChNeVByb2NOdW1iZXIs IEludmFsaWRNdWx0aVhhY3RJZCk7CiAKIAkvKgogCSAqIERpc2NhcmQgdGhlIGxvY2FsIE11 bHRpWGFjdElkIGNhY2hlLiAgU2luY2UgTVhhY3RDb250ZXh0IHdhcyBjcmVhdGVkIGFzCkBA IC0xNTk1LDcgKzE2MzcsNyBAQCBBdEVPWGFjdF9NdWx0aVhhY3Qodm9pZCkKIHZvaWQKIEF0 UHJlcGFyZV9NdWx0aVhhY3Qodm9pZCkKIHsKLQlNdWx0aVhhY3RJZCBteU9sZGVzdE1lbWJl ciA9IE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVyXTsKKwlNdWx0aVhhY3RJZCBt eU9sZGVzdE1lbWJlciA9IEdldE9sZGVzdE1lbWJlck1YYWN0SWQoTXlQcm9jTnVtYmVyKTsK IAogCWlmIChNdWx0aVhhY3RJZElzVmFsaWQobXlPbGRlc3RNZW1iZXIpKQogCQlSZWdpc3Rl clR3b1BoYXNlUmVjb3JkKFRXT1BIQVNFX1JNX01VTFRJWEFDVF9JRCwgMCwKQEAgLTE2MTUs NyArMTY1Nyw3IEBAIFBvc3RQcmVwYXJlX011bHRpWGFjdChGdWxsVHJhbnNhY3Rpb25JZCBm eGlkKQogCSAqIFRyYW5zZmVyIG91ciBPbGRlc3RNZW1iZXJNWGFjdElkIHZhbHVlIHRvIHRo ZSBzbG90IHJlc2VydmVkIGZvciB0aGUKIAkgKiBwcmVwYXJlZCB0cmFuc2FjdGlvbi4KIAkg Ki8KLQlteU9sZGVzdE1lbWJlciA9IE9sZGVzdE1lbWJlck1YYWN0SWRbTXlQcm9jTnVtYmVy XTsKKwlteU9sZGVzdE1lbWJlciA9IEdldE9sZGVzdE1lbWJlck1YYWN0SWQoTXlQcm9jTnVt YmVyKTsKIAlpZiAoTXVsdGlYYWN0SWRJc1ZhbGlkKG15T2xkZXN0TWVtYmVyKSkKIAl7CiAJ CVByb2NOdW1iZXIJZHVtbXlQcm9jTnVtYmVyID0gVHdvUGhhc2VHZXREdW1teVByb2NOdW1i ZXIoZnhpZCwgZmFsc2UpOwpAQCAtMTYyOCw4ICsxNjcwLDggQEAgUG9zdFByZXBhcmVfTXVs dGlYYWN0KEZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQpCiAJCSAqLwogCQlMV0xvY2tBY3F1aXJl KE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7CiAKLQkJT2xkZXN0TWVtYmVyTVhh Y3RJZFtkdW1teVByb2NOdW1iZXJdID0gbXlPbGRlc3RNZW1iZXI7Ci0JCU9sZGVzdE1lbWJl ck1YYWN0SWRbTXlQcm9jTnVtYmVyXSA9IEludmFsaWRNdWx0aVhhY3RJZDsKKwkJU2V0T2xk ZXN0TWVtYmVyTVhhY3RJZChkdW1teVByb2NOdW1iZXIsIG15T2xkZXN0TWVtYmVyKTsKKwkJ U2V0T2xkZXN0TWVtYmVyTVhhY3RJZChNeVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhhY3RJ ZCk7CiAKIAkJTFdMb2NrUmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKIAl9CkBAIC0xNjQy LDcgKzE2ODQsNyBAQCBQb3N0UHJlcGFyZV9NdWx0aVhhY3QoRnVsbFRyYW5zYWN0aW9uSWQg ZnhpZCkKIAkgKiBXZSBhc3N1bWUgdGhhdCBzdG9yaW5nIGEgTXVsdGlYYWN0SWQgaXMgYXRv bWljIGFuZCBzbyB3ZSBuZWVkIG5vdCB0YWtlCiAJICogTXVsdGlYYWN0R2VuTG9jayB0byBk byB0aGlzLgogCSAqLwotCU9sZGVzdFZpc2libGVNWGFjdElkW015UHJvY051bWJlcl0gPSBJ bnZhbGlkTXVsdGlYYWN0SWQ7CisJU2V0T2xkZXN0VmlzaWJsZU1YYWN0SWQoTXlQcm9jTnVt YmVyLCBJbnZhbGlkTXVsdGlYYWN0SWQpOwogCiAJLyoKIAkgKiBEaXNjYXJkIHRoZSBsb2Nh bCBNdWx0aVhhY3RJZCBjYWNoZSBsaWtlIGluIEF0RU9YYWN0X011bHRpWGFjdC4KQEAgLTE2 NjksNyArMTcxMSw3IEBAIG11bHRpeGFjdF90d29waGFzZV9yZWNvdmVyKEZ1bGxUcmFuc2Fj dGlvbklkIGZ4aWQsIHVpbnQxNiBpbmZvLAogCUFzc2VydChsZW4gPT0gc2l6ZW9mKE11bHRp WGFjdElkKSk7CiAJb2xkZXN0TWVtYmVyID0gKigoTXVsdGlYYWN0SWQgKikgcmVjZGF0YSk7 CiAKLQlPbGRlc3RNZW1iZXJNWGFjdElkW2R1bW15UHJvY051bWJlcl0gPSBvbGRlc3RNZW1i ZXI7CisJU2V0T2xkZXN0TWVtYmVyTVhhY3RJZChkdW1teVByb2NOdW1iZXIsIG9sZGVzdE1l bWJlcik7CiB9CiAKIC8qCkBAIC0xNjg0LDcgKzE3MjYsNyBAQCBtdWx0aXhhY3RfdHdvcGhh c2VfcG9zdGNvbW1pdChGdWxsVHJhbnNhY3Rpb25JZCBmeGlkLCB1aW50MTYgaW5mbywKIAog CUFzc2VydChsZW4gPT0gc2l6ZW9mKE11bHRpWGFjdElkKSk7CiAKLQlPbGRlc3RNZW1iZXJN WGFjdElkW2R1bW15UHJvY051bWJlcl0gPSBJbnZhbGlkTXVsdGlYYWN0SWQ7CisJU2V0T2xk ZXN0TWVtYmVyTVhhY3RJZChkdW1teVByb2NOdW1iZXIsIEludmFsaWRNdWx0aVhhY3RJZCk7 CiB9CiAKIC8qCkBAIC0xNzA4LDEwICsxNzUwLDkgQEAgTXVsdGlYYWN0U2htZW1TaXplKHZv aWQpCiB7CiAJU2l6ZQkJc2l6ZTsKIAotCS8qIFdlIG5lZWQgMipNYXhPbGRlc3RTbG90IHBl ckJhY2tlbmRYYWN0SWRzW10gZW50cmllcyAqLwogI2RlZmluZSBTSEFSRURfTVVMVElYQUNU X1NUQVRFX1NJWkUgXAogCWFkZF9zaXplKG9mZnNldG9mKE11bHRpWGFjdFN0YXRlRGF0YSwg cGVyQmFja2VuZFhhY3RJZHMpLCBcCi0JCQkgbXVsX3NpemUoc2l6ZW9mKE11bHRpWGFjdElk KSAqIDIsIE1heE9sZGVzdFNsb3QpKQorCQkJIG11bF9zaXplKHNpemVvZihNdWx0aVhhY3RJ ZCksIE1heE9sZGVzdFNsb3QpKQogCiAJc2l6ZSA9IFNIQVJFRF9NVUxUSVhBQ1RfU1RBVEVf U0laRTsKIAlzaXplID0gYWRkX3NpemUoc2l6ZSwgU2ltcGxlTHJ1U2htZW1TaXplKG11bHRp eGFjdF9vZmZzZXRfYnVmZmVycywgMCkpOwpAQCAtMTc2Myw3ICsxODA0LDcgQEAgTXVsdGlY YWN0U2htZW1Jbml0KHZvaWQpCiAJICogU2V0IHVwIGFycmF5IHBvaW50ZXJzLgogCSAqLwog CU9sZGVzdE1lbWJlck1YYWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+cGVyQmFja2VuZFhhY3RJ ZHM7Ci0JT2xkZXN0VmlzaWJsZU1YYWN0SWQgPSBPbGRlc3RNZW1iZXJNWGFjdElkICsgTWF4 T2xkZXN0U2xvdDsKKwlPbGRlc3RWaXNpYmxlTVhhY3RJZCA9IE9sZGVzdE1lbWJlck1YYWN0 SWQgKyBNYXhPbGRlc3RNZW1iZXJTbG90OwogfQogCiAvKgpAQCAtMjMwMyw2ICsyMzQ0LDgg QEAgTXVsdGlYYWN0SWQKIEdldE9sZGVzdE11bHRpWGFjdElkKHZvaWQpCiB7CiAJTXVsdGlY YWN0SWQgb2xkZXN0TVhhY3Q7CisJTXVsdGlYYWN0SWQgdGhpc29sZGVzdDsKKwlNdWx0aVhh Y3RJZCAqYWxsT2xkZXN0OwogCWludAkJCWk7CiAKIAkvKgpAQCAtMjMxMSwxNSArMjM1NCwx MCBAQCBHZXRPbGRlc3RNdWx0aVhhY3RJZCh2b2lkKQogCSAqLwogCUxXTG9ja0FjcXVpcmUo TXVsdGlYYWN0R2VuTG9jaywgTFdfU0hBUkVEKTsKIAlvbGRlc3RNWGFjdCA9IE11bHRpWGFj dFN0YXRlLT5uZXh0TVhhY3Q7CisJYWxsT2xkZXN0ID0gTXVsdGlYYWN0U3RhdGUtPnBlckJh Y2tlbmRYYWN0SWRzOwogCWZvciAoaSA9IDA7IGkgPCBNYXhPbGRlc3RTbG90OyBpKyspCiAJ ewotCQlNdWx0aVhhY3RJZCB0aGlzb2xkZXN0OwotCi0JCXRoaXNvbGRlc3QgPSBPbGRlc3RN ZW1iZXJNWGFjdElkW2ldOwotCQlpZiAoTXVsdGlYYWN0SWRJc1ZhbGlkKHRoaXNvbGRlc3Qp ICYmCi0JCQlNdWx0aVhhY3RJZFByZWNlZGVzKHRoaXNvbGRlc3QsIG9sZGVzdE1YYWN0KSkK LQkJCW9sZGVzdE1YYWN0ID0gdGhpc29sZGVzdDsKLQkJdGhpc29sZGVzdCA9IE9sZGVzdFZp c2libGVNWGFjdElkW2ldOworCQl0aGlzb2xkZXN0ID0gYWxsT2xkZXN0W2ldOwogCQlpZiAo TXVsdGlYYWN0SWRJc1ZhbGlkKHRoaXNvbGRlc3QpICYmCiAJCQlNdWx0aVhhY3RJZFByZWNl ZGVzKHRoaXNvbGRlc3QsIG9sZGVzdE1YYWN0KSkKIAkJCW9sZGVzdE1YYWN0ID0gdGhpc29s ZGVzdDsKLS0gCjIuNTEuMAoK --------------kYVsStq2vpFhvTsrRYRFf9SZ--