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 1taa6y-0036bL-I2 for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Jan 2025 12:45:37 +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 1taa6x-00Ghaa-En for pgsql-hackers@arkaria.postgresql.org; Wed, 22 Jan 2025 12:45:35 +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 1taa6w-00GhaR-TQ for pgsql-hackers@lists.postgresql.org; Wed, 22 Jan 2025 12:45:35 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1taa6t-000uMV-2L for pgsql-hackers@postgresql.org; Wed, 22 Jan 2025 12:45:34 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mx2023; t=1737549931; bh=9eE13szXX6NNlDJfyRwFAA0ydvCFcCzU5JmvxKYXoqk=; h=From:In-Reply-To:References:Date:To:Message-ID:Subject:User-Agent: From; b=HTigueDhTwNmhCB1jouOLLwL5OJNPWpF0GK20mWHXLoSjNqBGDPlTafMGq1Alr/Ku g0xwWUMQhOojC57tbNcLEmjD08YpFpGKfcYo3mhnYbUBf8T4v1yI7+fIkvtR2UuzZh gXKkbIk38l905JjC2BkBN6O6kG1hpfOY9AodLtzzpdO3RwIQZrECVjpiRXzHaemddG 6I9TO1lsgfqJrv0saubgeU5miu6chI/fI22RgBP7Q60929PDUBokZAR2YBNuGu9YJY 1qDqmv7rXZxuS4x9stnB9XGoeY8DaWAlA1WP1pdh+7EG22QGjqmBvKISgH5unsKvZF ZrBmd5kuWI1BA== Received: from sogo.postgrespro.ru (sogo.l.postgrespro.ru [192.168.2.5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (Client did not present a certificate) by mail.postgrespro.ru (Postfix/587) with ESMTPS id EFDD160AE1 for ; Wed, 22 Jan 2025 15:45:30 +0300 (MSK) From: "Vitaly Davydov" Content-Type: multipart/mixed; boundary="----=_=-_OpenGroupware_org_NGMime-4112080-1737549930.862704-1------" In-Reply-To: X-Forward: 46.39.228.226 References: <152dda-676d7200-61-659acf0@102179597> <16aa85-676ec500-3d-23db9b40@59039559> <20250116010051.f3.nmisch@google.com> <20250116205254.65.nmisch@google.com> <20250117005221.05.nmisch@google.com> <20250117024416.8c.nmisch@google.com> Date: Wed, 22 Jan 2025 15:45:30 +0300 To: pgsql-hackers@postgresql.org MIME-Version: 1.0 Message-ID: <3ebed0-6790e880-3-24447380@20764243> Subject: =?utf-8?q?Re=3A?= An improvement of ProcessTwoPhaseBuffer logic User-Agent: SOGoMail 5.11.2 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: 2025/01/22 10:19:00 #27099507 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 ------=_=-_OpenGroupware_org_NGMime-4112080-1737549930.862704-1------ Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Content-Length: 2037 Dear Hackers, I hope you may find this patch worth to consider. You may consider this= patch as one more step to a complete migration to FullTransactionId in= twophase.c for 17+ versions. The patch fixes TwoPhaseFilePath function. The current version gets Tra= nsactionId as an argument and makes a path to the file with twophase tr= ansaction state. The problem - this logic is ambiguous, because xid doe= sn't contain the epoch. By replacing the argument with FullTransactionI= d, the logic of this function becomes straightforward. All the responsi= bility to properly form a full xid were delegated to the caller functio= ns. The change in TwoPhaseFilePath implies to migrate to FullTransactionId = in some other functions. There is a function AdjustToFullTransactionId = (in the current master) which converts xid to full xid. The problem wit= h this function is that it works properly only with those xids that are= inside the current xid range which is defined by the xid horizon (wrap= around), because it applies some assumptions concerning epoch definitio= n (two epoches may be in action). I assume that if a xid is coming from in-memory states, it has to be in= the current xid range. Based on this assumption, I would conclude that= if the xid is coming via the interface (external) functions which are = defined in twophase.h, AdjustToFullTransactionId can be applied to such= xid. There is another story when we define xid from two phase file names, wh= en reading pg=5Ftwophase directory. In 17+ twophase file names was chan= ged to contain tx epoch as well. Once we work with twophase files, we h= ave to use full xids. Function AdjustToFullTransactionId is not applica= ble in this case, because pg=5Ftwophase directory may contain any garba= ge files with future or past full xids which are outside of the current= range. Based on these assumptions (AdjustToFullTransactionId or use full xids)= some other functions were modified as shown in the patch. With best regards, Vitaly ------=_=-_OpenGroupware_org_NGMime-4112080-1737549930.862704-1------ Content-Type: text/x-patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Use-FullTransactionId-in-TwoPhaseFilePath-and-in-som.patch" Content-Length: 13788 RnJvbSA2ZmE3NjQxODQ2NmE1MTFhOGFmMzJmYzMwMzJiNGYyYWM5ZGFhZTc3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBWaXRhbHkgRGF2eWRvdiA8di5kYXZ5ZG92QHBvc3Rn cmVzcHJvLnJ1PgpEYXRlOiBXZWQsIDIyIEphbiAyMDI1IDExOjEyOjMyICswMzAwClN1Ympl Y3Q6IFtQQVRDSF0gVXNlIEZ1bGxUcmFuc2FjdGlvbklkIGluIFR3b1BoYXNlRmlsZVBhdGgg YW5kIGluIHNvbWUgb3RoZXIKIGZ1bmN0aW9ucwoKVGhlIHBhdGNoIGZpeGVzIFR3b1BoYXNl RmlsZVBhdGggZnVuY3Rpb24uIFRoZSBjdXJyZW50IHZlcnNpb24gZ2V0cwpUcmFuc2FjdGlv bklkIGFzIGFuIGFyZ3VtZW50IGFuZCBtYWtlcyBhIHBhdGggdG8gdGhlIGZpbGUgd2l0aCB0 d29waGFzZQp0cmFuc2FjdGlvbiBzdGF0ZS4gVGhlIHByb2JsZW0gLSB0aGlzIGxvZ2ljIGlz IGFtYmlndW91cywgYmVjYXVzZSB4aWQKZG9lc24ndCBjb250YWluIHRoZSBlcG9jaC4gQnkg cmVwbGFjaW5nIHRoZSBhcmd1bWVudCB3aXRoCkZ1bGxUcmFuc2FjdGlvbklkLCB0aGUgbG9n aWMgb2YgdGhpcyBmdW5jdGlvbiBiZWNvbWVzIHN0cmFpZ2h0Zm9yd2FyZC4KQWxsIHRoZSBy ZXNwb25zaWJpbGl0eSB0byBwcm9wZXJseSBmb3JtIGEgZnVsbCB4aWQgd2VyZSBkZWxlZ2F0 ZWQgdG8KdGhlIGNhbGxlciBmdW5jdGlvbnMuCi0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vdHdvcGhhc2UuYyB8IDg0ICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogMSBm aWxlIGNoYW5nZWQsIDUxIGluc2VydGlvbnMoKyksIDMzIGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNlLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvdHJhbnNhbS90d29waGFzZS5jCmluZGV4IGFiMmY0YThhOTIuLmUyMTUx NzBjY2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3R3b3BoYXNl LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vdHdvcGhhc2UuYwpAQCAtMjIx LDE0ICsyMjEsMTQgQEAgc3RhdGljIHZvaWQgUHJvY2Vzc1JlY29yZHMoY2hhciAqYnVmcHRy LCBUcmFuc2FjdGlvbklkIHhpZCwKIHN0YXRpYyB2b2lkIFJlbW92ZUdYYWN0KEdsb2JhbFRy YW5zYWN0aW9uIGd4YWN0KTsKIAogc3RhdGljIHZvaWQgWGxvZ1JlYWRUd29QaGFzZURhdGEo WExvZ1JlY1B0ciBsc24sIGNoYXIgKipidWYsIGludCAqbGVuKTsKLXN0YXRpYyBjaGFyICpQ cm9jZXNzVHdvUGhhc2VCdWZmZXIoVHJhbnNhY3Rpb25JZCB4aWQsCitzdGF0aWMgY2hhciAq UHJvY2Vzc1R3b1BoYXNlQnVmZmVyKEZ1bGxUcmFuc2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJ ICAgWExvZ1JlY1B0ciBwcmVwYXJlX3N0YXJ0X2xzbiwKIAkJCQkJCQkJICAgYm9vbCBmcm9t ZGlzaywgYm9vbCBzZXRQYXJlbnQsIGJvb2wgc2V0TmV4dFhpZCk7CiBzdGF0aWMgdm9pZCBN YXJrQXNQcmVwYXJpbmdHdXRzKEdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0LCBUcmFuc2FjdGlv bklkIHhpZCwKIAkJCQkJCQkJY29uc3QgY2hhciAqZ2lkLCBUaW1lc3RhbXBUeiBwcmVwYXJl ZF9hdCwgT2lkIG93bmVyLAogCQkJCQkJCQlPaWQgZGF0YWJhc2VpZCk7Ci1zdGF0aWMgdm9p ZCBSZW1vdmVUd29QaGFzZUZpbGUoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZ2l2ZVdhcm5p bmcpOwotc3RhdGljIHZvaWQgUmVjcmVhdGVUd29QaGFzZUZpbGUoVHJhbnNhY3Rpb25JZCB4 aWQsIHZvaWQgKmNvbnRlbnQsIGludCBsZW4pOworc3RhdGljIHZvaWQgUmVtb3ZlVHdvUGhh c2VGaWxlKEZ1bGxUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBnaXZlV2FybmluZyk7CitzdGF0 aWMgdm9pZCBSZWNyZWF0ZVR3b1BoYXNlRmlsZShGdWxsVHJhbnNhY3Rpb25JZCB4aWQsIHZv aWQgKmNvbnRlbnQsIGludCBsZW4pOwogCiAvKgogICogSW5pdGlhbGl6YXRpb24gb2Ygc2hh cmVkIG1lbW9yeQpAQCAtOTU4LDEwICs5NTgsOCBAQCBBZGp1c3RUb0Z1bGxUcmFuc2FjdGlv bklkKFRyYW5zYWN0aW9uSWQgeGlkKQogfQogCiBzdGF0aWMgaW5saW5lIGludAotVHdvUGhh c2VGaWxlUGF0aChjaGFyICpwYXRoLCBUcmFuc2FjdGlvbklkIHhpZCkKK1R3b1BoYXNlRmls ZVBhdGgoY2hhciAqcGF0aCwgRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCkKIHsKLQlGdWxsVHJh bnNhY3Rpb25JZCBmeGlkID0gQWRqdXN0VG9GdWxsVHJhbnNhY3Rpb25JZCh4aWQpOwotCiAJ cmV0dXJuIHNucHJpbnRmKHBhdGgsIE1BWFBHUEFUSCwgVFdPUEhBU0VfRElSICIvJTA4WCUw OFgiLAogCQkJCQlFcG9jaEZyb21GdWxsVHJhbnNhY3Rpb25JZChmeGlkKSwKIAkJCQkJWGlk RnJvbUZ1bGxUcmFuc2FjdGlvbklkKGZ4aWQpKTsKQEAgLTEzMDAsNyArMTI5OCw3IEBAIFJl Z2lzdGVyVHdvUGhhc2VSZWNvcmQoVHdvUGhhc2VSbWdySWQgcm1pZCwgdWludDE2IGluZm8s CiAgKiBpZ25vcmVkLCB0aGVuIHJldHVybiBOVUxMLiAgVGhpcyBzdGF0ZSBjYW4gYmUgcmVh Y2hlZCB3aGVuIGRvaW5nIHJlY292ZXJ5LgogICovCiBzdGF0aWMgY2hhciAqCi1SZWFkVHdv UGhhc2VGaWxlKFRyYW5zYWN0aW9uSWQgeGlkLCBib29sIG1pc3Npbmdfb2spCitSZWFkVHdv UGhhc2VGaWxlKEZ1bGxUcmFuc2FjdGlvbklkIHhpZCwgYm9vbCBtaXNzaW5nX29rKQogewog CWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAljaGFyCSAgICpidWY7CkBAIC0xNDc3LDE0ICsx NDc1LDE3IEBAIFN0YW5kYnlUcmFuc2FjdGlvbklkSXNQcmVwYXJlZChUcmFuc2FjdGlvbklk IHhpZCkKIAljaGFyCSAgICpidWY7CiAJVHdvUGhhc2VGaWxlSGVhZGVyICpoZHI7CiAJYm9v bAkJcmVzdWx0OworCUZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQ7CiAKIAlBc3NlcnQoVHJhbnNh Y3Rpb25JZElzVmFsaWQoeGlkKSk7CiAKIAlpZiAobWF4X3ByZXBhcmVkX3hhY3RzIDw9IDAp CiAJCXJldHVybiBmYWxzZTsJCQkvKiBub3RoaW5nIHRvIGRvICovCiAKKwlmeGlkID0gQWRq dXN0VG9GdWxsVHJhbnNhY3Rpb25JZCh4aWQpOworCiAJLyogUmVhZCBhbmQgdmFsaWRhdGUg ZmlsZSAqLwotCWJ1ZiA9IFJlYWRUd29QaGFzZUZpbGUoeGlkLCB0cnVlKTsKKwlidWYgPSBS ZWFkVHdvUGhhc2VGaWxlKGZ4aWQsIHRydWUpOwogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0 dXJuIGZhbHNlOwogCkBAIC0xNTE4LDYgKzE1MTksNyBAQCBGaW5pc2hQcmVwYXJlZFRyYW5z YWN0aW9uKGNvbnN0IGNoYXIgKmdpZCwgYm9vbCBpc0NvbW1pdCkKIAl4bF94YWN0X3N0YXRz X2l0ZW0gKmNvbW1pdHN0YXRzOwogCXhsX3hhY3Rfc3RhdHNfaXRlbSAqYWJvcnRzdGF0czsK IAlTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlICppbnZhbG1zZ3M7CisJRnVsbFRyYW5zYWN0 aW9uSWQgZnhpZCA9IEludmFsaWRGdWxsVHJhbnNhY3Rpb25JZDsKIAogCS8qCiAJICogVmFs aWRhdGUgdGhlIEdJRCwgYW5kIGxvY2sgdGhlIEdYQUNUIHRvIGVuc3VyZSB0aGF0IHR3byBi YWNrZW5kcyBkbyBub3QKQEAgLTE1MzIsOCArMTUzNCwxMCBAQCBGaW5pc2hQcmVwYXJlZFRy YW5zYWN0aW9uKGNvbnN0IGNoYXIgKmdpZCwgYm9vbCBpc0NvbW1pdCkKIAkgKiBpbiBXQUwg ZmlsZXMgaWYgdGhlIExTTiBpcyBhZnRlciB0aGUgbGFzdCBjaGVja3BvaW50IHJlY29yZCwg b3IgbW92ZWQKIAkgKiB0byBkaXNrIGlmIGZvciBzb21lIHJlYXNvbiB0aGV5IGhhdmUgbGl2 ZWQgZm9yIGEgbG9uZyB0aW1lLgogCSAqLwotCWlmIChneGFjdC0+b25kaXNrKQotCQlidWYg PSBSZWFkVHdvUGhhc2VGaWxlKHhpZCwgZmFsc2UpOworCWlmIChneGFjdC0+b25kaXNrKSB7 CisJCWZ4aWQgPSBBZGp1c3RUb0Z1bGxUcmFuc2FjdGlvbklkKHhpZCk7CisJCWJ1ZiA9IFJl YWRUd29QaGFzZUZpbGUoZnhpZCwgZmFsc2UpOworCX0KIAllbHNlCiAJCVhsb2dSZWFkVHdv UGhhc2VEYXRhKGd4YWN0LT5wcmVwYXJlX3N0YXJ0X2xzbiwgJmJ1ZiwgTlVMTCk7CiAKQEAg LTE2NzksOCArMTY4MywxMCBAQCBGaW5pc2hQcmVwYXJlZFRyYW5zYWN0aW9uKGNvbnN0IGNo YXIgKmdpZCwgYm9vbCBpc0NvbW1pdCkKIAkvKgogCSAqIEFuZCBub3cgd2UgY2FuIGNsZWFu IHVwIGFueSBmaWxlcyB3ZSBtYXkgaGF2ZSBsZWZ0LgogCSAqLwotCWlmIChvbmRpc2spCi0J CVJlbW92ZVR3b1BoYXNlRmlsZSh4aWQsIHRydWUpOworCWlmIChvbmRpc2spIHsKKwkJQXNz ZXJ0KEZ1bGxUcmFuc2FjdGlvbklkSXNWYWxpZChmeGlkKSk7CisJCVJlbW92ZVR3b1BoYXNl RmlsZShmeGlkLCB0cnVlKTsKKwl9CiAKIAlNeUxvY2tlZEd4YWN0ID0gTlVMTDsKIApAQCAt MTcyMCwxMSArMTcyNiwxMSBAQCBQcm9jZXNzUmVjb3JkcyhjaGFyICpidWZwdHIsIFRyYW5z YWN0aW9uSWQgeGlkLAogICogdGhpcyBpcyBhbiBleHBlY3RlZCBjYXNlIGR1cmluZyBXQUwg cmVwbGF5LgogICovCiBzdGF0aWMgdm9pZAotUmVtb3ZlVHdvUGhhc2VGaWxlKFRyYW5zYWN0 aW9uSWQgeGlkLCBib29sIGdpdmVXYXJuaW5nKQorUmVtb3ZlVHdvUGhhc2VGaWxlKEZ1bGxU cmFuc2FjdGlvbklkIGZ4aWQsIGJvb2wgZ2l2ZVdhcm5pbmcpCiB7CiAJY2hhcgkJcGF0aFtN QVhQR1BBVEhdOwogCi0JVHdvUGhhc2VGaWxlUGF0aChwYXRoLCB4aWQpOworCVR3b1BoYXNl RmlsZVBhdGgocGF0aCwgZnhpZCk7CiAJaWYgKHVubGluayhwYXRoKSkKIAkJaWYgKGVycm5v ICE9IEVOT0VOVCB8fCBnaXZlV2FybmluZykKIAkJCWVyZXBvcnQoV0FSTklORywKQEAgLTE3 MzksNyArMTc0NSw3IEBAIFJlbW92ZVR3b1BoYXNlRmlsZShUcmFuc2FjdGlvbklkIHhpZCwg Ym9vbCBnaXZlV2FybmluZykKICAqIE5vdGU6IGNvbnRlbnQgYW5kIGxlbiBkb24ndCBpbmNs dWRlIENSQy4KICAqLwogc3RhdGljIHZvaWQKLVJlY3JlYXRlVHdvUGhhc2VGaWxlKFRyYW5z YWN0aW9uSWQgeGlkLCB2b2lkICpjb250ZW50LCBpbnQgbGVuKQorUmVjcmVhdGVUd29QaGFz ZUZpbGUoRnVsbFRyYW5zYWN0aW9uSWQgeGlkLCB2b2lkICpjb250ZW50LCBpbnQgbGVuKQog ewogCWNoYXIJCXBhdGhbTUFYUEdQQVRIXTsKIAlwZ19jcmMzMmMJc3RhdGVmaWxlX2NyYzsK QEAgLTE4NjAsOSArMTg2NiwxMCBAQCBDaGVja1BvaW50VHdvUGhhc2UoWExvZ1JlY1B0ciBy ZWRvX2hvcml6b24pCiAJCXsKIAkJCWNoYXIJICAgKmJ1ZjsKIAkJCWludAkJCWxlbjsKKwkJ CUZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQgPSBBZGp1c3RUb0Z1bGxUcmFuc2FjdGlvbklkKGd4 YWN0LT54aWQpOwogCiAJCQlYbG9nUmVhZFR3b1BoYXNlRGF0YShneGFjdC0+cHJlcGFyZV9z dGFydF9sc24sICZidWYsICZsZW4pOwotCQkJUmVjcmVhdGVUd29QaGFzZUZpbGUoZ3hhY3Qt PnhpZCwgYnVmLCBsZW4pOworCQkJUmVjcmVhdGVUd29QaGFzZUZpbGUoZnhpZCwgYnVmLCBs ZW4pOwogCQkJZ3hhY3QtPm9uZGlzayA9IHRydWU7CiAJCQlneGFjdC0+cHJlcGFyZV9zdGFy dF9sc24gPSBJbnZhbGlkWExvZ1JlY1B0cjsKIAkJCWd4YWN0LT5wcmVwYXJlX2VuZF9sc24g PSBJbnZhbGlkWExvZ1JlY1B0cjsKQEAgLTE5MTMsMTQgKzE5MjAsMTIgQEAgcmVzdG9yZVR3 b1BoYXNlRGF0YSh2b2lkKQogCQlpZiAoc3RybGVuKGNsZGUtPmRfbmFtZSkgPT0gMTYgJiYK IAkJCXN0cnNwbihjbGRlLT5kX25hbWUsICIwMTIzNDU2Nzg5QUJDREVGIikgPT0gMTYpCiAJ CXsKLQkJCVRyYW5zYWN0aW9uSWQgeGlkOwogCQkJRnVsbFRyYW5zYWN0aW9uSWQgZnhpZDsK IAkJCWNoYXIJICAgKmJ1ZjsKIAogCQkJZnhpZCA9IEZ1bGxUcmFuc2FjdGlvbklkRnJvbVU2 NChzdHJ0b3U2NChjbGRlLT5kX25hbWUsIE5VTEwsIDE2KSk7Ci0JCQl4aWQgPSBYaWRGcm9t RnVsbFRyYW5zYWN0aW9uSWQoZnhpZCk7CiAKLQkJCWJ1ZiA9IFByb2Nlc3NUd29QaGFzZUJ1 ZmZlcih4aWQsIEludmFsaWRYTG9nUmVjUHRyLAorCQkJYnVmID0gUHJvY2Vzc1R3b1BoYXNl QnVmZmVyKGZ4aWQsIEludmFsaWRYTG9nUmVjUHRyLAogCQkJCQkJCQkJCXRydWUsIGZhbHNl LCBmYWxzZSk7CiAJCQlpZiAoYnVmID09IE5VTEwpCiAJCQkJY29udGludWU7CkBAIC0xOTgx LDEyICsxOTg2LDE0IEBAIFByZXNjYW5QcmVwYXJlZFRyYW5zYWN0aW9ucyhUcmFuc2FjdGlv bklkICoqeGlkc19wLCBpbnQgKm54aWRzX3ApCiAJCVRyYW5zYWN0aW9uSWQgeGlkOwogCQlj aGFyCSAgICpidWY7CiAJCUdsb2JhbFRyYW5zYWN0aW9uIGd4YWN0ID0gVHdvUGhhc2VTdGF0 ZS0+cHJlcFhhY3RzW2ldOworCQlGdWxsVHJhbnNhY3Rpb25JZCBmeGlkOwogCiAJCUFzc2Vy dChneGFjdC0+aW5yZWRvKTsKIAogCQl4aWQgPSBneGFjdC0+eGlkOworCQlmeGlkID0gQWRq dXN0VG9GdWxsVHJhbnNhY3Rpb25JZCh4aWQpOwogCi0JCWJ1ZiA9IFByb2Nlc3NUd29QaGFz ZUJ1ZmZlcih4aWQsCisJCWJ1ZiA9IFByb2Nlc3NUd29QaGFzZUJ1ZmZlcihmeGlkLAogCQkJ CQkJCQkJZ3hhY3QtPnByZXBhcmVfc3RhcnRfbHNuLAogCQkJCQkJCQkJZ3hhY3QtPm9uZGlz aywgZmFsc2UsIHRydWUpOwogCkBAIC0yMDU1LDEyICsyMDYyLDE0IEBAIFN0YW5kYnlSZWNv dmVyUHJlcGFyZWRUcmFuc2FjdGlvbnModm9pZCkKIAkJVHJhbnNhY3Rpb25JZCB4aWQ7CiAJ CWNoYXIJICAgKmJ1ZjsKIAkJR2xvYmFsVHJhbnNhY3Rpb24gZ3hhY3QgPSBUd29QaGFzZVN0 YXRlLT5wcmVwWGFjdHNbaV07CisJCUZ1bGxUcmFuc2FjdGlvbklkIGZ4aWQ7CiAKIAkJQXNz ZXJ0KGd4YWN0LT5pbnJlZG8pOwogCiAJCXhpZCA9IGd4YWN0LT54aWQ7CisJCWZ4aWQgPSBB ZGp1c3RUb0Z1bGxUcmFuc2FjdGlvbklkKHhpZCk7CiAKLQkJYnVmID0gUHJvY2Vzc1R3b1Bo YXNlQnVmZmVyKHhpZCwKKwkJYnVmID0gUHJvY2Vzc1R3b1BoYXNlQnVmZmVyKGZ4aWQsCiAJ CQkJCQkJCQlneGFjdC0+cHJlcGFyZV9zdGFydF9sc24sCiAJCQkJCQkJCQlneGFjdC0+b25k aXNrLCB0cnVlLCBmYWxzZSk7CiAJCWlmIChidWYgIT0gTlVMTCkKQEAgLTIxMDAsOCArMjEw OSwxMCBAQCBSZWNvdmVyUHJlcGFyZWRUcmFuc2FjdGlvbnModm9pZCkKIAkJVHdvUGhhc2VG aWxlSGVhZGVyICpoZHI7CiAJCVRyYW5zYWN0aW9uSWQgKnN1YnhpZHM7CiAJCWNvbnN0IGNo YXIgKmdpZDsKKwkJRnVsbFRyYW5zYWN0aW9uSWQgZnhpZDsKIAogCQl4aWQgPSBneGFjdC0+ eGlkOworCQlmeGlkID0gQWRqdXN0VG9GdWxsVHJhbnNhY3Rpb25JZCh4aWQpOwogCiAJCS8q CiAJCSAqIFJlY29uc3RydWN0IHN1YnRyYW5zIHN0YXRlIGZvciB0aGUgdHJhbnNhY3Rpb24g LS0tIG5lZWRlZCBiZWNhdXNlCkBAIC0yMTEyLDcgKzIxMjMsNyBAQCBSZWNvdmVyUHJlcGFy ZWRUcmFuc2FjdGlvbnModm9pZCkKIAkJICogU3ViVHJhbnNTZXRQYXJlbnQgaGFzIGJlZW4g c2V0IGJlZm9yZSwgaWYgdGhlIHByZXBhcmVkIHRyYW5zYWN0aW9uCiAJCSAqIGdlbmVyYXRl ZCB4aWQgYXNzaWdubWVudCByZWNvcmRzLgogCQkgKi8KLQkJYnVmID0gUHJvY2Vzc1R3b1Bo YXNlQnVmZmVyKHhpZCwKKwkJYnVmID0gUHJvY2Vzc1R3b1BoYXNlQnVmZmVyKGZ4aWQsCiAJ CQkJCQkJCQlneGFjdC0+cHJlcGFyZV9zdGFydF9sc24sCiAJCQkJCQkJCQlneGFjdC0+b25k aXNrLCB0cnVlLCBmYWxzZSk7CiAJCWlmIChidWYgPT0gTlVMTCkKQEAgLTIxODksMTMgKzIy MDAsMTMgQEAgUmVjb3ZlclByZXBhcmVkVHJhbnNhY3Rpb25zKHZvaWQpCiAgKiB2YWx1ZSBz Y2FubmVkLgogICovCiBzdGF0aWMgY2hhciAqCi1Qcm9jZXNzVHdvUGhhc2VCdWZmZXIoVHJh bnNhY3Rpb25JZCB4aWQsCitQcm9jZXNzVHdvUGhhc2VCdWZmZXIoRnVsbFRyYW5zYWN0aW9u SWQgZnhpZCwKIAkJCQkJICBYTG9nUmVjUHRyIHByZXBhcmVfc3RhcnRfbHNuLAogCQkJCQkg IGJvb2wgZnJvbWRpc2ssCiAJCQkJCSAgYm9vbCBzZXRQYXJlbnQsIGJvb2wgc2V0TmV4dFhp ZCkKIHsKIAlGdWxsVHJhbnNhY3Rpb25JZCBuZXh0WGlkID0gVHJhbnNhbVZhcmlhYmxlcy0+ bmV4dFhpZDsKLQlUcmFuc2FjdGlvbklkIG9yaWdOZXh0WGlkID0gWGlkRnJvbUZ1bGxUcmFu c2FjdGlvbklkKG5leHRYaWQpOworCVRyYW5zYWN0aW9uSWQgeGlkID0gWGlkRnJvbUZ1bGxU cmFuc2FjdGlvbklkKGZ4aWQpOwogCVRyYW5zYWN0aW9uSWQgKnN1YnhpZHM7CiAJY2hhcgkg ICAqYnVmOwogCVR3b1BoYXNlRmlsZUhlYWRlciAqaGRyOwpAQCAtMjIxNCw3ICsyMjI1LDcg QEAgUHJvY2Vzc1R3b1BoYXNlQnVmZmVyKFRyYW5zYWN0aW9uSWQgeGlkLAogCQkJZXJlcG9y dChXQVJOSU5HLAogCQkJCQkoZXJybXNnKCJyZW1vdmluZyBzdGFsZSB0d28tcGhhc2Ugc3Rh dGUgZmlsZSBmb3IgdHJhbnNhY3Rpb24gJXUiLAogCQkJCQkJCXhpZCkpKTsKLQkJCVJlbW92 ZVR3b1BoYXNlRmlsZSh4aWQsIHRydWUpOworCQkJUmVtb3ZlVHdvUGhhc2VGaWxlKGZ4aWQs IHRydWUpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMjIyNywxNCArMjIzOCwxNCBAQCBQcm9j ZXNzVHdvUGhhc2VCdWZmZXIoVHJhbnNhY3Rpb25JZCB4aWQsCiAJfQogCiAJLyogUmVqZWN0 IFhJRCBpZiB0b28gbmV3ICovCi0JaWYgKFRyYW5zYWN0aW9uSWRGb2xsb3dzT3JFcXVhbHMo eGlkLCBvcmlnTmV4dFhpZCkpCisJaWYgKEZ1bGxUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1 YWxzKGZ4aWQsIG5leHRYaWQpKQogCXsKIAkJaWYgKGZyb21kaXNrKQogCQl7CiAJCQllcmVw b3J0KFdBUk5JTkcsCiAJCQkJCShlcnJtc2coInJlbW92aW5nIGZ1dHVyZSB0d28tcGhhc2Ug c3RhdGUgZmlsZSBmb3IgdHJhbnNhY3Rpb24gJXUiLAogCQkJCQkJCXhpZCkpKTsKLQkJCVJl bW92ZVR3b1BoYXNlRmlsZSh4aWQsIHRydWUpOworCQkJUmVtb3ZlVHdvUGhhc2VGaWxlKGZ4 aWQsIHRydWUpOwogCQl9CiAJCWVsc2UKIAkJewpAQCAtMjI0OSw3ICsyMjYwLDcgQEAgUHJv Y2Vzc1R3b1BoYXNlQnVmZmVyKFRyYW5zYWN0aW9uSWQgeGlkLAogCWlmIChmcm9tZGlzaykK IAl7CiAJCS8qIFJlYWQgYW5kIHZhbGlkYXRlIGZpbGUgKi8KLQkJYnVmID0gUmVhZFR3b1Bo YXNlRmlsZSh4aWQsIGZhbHNlKTsKKwkJYnVmID0gUmVhZFR3b1BoYXNlRmlsZShmeGlkLCBm YWxzZSk7CiAJfQogCWVsc2UKIAl7CkBAIC0yNTIwLDggKzI1MzEsOSBAQCBQcmVwYXJlUmVk b0FkZChjaGFyICpidWYsIFhMb2dSZWNQdHIgc3RhcnRfbHNuLAogCWlmICghWExvZ1JlY1B0 cklzSW52YWxpZChzdGFydF9sc24pKQogCXsKIAkJY2hhcgkJcGF0aFtNQVhQR1BBVEhdOwor CQlGdWxsVHJhbnNhY3Rpb25JZCBmeGlkID0gQWRqdXN0VG9GdWxsVHJhbnNhY3Rpb25JZCho ZHItPnhpZCk7CiAKLQkJVHdvUGhhc2VGaWxlUGF0aChwYXRoLCBoZHItPnhpZCk7CisJCVR3 b1BoYXNlRmlsZVBhdGgocGF0aCwgZnhpZCk7CiAKIAkJaWYgKGFjY2VzcyhwYXRoLCBGX09L KSA9PSAwKQogCQl7CkBAIC0yNjE1LDggKzI2MjcsMTEgQEAgUHJlcGFyZVJlZG9SZW1vdmUo VHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgZ2l2ZVdhcm5pbmcpCiAJICogQW5kIG5vdyB3ZSBj YW4gY2xlYW4gdXAgYW55IGZpbGVzIHdlIG1heSBoYXZlIGxlZnQuCiAJICovCiAJZWxvZyhE RUJVRzIsICJyZW1vdmluZyAyUEMgZGF0YSBmb3IgdHJhbnNhY3Rpb24gJXUiLCB4aWQpOwot CWlmIChneGFjdC0+b25kaXNrKQotCQlSZW1vdmVUd29QaGFzZUZpbGUoeGlkLCBnaXZlV2Fy bmluZyk7CisJaWYgKGd4YWN0LT5vbmRpc2spIHsKKwkJRnVsbFRyYW5zYWN0aW9uSWQgZnhp ZCA9IEFkanVzdFRvRnVsbFRyYW5zYWN0aW9uSWQoeGlkKTsKKworCQlSZW1vdmVUd29QaGFz ZUZpbGUoZnhpZCwgZ2l2ZVdhcm5pbmcpOworCX0KIAlSZW1vdmVHWGFjdChneGFjdCk7CiB9 CiAKQEAgLTI2NjMsOCArMjY3OCwxMSBAQCBMb29rdXBHWGFjdChjb25zdCBjaGFyICpnaWQs IFhMb2dSZWNQdHIgcHJlcGFyZV9lbmRfbHNuLAogCQkJICogZG8gdGhpcyBvcHRpbWl6YXRp b24gaWYgd2UgZW5jb3VudGVyIG1hbnkgY29sbGlzaW9ucyBpbiBHSUQKIAkJCSAqIGJldHdl ZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyLgogCQkJICovCi0JCQlpZiAoZ3hhY3QtPm9u ZGlzaykKLQkJCQlidWYgPSBSZWFkVHdvUGhhc2VGaWxlKGd4YWN0LT54aWQsIGZhbHNlKTsK KwkJCWlmIChneGFjdC0+b25kaXNrKSB7CisJCQkJRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCA9 IEFkanVzdFRvRnVsbFRyYW5zYWN0aW9uSWQoZ3hhY3QtPnhpZCk7CisKKwkJCQlidWYgPSBS ZWFkVHdvUGhhc2VGaWxlKGZ4aWQsIGZhbHNlKTsKKwkJCX0KIAkJCWVsc2UKIAkJCXsKIAkJ CQlBc3NlcnQoZ3hhY3QtPnByZXBhcmVfc3RhcnRfbHNuKTsKLS0gCjIuMzQuMQoK ------=_=-_OpenGroupware_org_NGMime-4112080-1737549930.862704-1--------