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 1t9557-007en1-VK for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Nov 2024 16:10:01 +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 1t9554-00GxbG-WD for pgsql-hackers@arkaria.postgresql.org; Thu, 07 Nov 2024 16:09:59 +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 1t9554-00Gxb8-Cq for pgsql-hackers@lists.postgresql.org; Thu, 07 Nov 2024 16:09:59 +0000 Received: from mail-qv1-xf32.google.com ([2607:f8b0:4864:20::f32]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1t954w-000hQz-To for pgsql-hackers@postgresql.org; Thu, 07 Nov 2024 16:09:58 +0000 Received: by mail-qv1-xf32.google.com with SMTP id 6a1803df08f44-6cbd1ae26a6so7252126d6.1 for ; Thu, 07 Nov 2024 08:09:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=wi3ck-info.20230601.gappssmtp.com; s=20230601; t=1730995789; x=1731600589; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=tpOA+8k6Z+yb19qsWaouXYteX1faA4tLV3bR+WPKTAY=; b=Ymv59481IRbzlIL60bgM/NyPDlclqLtkPNXxuTh4hTthskGd0NbWCuimGXe7321/XZ 8gjHJK9p/ybJ18nGgU67rObw/jQBojGxNhqfVHIJiz3dHasLMtXg1PSqiSq9Z3QbmDA6 fU6w/CcEldet3RN2l2PFg+2FQYgy5EbFeIB+hrnjBeUyNY3nKWVp0RkxglgimADegue6 6t5Z2z/1RfIsd0r1i5WDtUMK1Jmp5oLTyO6UeyGQXQjr/6pBbm6Kw5bg2OZvf1RhXOlL Tfea/iFnCz36rTuapKb97RUE2utRy4x6TcJ3dbUGzpeXvssSOA3NMO8xvm3aDMUlTNBh IFRA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1730995789; x=1731600589; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=tpOA+8k6Z+yb19qsWaouXYteX1faA4tLV3bR+WPKTAY=; b=nHVUjhEZTmsGNWZJg+0j5RLOuurJ/9pE3rXv6I2l7dJ/C7aGF9MPNNsfkThnJ8M9cG aTIABG3zLYuB4Yxo/MZsz+n4jzaijVl29oFShnZLSyWEJ9VMUvUaDr6Dm5r9IrTWxJNe rIIxAb+EZNCuns2kDnzemYbZmNIvU0o/XkP4dCEX7lBqBwghlSiV+nN2NQUv/3F1uidr sV/XIpf8+HhSJ1OnyR7+ajOCBEEpEVApyICAnIbSom000ruTGleoUq1KY9COAW4CDcn+ Wh5UAmyvSgFOMoPZlNUXegwmbCalQyBcwzT5DriP5+10u+KN00uwzYshyh1POm4JDzO0 mgtQ== X-Gm-Message-State: AOJu0Yy3234rekSKEH3IvX6vbyL4XQFzghe1FMCLxpA5PqLd2WQPDTAK /wTtLE5xun/NmM23NetHxUTb+2dElOKAp6hGFJDp3sy7G7d/kq+BaxM1G9bCtv0= X-Google-Smtp-Source: AGHT+IHxD3pncOVZEawxz/0OTaM/Xa9r4uoGS9xaH9FTVIEKqxbHW9zAc1ko87Osv8VE6h50W278hg== X-Received: by 2002:ad4:4f82:0:b0:6d1:9f62:7b0d with SMTP id 6a1803df08f44-6d19f627b8bmr352104656d6.1.1730995789468; Thu, 07 Nov 2024 08:09:49 -0800 (PST) Received: from [172.21.0.10] (pool-108-16-53-81.phlapa.fios.verizon.net. [108.16.53.81]) by smtp.gmail.com with ESMTPSA id 6a1803df08f44-6d396630f71sm8956646d6.109.2024.11.07.08.09.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 07 Nov 2024 08:09:48 -0800 (PST) Content-Type: multipart/mixed; boundary="------------cmiNTefrkLs5mP8wtmQ6h0qC" Message-ID: <17a7ce08-f04a-49ab-af5c-233d616d7c3b@wi3ck.info> Date: Thu, 7 Nov 2024 11:09:47 -0500 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Commit Timestamp and LSN Inversion issue To: "Zhijie Hou (Fujitsu)" , Amit Kapila , Aleksander Alekseev Cc: pgsql-hackers , shveta malik , "tomas@vondra.me" References: <9f7f4def-7ea8-4ad3-83e7-a8cc9d18c58a@wi3ck.info> Content-Language: en-US From: Jan Wieck 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. --------------cmiNTefrkLs5mP8wtmQ6h0qC Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 11/6/24 21:30, Zhijie Hou (Fujitsu) wrote: > > Thanks for the patch! I am reading the patch and noticed few minor things. > > 1. > + /* > + * This is a local transaction. Make sure that the xact_time > + * higher than any timestamp we have seen thus far. > + * > + * TODO: This is not postmaster restart safe. If the local > + * system clock is further behind other nodes than it takes > + * for the postmaster to restart (time between it stops > + * accepting new transactions and time when it becomes ready > + * to accept new transactions), local transactions will not > + * be bumped into the future correctly. > + */ > > The TODO section mentions other nodes, but I believe think patch currently do > not have the handling of timestamps for other nodes. Should we either remove > this part or add a brief explanation to clarify the relationship with other > nodes? That TODO is actually obsolete. I understood from Amit Kapila that the community does assume that NTP synchronization is good enough. And it indeed is. Even my servers here at home are using a GPS based NTP server connected to the LAN and are usually in sync by single-digit microseconds. I removed it. > > 2. > +/* > + * Hook function to be called while holding the WAL insert spinlock. > + * to adjust commit timestamps via Lamport clock if needed. > + */ > > The second line seems can be improved: > "to adjust commit timestamps .." => "It adjusts commit timestamps ..." How about /* * Hook function to be called while holding the WAL insert spinlock. * It guarantees that commit timestamps are advancing in LSN order. */ static void EnsureMonotonicTransactionStopTimestamp(void *data); Thank you for looking at this and your input. New patch attached. Best Regards, Jan --------------cmiNTefrkLs5mP8wtmQ6h0qC Content-Type: text/x-patch; charset=UTF-8; name="pg18-025-logical_commit_clock.diff" Content-Disposition: attachment; filename="pg18-025-logical_commit_clock.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hhY3QuYwppbmRleCBiN2ViY2MyYTU1Li4wNDA2ZGM0 NGJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94YWN0LmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGFjdC5jCkBAIC0zNzAsNiArMzcwLDEy IEBAIHN0YXRpYyB2b2lkIFNob3dUcmFuc2FjdGlvblN0YXRlUmVjKGNvbnN0IGNoYXIgKnN0 ciwgVHJhbnNhY3Rpb25TdGF0ZSBzKTsKIHN0YXRpYyBjb25zdCBjaGFyICpCbG9ja1N0YXRl QXNTdHJpbmcoVEJsb2NrU3RhdGUgYmxvY2tTdGF0ZSk7CiBzdGF0aWMgY29uc3QgY2hhciAq VHJhbnNTdGF0ZUFzU3RyaW5nKFRyYW5zU3RhdGUgc3RhdGUpOwogCisvKgorICogSG9vayBm dW5jdGlvbiB0byBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyB0aGUgV0FMIGluc2VydCBzcGlu bG9jay4KKyAqIEl0IGd1YXJhbnRlZXMgdGhhdCBjb21taXQgdGltZXN0YW1wcyBhcmUgYWR2 YW5jaW5nIGluIExTTiBvcmRlci4KKyAqLworc3RhdGljIHZvaWQgRW5zdXJlTW9ub3Rvbmlj VHJhbnNhY3Rpb25TdG9wVGltZXN0YW1wKHZvaWQgKmRhdGEpOworCiAKIC8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KICAqCXRyYW5zYWN0aW9uIHN0YXRlIGFjY2Vzc29ycwpAQCAtMjIxNCw2ICsyMjIwLDEz IEBAIFN0YXJ0VHJhbnNhY3Rpb24odm9pZCkKIAlpZiAoVHJhbnNhY3Rpb25UaW1lb3V0ID4g MCkKIAkJZW5hYmxlX3RpbWVvdXRfYWZ0ZXIoVFJBTlNBQ1RJT05fVElNRU9VVCwgVHJhbnNh Y3Rpb25UaW1lb3V0KTsKIAorCS8qCisJICogUmVzZXQgWExvZ1Jlc2VydmVJbnNlcnRIb29r IChmdW5jdGlvbiBjYWxsZWQgd2hpbGUgaG9sZGluZworCSAqIHRoZSBXQUwgaW5zZXJ0IHNw aW5sb2NrKQorCSAqLworCVhMb2dSZXNlcnZlSW5zZXJ0SG9vayA9IE5VTEw7CisJWExvZ1Jl c2VydmVJbnNlcnRIb29rRGF0YSA9IE5VTEw7CisKIAlTaG93VHJhbnNhY3Rpb25TdGF0ZSgi U3RhcnRUcmFuc2FjdGlvbiIpOwogfQogCkBAIC01ODMxLDYgKzU4NDQsNyBAQCBYYWN0TG9n Q29tbWl0UmVjb3JkKFRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLAogCXhsX3hhY3RfdHdvcGhh c2UgeGxfdHdvcGhhc2U7CiAJeGxfeGFjdF9vcmlnaW4geGxfb3JpZ2luOwogCXVpbnQ4CQlp bmZvOworCVhMb2dSZWNQdHIJcmVzdWx0OwogCiAJQXNzZXJ0KENyaXRTZWN0aW9uQ291bnQg PiAwKTsKIApAQCAtNTk3NCw3ICs1OTg4LDE5IEBAIFhhY3RMb2dDb21taXRSZWNvcmQoVGlt ZXN0YW1wVHogY29tbWl0X3RpbWUsCiAJLyogd2UgYWxsb3cgZmlsdGVyaW5nIGJ5IHhhY3Rz ICovCiAJWExvZ1NldFJlY29yZEZsYWdzKFhMT0dfSU5DTFVERV9PUklHSU4pOwogCi0JcmV0 dXJuIFhMb2dJbnNlcnQoUk1fWEFDVF9JRCwgaW5mbyk7CisJLyoKKwkgKiBJbnN0YWxsIG91 ciBob29rIGZvciB0aGUgY2FsbCB0byBSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKCkgc28g dGhhdAorCSAqIHdlIGNhbiBtb2RpZnkgdGhlIHhhY3RTdG9wVGltZXN0YW1wIGFuZCB0aGUg eGFjdF90aW1lIG9mIHRoZSB4bHJlYworCSAqIHdoaWxlIGhvbGRpbmcgdGhlIGxvY2sgdGhh dCBkZXRlcm1pbmVzIHRoZSBjb21taXQtTFNOIHRvIGVuc3VyZQorCSAqIHRoZSBjb21taXQg dGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nLgorCSAqLworCVhMb2dS ZXNlcnZlSW5zZXJ0SG9vayA9IEVuc3VyZU1vbm90b25pY1RyYW5zYWN0aW9uU3RvcFRpbWVz dGFtcDsKKwlYTG9nUmVzZXJ2ZUluc2VydEhvb2tEYXRhID0gKHZvaWQgKikmeGxyZWM7CisJ cmVzdWx0ID0gWExvZ0luc2VydChSTV9YQUNUX0lELCBpbmZvKTsKKwlYTG9nUmVzZXJ2ZUlu c2VydEhvb2sgPSBOVUxMOworCVhMb2dSZXNlcnZlSW5zZXJ0SG9va0RhdGEgPSBOVUxMOwor CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogLyoKQEAgLTY0NDUsMyArNjQ3MSwzMyBAQCB4YWN0 X3JlZG8oWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJZWxzZQogCQllbG9nKFBBTklDLCAi eGFjdF9yZWRvOiB1bmtub3duIG9wIGNvZGUgJXUiLCBpbmZvKTsKIH0KKworLyoKKyAqIEhv b2sgZnVuY3Rpb24gdXNlZCBpbiBYYWN0TG9nQ29tbWl0UmVjb3JkKCkgdG8gZW5zdXJlIHRo YXQgdGhlCisgKiBjb21taXQgdGltZXN0YW1wIGlzIG1vbm90b25pY2FsbHkgaW5jcmVhc2lu ZyBpbiBjb21taXQtTFNOIG9yZGVyLgorICovCitzdGF0aWMgdm9pZAorRW5zdXJlTW9ub3Rv bmljVHJhbnNhY3Rpb25TdG9wVGltZXN0YW1wKHZvaWQgKmRhdGEpCit7CisJeGxfeGFjdF9j b21taXQJICAgKnhscmVjID0gKHhsX3hhY3RfY29tbWl0ICopZGF0YTsKKwlUaW1lc3RhbXBU egkJCWxvZ2ljYWxfY2xvY2s7CisKKwlsb2dpY2FsX2Nsb2NrID0gWExvZ0dldExhc3RUcmFu c2FjdGlvblN0b3BUaW1lc3RhbXAoKTsKKworCS8qCisJICogVGhpcyBpcyBhIGxvY2FsIHRy YW5zYWN0aW9uLiBNYWtlIHN1cmUgdGhhdCB0aGUgeGFjdF90aW1lCisJICogaGlnaGVyIHRo YW4gYW55IHRpbWVzdGFtcCB3ZSBoYXZlIHNlZW4gdGh1cyBmYXIuCisJICovCisJaWYgKGxv Z2ljYWxfY2xvY2sgPj0geGxyZWMtPnhhY3RfdGltZSkKKwl7CisJCWxvZ2ljYWxfY2xvY2sr KzsKKwkJeGxyZWMtPnhhY3RfdGltZSA9IGxvZ2ljYWxfY2xvY2s7CisJCXhhY3RTdG9wVGlt ZXN0YW1wID0gbG9naWNhbF9jbG9jazsKKworCQlYTG9nUmVzZXJ2ZUluc2VydEhvb2tNb2Rp ZmllZFJlY29yZCA9IHRydWU7CisJfQorCWVsc2UKKwkJbG9naWNhbF9jbG9jayA9IHhscmVj LT54YWN0X3RpbWU7CisKKwlYTG9nU2V0TGFzdFRyYW5zYWN0aW9uU3RvcFRpbWVzdGFtcChs b2dpY2FsX2Nsb2NrKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFu c2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYwppbmRleCA2 ZjU4NDEyYmNhLi5iYjcwYTdkZTA5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZy5j CkBAIC0xNTUsNiArMTU1LDE2IEBAIGludAkJCXdhbF9zZWdtZW50X3NpemUgPSBERUZBVUxU X1hMT0dfU0VHX1NJWkU7CiAgKi8KIGludAkJCUNoZWNrUG9pbnRTZWdtZW50czsKIAorLyoK KyAqIEhvb2sgdG8gYmUgY2FsbGVkIGluc2lkZSBvZiBSZXNlcnZlWExvZ0luc2VydExvY2F0 aW9uKCkgZm9yCisgKiBvcGVyYXRpb25zIHRoYXQgbmVlZCB0byBiZSBwZXJmb3JtZWQgd2hp bGUgaG9sZGluZyB0aGUgV0FMCisgKiBpbnNlcnQgc3BpbmxvY2suIEN1cnJlbnRseSB0aGlz IGlzIHVzZWQgdG8gZ3VhcmFudGVlIGEgbW9ub3RvbmljYWxseQorICogaW5jcmVhc2luZyBj b21taXQtdGltZXN0YW1wIGluIExTTiBvcmRlci4KKyAqLworWExvZ1Jlc2VydmVJbnNlcnRI b29rVHlwZQlYTG9nUmVzZXJ2ZUluc2VydEhvb2sgPSBOVUxMOwordm9pZAkJCQkJICAgKlhM b2dSZXNlcnZlSW5zZXJ0SG9va0RhdGEgPSBOVUxMOworYm9vbAkJCQkJCVhMb2dSZXNlcnZl SW5zZXJ0SG9va01vZGlmaWVkUmVjb3JkID0gZmFsc2U7CisKIC8qIEVzdGltYXRlZCBkaXN0 YW5jZSBiZXR3ZWVuIGNoZWNrcG9pbnRzLCBpbiBieXRlcyAqLwogc3RhdGljIGRvdWJsZSBD aGVja1BvaW50RGlzdGFuY2VFc3RpbWF0ZSA9IDA7CiBzdGF0aWMgZG91YmxlIFByZXZDaGVj a1BvaW50RGlzdGFuY2UgPSAwOwpAQCAtNTUxLDYgKzU2MSwxNCBAQCB0eXBlZGVmIHN0cnVj dCBYTG9nQ3RsRGF0YQogCVhMb2dSZWNQdHIJbGFzdEZwd0Rpc2FibGVSZWNQdHI7CiAKIAlz bG9ja190CQlpbmZvX2xjazsJCS8qIGxvY2tzIHNoYXJlZCB2YXJpYWJsZXMgc2hvd24gYWJv dmUgKi8KKworCS8qCisJICogVGhpcyBpcyBvdXIgc2hhcmVkLCBsb2dpY2FsIGNsb2NrIHRo YXQgd2UgdXNlIHRvIGZvcmNlCisJICogY29tbWl0IHRpbWVzdGFtcHMgdG8gYmUgbW9ub3Rv bmljYWxseSBpbmNyZWFzaW5nIGluCisJICogY29tbWl0LUxTTiBvcmRlci4gVGhpcyBpcyBw cm90ZWN0ZWQgYnkgdGhlIFdhbC1pbnNlcnQKKwkgKiBzcGlubG9jay4KKwkgKi8KKwlUaW1l c3RhbXBUeglsYXN0VHJhbnNhY3Rpb25TdG9wVGltZXN0YW1wOwogfSBYTG9nQ3RsRGF0YTsK IAogLyoKQEAgLTcwMCw2ICs3MTgsNyBAQCBzdGF0aWMgdm9pZCBDb3B5WExvZ1JlY29yZFRv V0FMKGludCB3cml0ZV9sZW4sIGJvb2wgaXNMb2dTd2l0Y2gsCiAJCQkJCQkJCVhMb2dSZWNE YXRhICpyZGF0YSwKIAkJCQkJCQkJWExvZ1JlY1B0ciBTdGFydFBvcywgWExvZ1JlY1B0ciBF bmRQb3MsCiAJCQkJCQkJCVRpbWVMaW5lSUQgdGxpKTsKK3N0YXRpYyB2b2lkIFhMb2dSZWNv cmRDb3JyZWN0Q1JDKFhMb2dSZWNEYXRhICpyZGF0YSk7CiBzdGF0aWMgdm9pZCBSZXNlcnZl WExvZ0luc2VydExvY2F0aW9uKGludCBzaXplLCBYTG9nUmVjUHRyICpTdGFydFBvcywKIAkJ CQkJCQkJCSAgWExvZ1JlY1B0ciAqRW5kUG9zLCBYTG9nUmVjUHRyICpQcmV2UHRyKTsKIHN0 YXRpYyBib29sIFJlc2VydmVYTG9nU3dpdGNoKFhMb2dSZWNQdHIgKlN0YXJ0UG9zLCBYTG9n UmVjUHRyICpFbmRQb3MsCkBAIC03NzgsNiArNzk3LDEyIEBAIFhMb2dJbnNlcnRSZWNvcmQo WExvZ1JlY0RhdGEgKnJkYXRhLAogCWlmICghWExvZ0luc2VydEFsbG93ZWQoKSkKIAkJZWxv ZyhFUlJPUiwgImNhbm5vdCBtYWtlIG5ldyBXQUwgZW50cmllcyBkdXJpbmcgcmVjb3Zlcnki KTsKIAorCS8qCisJICogTWFrZSBzdXJlIHRoZSBmbGFnIHRlbGxpbmcgdGhhdCBSZXNlcnZl WExvZy4uLigpIG1vZGlmaWVkIHRoZQorCSAqIHJlY29yZCBpcyBmYWxzZSBhdCB0aGlzIHBv aW50LgorCSAqLworCVhMb2dSZXNlcnZlSW5zZXJ0SG9va01vZGlmaWVkUmVjb3JkID0gZmFs c2U7CisKIAkvKgogCSAqIEdpdmVuIHRoYXQgd2UncmUgbm90IGluIHJlY292ZXJ5LCBJbnNl cnRUaW1lTGluZUlEIGlzIHNldCBhbmQgY2FuJ3QKIAkgKiBjaGFuZ2UsIHNvIHdlIGNhbiBy ZWFkIGl0IHdpdGhvdXQgYSBsb2NrLgpAQCAtOTA2LDYgKzkzMSwxNiBAQCBYTG9nSW5zZXJ0 UmVjb3JkKFhMb2dSZWNEYXRhICpyZGF0YSwKIAogCWlmIChpbnNlcnRlZCkKIAl7CisJCS8q CisJCSAqIElmIG91ciByZXNlcnZlIGhvb2sgbW9kaWZpZWQgdGhlIFhMb2cgUmVjb3JkLAor CQkgKiByZWNhbGN1bGF0ZSB0aGUgQ1JDLgorCQkgKi8KKwkJaWYgKFhMb2dSZXNlcnZlSW5z ZXJ0SG9va01vZGlmaWVkUmVjb3JkKQorCQl7CisJCQlYTG9nUmVjb3JkQ29ycmVjdENSQyhy ZGF0YSk7CisJCQlYTG9nUmVzZXJ2ZUluc2VydEhvb2tNb2RpZmllZFJlY29yZCA9IGZhbHNl OworCQl9CisKIAkJLyoKIAkJICogTm93IHRoYXQgeGxfcHJldiBoYXMgYmVlbiBmaWxsZWQg aW4sIGNhbGN1bGF0ZSBDUkMgb2YgdGhlIHJlY29yZAogCQkgKiBoZWFkZXIuCkBAIC0xMDg2 LDYgKzExMjEsMjUgQEAgWExvZ0luc2VydFJlY29yZChYTG9nUmVjRGF0YSAqcmRhdGEsCiAJ cmV0dXJuIEVuZFBvczsKIH0KIAorLyoKKyAqIEZ1bmN0aW9uIHRvIHJlY2FsY3VsYXRlIHRo ZSBXQUwgUmVjb3JkJ3MgQ1JDIGluIGNhc2UgaXQgd2FzCisgKiBhbHRlcmVkIGR1cmluZyB0 aGUgY2FsbGJhY2sgZnJvbSBSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKCkuCisgKi8KK3N0 YXRpYyB2b2lkCitYTG9nUmVjb3JkQ29ycmVjdENSQyhYTG9nUmVjRGF0YSAqcmRhdGEpCit7 CisJWExvZ1JlY0RhdGEgICAgKnJkdDsKKwlYTG9nUmVjb3JkCSAgICpyZWNoZHIgPSAoWExv Z1JlY29yZCAqKXJkYXRhLT5kYXRhOworCXBnX2NyYzMyYyAgICAgICByZGF0YV9jcmM7CisK KwlJTklUX0NSQzMyQyhyZGF0YV9jcmMpOworCUNPTVBfQ1JDMzJDKHJkYXRhX2NyYywgcmRh dGEtPmRhdGEgKyBTaXplT2ZYTG9nUmVjb3JkLCByZGF0YS0+bGVuIC0gU2l6ZU9mWExvZ1Jl Y29yZCk7CisJZm9yIChyZHQgPSByZGF0YS0+bmV4dDsgcmR0ICE9IE5VTEw7IHJkdCA9IHJk dC0+bmV4dCkKKwkJQ09NUF9DUkMzMkMocmRhdGFfY3JjLCByZHQtPmRhdGEsIHJkdC0+bGVu KTsKKworCXJlY2hkci0+eGxfY3JjID0gcmRhdGFfY3JjOworfQorCiAvKgogICogUmVzZXJ2 ZXMgdGhlIHJpZ2h0IGFtb3VudCBvZiBzcGFjZSBmb3IgYSByZWNvcmQgb2YgZ2l2ZW4gc2l6 ZSBmcm9tIHRoZSBXQUwuCiAgKiAqU3RhcnRQb3MgaXMgc2V0IHRvIHRoZSBiZWdpbm5pbmcg b2YgdGhlIHJlc2VydmVkIHNlY3Rpb24sICpFbmRQb3MgdG8KQEAgLTExMzAsNiArMTE4NCwx MiBAQCBSZXNlcnZlWExvZ0luc2VydExvY2F0aW9uKGludCBzaXplLCBYTG9nUmVjUHRyICpT dGFydFBvcywgWExvZ1JlY1B0ciAqRW5kUG9zLAogCSAqLwogCVNwaW5Mb2NrQWNxdWlyZSgm SW5zZXJ0LT5pbnNlcnRwb3NfbGNrKTsKIAorCS8qCisJICogSWYgc2V0IGNhbGwgdGhlIFhM b2dSZXNlcnZlSW5zZXJ0SG9vayBmdW5jdGlvbgorCSAqLworCWlmIChYTG9nUmVzZXJ2ZUlu c2VydEhvb2sgIT0gTlVMTCkKKwkJWExvZ1Jlc2VydmVJbnNlcnRIb29rKFhMb2dSZXNlcnZl SW5zZXJ0SG9va0RhdGEpOworCiAJc3RhcnRieXRlcG9zID0gSW5zZXJ0LT5DdXJyQnl0ZVBv czsKIAllbmRieXRlcG9zID0gc3RhcnRieXRlcG9zICsgc2l6ZTsKIAlwcmV2Ynl0ZXBvcyA9 IEluc2VydC0+UHJldkJ5dGVQb3M7CkBAIC0xMTg5LDYgKzEyNDksMTIgQEAgUmVzZXJ2ZVhM b2dTd2l0Y2goWExvZ1JlY1B0ciAqU3RhcnRQb3MsIFhMb2dSZWNQdHIgKkVuZFBvcywgWExv Z1JlY1B0ciAqUHJldlB0cikKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAorCS8qCisJICogSWYg c2V0IGNhbGwgdGhlIFhMb2dSZXNlcnZlSW5zZXJ0SG9vayBmdW5jdGlvbgorCSAqLworCWlm IChYTG9nUmVzZXJ2ZUluc2VydEhvb2sgIT0gTlVMTCkKKwkJWExvZ1Jlc2VydmVJbnNlcnRI b29rKFhMb2dSZXNlcnZlSW5zZXJ0SG9va0RhdGEpOworCiAJZW5kYnl0ZXBvcyA9IHN0YXJ0 Ynl0ZXBvcyArIHNpemU7CiAJcHJldmJ5dGVwb3MgPSBJbnNlcnQtPlByZXZCeXRlUG9zOwog CkBAIC05NTEwLDMgKzk1NzYsMTkgQEAgU2V0V2FsV3JpdGVyU2xlZXBpbmcoYm9vbCBzbGVl cGluZykKIAlYTG9nQ3RsLT5XYWxXcml0ZXJTbGVlcGluZyA9IHNsZWVwaW5nOwogCVNwaW5M b2NrUmVsZWFzZSgmWExvZ0N0bC0+aW5mb19sY2spOwogfQorCisvKgorICogR2V0L3NldCB0 aGUgbGFzdC10cmFuc2FjdGlvbi1zdG9wLXRpbWVzdGFtcCBpbiBzaGFyZWQgbWVtb3J5Lgor ICogQ2FsbGVyIG11c3QgZW5zdXJlIHRoYXQgdGhlIFdBTC1pbnNlcnQgc3BpbmxvY2sgaXMg aGVsZC4KKyAqLworZXh0ZXJuIFRpbWVzdGFtcFR6CitYTG9nR2V0TGFzdFRyYW5zYWN0aW9u U3RvcFRpbWVzdGFtcCh2b2lkKQoreworCXJldHVybiBYTG9nQ3RsLT5sYXN0VHJhbnNhY3Rp b25TdG9wVGltZXN0YW1wOworfQorCitleHRlcm4gdm9pZAorWExvZ1NldExhc3RUcmFuc2Fj dGlvblN0b3BUaW1lc3RhbXAoVGltZXN0YW1wVHogdHMpCit7CisJWExvZ0N0bC0+bGFzdFRy YW5zYWN0aW9uU3RvcFRpbWVzdGFtcCA9IHRzOworfQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL3hsb2cuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9nLmgKaW5kZXggMzRh ZDQ2YzA2Ny4uMTg3ZDFkYzliYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3hs b2cuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZy5oCkBAIC0xOTksNiArMTk5LDE3 IEBAIHR5cGVkZWYgZW51bSBXQUxBdmFpbGFiaWxpdHkKIHN0cnVjdCBYTG9nUmVjRGF0YTsK IHN0cnVjdCBYTG9nUmVhZGVyU3RhdGU7CiAKKy8qCisgKiBIb29rIGNhbGxlZCBmcm9tIGlu c2lkZSBvZiBob2xkaW5nIHRoZSBsb2NrIHRoYXQgZGV0ZXJtaW5lcworICogdGhlIExTTiBv cmRlciBvZiBXQUwgcmVjb3Jkcy4gV2UgY3VycmVudGx5IHVzZSB0aGlzIHRvIGVuc3VyZSB0 aGF0CisgKiBjb21taXQgdGltZXN0YW1wcyBhcmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5n IGluIHRoZWlyIExTTgorICogb3JkZXIuCisgKi8KK3R5cGVkZWYgdm9pZCAoKlhMb2dSZXNl cnZlSW5zZXJ0SG9va1R5cGUpKHZvaWQgKmRhdGEpOworZXh0ZXJuIFhMb2dSZXNlcnZlSW5z ZXJ0SG9va1R5cGUgWExvZ1Jlc2VydmVJbnNlcnRIb29rOworZXh0ZXJuIHZvaWQgKlhMb2dS ZXNlcnZlSW5zZXJ0SG9va0RhdGE7CitleHRlcm4gYm9vbCBYTG9nUmVzZXJ2ZUluc2VydEhv b2tNb2RpZmllZFJlY29yZDsKKwogZXh0ZXJuIFhMb2dSZWNQdHIgWExvZ0luc2VydFJlY29y ZChzdHJ1Y3QgWExvZ1JlY0RhdGEgKnJkYXRhLAogCQkJCQkJCQkgICBYTG9nUmVjUHRyIGZw d19sc24sCiAJCQkJCQkJCSAgIHVpbnQ4IGZsYWdzLApAQCAtMjcwLDYgKzI4MSwxMyBAQCBl eHRlcm4gdm9pZCBTZXRJbnN0YWxsWExvZ0ZpbGVTZWdtZW50QWN0aXZlKHZvaWQpOwogZXh0 ZXJuIGJvb2wgSXNJbnN0YWxsWExvZ0ZpbGVTZWdtZW50QWN0aXZlKHZvaWQpOwogZXh0ZXJu IHZvaWQgWExvZ1NodXRkb3duV2FsUmN2KHZvaWQpOwogCisvKgorICogRnVuY3Rpb25zIHRv IGFjY2VzcyB0aGUgbGFzdCBjb21taXQgTGFtcG9ydCB0aW1lc3RhbXAgaGVsZCBpbgorICog WExvZ0N0bC4KKyAqLworZXh0ZXJuIFRpbWVzdGFtcFR6IFhMb2dHZXRMYXN0VHJhbnNhY3Rp b25TdG9wVGltZXN0YW1wKHZvaWQpOworZXh0ZXJuIHZvaWQgWExvZ1NldExhc3RUcmFuc2Fj dGlvblN0b3BUaW1lc3RhbXAoVGltZXN0YW1wVHogdHopOworCiAvKgogICogUm91dGluZXMg dG8gc3RhcnQsIHN0b3AsIGFuZCBnZXQgc3RhdHVzIG9mIGEgYmFzZSBiYWNrdXAuCiAgKi8K --------------cmiNTefrkLs5mP8wtmQ6h0qC--