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 1w3GwJ-00148q-2r for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 17:13:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w3GwI-001McM-1A for pgsql-hackers@arkaria.postgresql.org; Thu, 19 Mar 2026 17:13:42 +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.96) (envelope-from ) id 1w3GwI-001McC-02 for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 17:13:42 +0000 Received: from mail-oi1-x22a.google.com ([2607:f8b0:4864:20::22a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w3GwF-000000002Tp-2aMr for pgsql-hackers@lists.postgresql.org; Thu, 19 Mar 2026 17:13:42 +0000 Received: by mail-oi1-x22a.google.com with SMTP id 5614622812f47-466f1c3c627so832427b6e.1 for ; Thu, 19 Mar 2026 10:13:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773940418; cv=none; d=google.com; s=arc-20240605; b=iF7Ycq1LyDr4jtFWLa9BuEOULZiEHdfHBFAFKcOMNUXOkg1rfW2PPnMhtmGhI2Jy2f KI/jX3jegXDyuQo3BCpVoUxaB/YYlbC+K7xf/a9VX63xvhif1NIdYLlinSFmUbTsYbIS 0loMhUVAaC+w6O9PLbPqzD1Q5Fh7S6UwmtL8lrsZb6VnpR0RIAxSjVEZp37Gu675DS9G q4Yd6q0nJL//hwhXfiUjUpVrGUGr35ccFPo/yCz6XLwHkeG7JMx7IZuRc05xlt9jHr/w VIYDAGYjs0sg1bGhlR9Uy9tDvh1Qv1VscZLyKnsDqbY3MAB5J9yeYr2OTyRd7hahj9WN Fk8w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=UadFptL3gsdpgBw9dKrbD56QThYt6+cX2E0bYtpdE2E=; fh=SprTjyyUNMFOaPK7zUpaC1EEovCYhXioP7Zs2WMpltw=; b=JD9ENVC/x0lW1DsC1uOkc0evHxPT8QxNjq2jzHge8xgw0ocPaCitAnZ80Gqr9ABMwA 2ESeBEE0xcEURnjhXrlnDbVAA5gw2+1E9pXXEF6AaLNTZOA9OejbtkZPy5SgCGyQnt4J m0zTODX9Jvabkqmt8CwfU49KmPm7iKaeTwi4o2GWF2dt1N+r7R4L+BfbnhPaNg+VuTSG iTlN3YLuCRNayNEP/BkJmYx8b/1cuGMVQr/h87nchqIqTVFhRc3lO7SKhxLuczIz3qUy sY7FD5QEYyobO0GHKbhwvKjf4nJS9pdV3MSYHBmR8Fm/X6KZJlsR9VMG0sVZAobItLpy jc8Q==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773940418; x=1774545218; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=UadFptL3gsdpgBw9dKrbD56QThYt6+cX2E0bYtpdE2E=; b=cYPf5+pZygPpcdh8XC2ar2nMa6D7PL/RGV7Y+UlMbeN9KLurK80PVbBp+o5vsA/s1T bYoPQL6GGCj2Oj60TTbn7+Lp4ctf1VEM/qQj1q6YfyPIja5lpys0lO09WyfUNiCwD6Hy mCdM+jiZedXc7wAStQAnkDTTdpRMrosJV8nRBTriFWuDvIP2J1j6otV1/Seh7Bjqu1YJ +Q04eBx7vh4hz+iA2PDIF0ZAqwGAQIECK5Rf+GwI1VpF6Qng5OAwhe3MG29eeV9cEwJJ N6ODBceOUKAvRZnTjEofzoqyOx76Nk+tqhzqjzB0P1BehNazqwne0Nu2aFwYg6s1ABwJ FCCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773940418; x=1774545218; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=UadFptL3gsdpgBw9dKrbD56QThYt6+cX2E0bYtpdE2E=; b=nU6fw+okPAgngKPzo40UKk9A7D+O2Pm8M4uT00LczsmWlNvQYsqTSMsui840toQVkj y+2br4cRaLQqCxOgV/Bcqr50THHzSPSAzfghC48IyTOUDOb3tmzNayG+W0ptciKmtPCw ls0ZwXvl6ariSNyZmtDtD8bvAvNd/BZ/yKYOXmXnovw4D6DqaEEo8nnY3iSno4eOmiWT +ERtwUrrBt7UGSS5e6ae/BxarmetHMu0QmLIFNMbrbADE+TxQVHuJs41CagP+Ikzh9pV +jwVnKX3Fji0K0UpCX/QP8wd51LcfIQUly4DMFRs3hunU49QYrAQSSbWZSy38cN8dCs5 BwnQ== X-Gm-Message-State: AOJu0YyDgN78yS4QuduuASKbxcEBw+KcGI35rMdLIi8EygupSU3s4336 ZBjn5yg01AFnc9iZDLu9Xs7e3oh+CozVSSv5rxEWTjJssJiaeIiEjSGCgsC3p8dZGBkUkvnFc8o Dx2mx/NyMC0+sOV5iO+Y1r9TSYLWL4cM= X-Gm-Gg: ATEYQzzmaLDxgC8ECfo0jJtGCCD3kBjhelSn6YiH6IsvxVaTOxKe5MlOfDotZYFzi++ EXcZ5JMuJ0d7IkxCOHcbU++JSuWBrV0+VclpqxNo+ZVbF7vQ7S8cR+NbWIRagmDVv9FZvG7NrFG n7Yp/2keiY1qmVI4rjiQiWL25apd1dxNrujKa8+O5LTVXnL8o3YbFqb7RCBcxsKLJYQRlEu8Fw6 ZmofZU+rSz87x+vgy0XA90yV8R3J+IkjklMwUpjaAUzW46uZN3Bgr/Y+WuOjKTnH4q2E9awQB57 UT8/sJDdv8WfYT9FmTBw1SRD12S5JLG326nvXlUU1A== X-Received: by 2002:a05:6820:611:b0:67b:b368:bef0 with SMTP id 006d021491bc7-67c22dc6434mr233483eaf.1.1773940418201; Thu, 19 Mar 2026 10:13:38 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Fujii Masao Date: Fri, 20 Mar 2026 02:13:25 +0900 X-Gm-Features: AaiRm53YOT_lSmFyYxAs8TyIkvB0-41NNtdEMsu4hoLDKatxwnIj8HkowUl89sE Message-ID: Subject: Re: pg_stat_replication.*_lag sometimes shows NULL during active replication To: Shinya Kato Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="0000000000007b2564064d63b03a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007b2564064d63b03a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 19, 2026 at 10:58=E2=80=AFPM Shinya Kato wrote: > > On Tue, Mar 17, 2026 at 11:00=E2=80=AFAM Fujii Masao wrote: > > > > On Mon, Mar 16, 2026 at 9:26=E2=80=AFAM Shinya Kato wrote: > > > Thank you for the v4 patch. I think this approach is better than mine= . > > > I tested the patch and confirmed that the issue no longer reproduces > > > with physical replication. However, with logical replication, the lag > > > columns in pg_stat_replication still show NULL periodically at > > > wal_receiver_status_interval, since send_feedback() in worker.c can > > > still send duplicate positions. > > > > I was thinking that if a feedback message triggered by > > wal_receiver_status_interval has the same LSNs as the previous message, > > it's expected for the lag columns to become NULL. But you see it differ= ently, > > don't you? Sorry, I failed to understand your point... > > Sorry for the confusion. I ran a script inserting one row every 0.5 > seconds under logical replication and confirmed that NULL still > appears in the lag columns even while replication is actively running. > I was initially mistaken that this was tied to > wal_receiver_status_interval timing =E2=80=94 that turned out to be unrel= ated. > > I haven't had time to investigate further, but my current impression > is that the existing approach may not be sufficient for logical > replication. Thanks for the clarification! I understand your point now. I think the issue occurs when the positions in the first message point to the same LSN (e.g., 0/030D5230), and the second message reports the same bu= t larger LSN (e.g., 0/030D52E0). I've updated the patch to address this. It removes fullyAppliedLastTime, tracks the positions from the previous reply, and clears the lag values onl= y when the positions remain unchanged across two consecutive messages. Patch attached. Could you test and review this updated patch? Regards, --=20 Fujii Masao --0000000000007b2564064d63b03a Content-Type: application/octet-stream; name="v5-0001-Avoid-sending-duplicate-WAL-locations-in-standby-.patch" Content-Disposition: attachment; filename="v5-0001-Avoid-sending-duplicate-WAL-locations-in-standby-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmxqbakj0 RnJvbSBmODczMmZjZjY3MzQ3OGFlZjU5MDc4MTdjYTMzODRkOWM0OGRjZWRhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBGdWppaSBNYXNhbyA8ZnVqaWlAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IEZyaSwgMjAgTWFyIDIwMjYgMDA6MzQ6MDYgKzA5MDAKU3ViamVjdDogW1BBVENIIHY1XSBB dm9pZCBzZW5kaW5nIGR1cGxpY2F0ZSBXQUwgbG9jYXRpb25zIGluIHN0YW5kYnkgc3RhdHVzCiBy ZXBsaWVzCgpQcmV2aW91c2x5LCB3aGVuIHRoZSBzdGFydHVwIHByb2Nlc3MgYXBwbGllZCBXQUwg YW5kIHJlcXVlc3RlZCB3YWxyZWNlaXZlcgp0byBzZW5kIGFuIGFwcGx5IG5vdGlmaWNhdGlvbiB0 byB0aGUgcHJpbWFyeSwgd2FscmVjZWl2ZXIgc2VudCBhIHN0YXR1cyByZXBseQp1bmNvbmRpdGlv bmFsbHksIGV2ZW4gaWYgdGhlIFdBTCBsb2NhdGlvbnMgaGFkIG5vdCBhZHZhbmNlZCBzaW5jZQp0 aGUgcHJldmlvdXMgdXBkYXRlLgoKQXMgYSByZXN1bHQsIHRoZSBzdGFuZGJ5IGNvdWxkIHNlbmQg dHdvIGNvbnNlY3V0aXZlIHN0YXR1cyByZXBseSBtZXNzYWdlcwp3aXRoIGlkZW50aWNhbCBXQUwg bG9jYXRpb25zIGV2ZW4gdGhvdWdoIHdhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwgaGFkCm5v dCB5ZXQgZWxhcHNlZC4gVGhpcyBjb3VsZCB1bmV4cGVjdGVkbHkgcmVzZXQgdGhlIHJlcG9ydGVk IHJlcGxpY2F0aW9uIGxhZywKbWFraW5nIGl0IGRpZmZpY3VsdCBmb3IgdXNlcnMgdG8gbW9uaXRv ciBsYWcuIFRoZSBzZWNvbmQgbWVzc2FnZSB3YXMgYWxzbwp1bm5lY2Vzc2FyeSBiZWNhdXNlIGl0 IHJlcG9ydGVkIG5vIHByb2dyZXNzLgoKVGhpcyBjb21taXQgdXBkYXRlcyB3YWxyZWNlaXZlciB0 byBzZW5kIGEgcmVwbHkgb25seSB3aGVuIHRoZSBhcHBseSBsb2NhdGlvbgpoYXMgYWR2YW5jZWQg c2luY2UgdGhlIGxhc3Qgc3RhdHVzIHVwZGF0ZSwgZXZlbiB3aGVuIHRoZSBzdGFydHVwIHByb2Nl c3MKcmVxdWVzdHMgYSBub3RpZmljYXRpb24uCi0tLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v d2FscmVjZWl2ZXIuYyB8IDcwICsrKysrKysrKysrKysrKystLS0tLS0tLS0tLQogc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgICB8IDM1ICsrKysrKysrLS0tLS0tCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIHwgIDQgKy0KIDMgZmlsZXMgY2hhbmdlZCwg NjIgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dh bHJlY2VpdmVyLmMKaW5kZXggZmFiZTNjNzMwMzQuLmY1ZDUzNzllZGM3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL3dhbHJlY2VpdmVyLmMKQEAgLTE0Myw3ICsxNDMsNyBAQCBzdGF0aWMgdm9pZCBY TG9nV2FsUmN2V3JpdGUoY2hhciAqYnVmLCBTaXplIG5ieXRlcywgWExvZ1JlY1B0ciByZWNwdHIs CiAJCQkJCQkJVGltZUxpbmVJRCB0bGkpOwogc3RhdGljIHZvaWQgWExvZ1dhbFJjdkZsdXNoKGJv b2wgZHlpbmcsIFRpbWVMaW5lSUQgdGxpKTsKIHN0YXRpYyB2b2lkIFhMb2dXYWxSY3ZDbG9zZShY TG9nUmVjUHRyIHJlY3B0ciwgVGltZUxpbmVJRCB0bGkpOwotc3RhdGljIHZvaWQgWExvZ1dhbFJj dlNlbmRSZXBseShib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSk7CitzdGF0aWMgdm9pZCBY TG9nV2FsUmN2U2VuZFJlcGx5KGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJlcGx5LCBib29sIHJl cGx5QXBwbHkpOwogc3RhdGljIHZvaWQgWExvZ1dhbFJjdlNlbmRIU0ZlZWRiYWNrKGJvb2wgaW1t ZWQpOwogc3RhdGljIHZvaWQgUHJvY2Vzc1dhbFNuZHJNZXNzYWdlKFhMb2dSZWNQdHIgd2FsRW5k LCBUaW1lc3RhbXBUeiBzZW5kVGltZSk7CiBzdGF0aWMgdm9pZCBXYWxSY3ZDb21wdXRlTmV4dFdh a2V1cChXYWxSY3ZXYWtldXBSZWFzb24gcmVhc29uLCBUaW1lc3RhbXBUeiBub3cpOwpAQCAtNDE3 LDcgKzQxNyw3IEBAIFdhbFJlY2VpdmVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNp emVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJCVdhbFJjdkNvbXB1dGVOZXh0V2FrZXVwKGksIG5v dyk7CiAKIAkJCS8qIFNlbmQgaW5pdGlhbCByZXBseS9mZWVkYmFjayBtZXNzYWdlcy4gKi8KLQkJ CVhMb2dXYWxSY3ZTZW5kUmVwbHkodHJ1ZSwgZmFsc2UpOworCQkJWExvZ1dhbFJjdlNlbmRSZXBs eSh0cnVlLCBmYWxzZSwgZmFsc2UpOwogCQkJWExvZ1dhbFJjdlNlbmRIU0ZlZWRiYWNrKHRydWUp OwogCiAJCQkvKiBMb29wIHVudGlsIGVuZC1vZi1zdHJlYW1pbmcgb3IgZXJyb3IgKi8KQEAgLTQ5 Myw3ICs0OTMsNyBAQCBXYWxSZWNlaXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBz aXplX3Qgc3RhcnR1cF9kYXRhX2xlbikKIAkJCQkJfQogCiAJCQkJCS8qIExldCB0aGUgcHJpbWFy eSBrbm93IHRoYXQgd2UgcmVjZWl2ZWQgc29tZSBkYXRhLiAqLwotCQkJCQlYTG9nV2FsUmN2U2Vu ZFJlcGx5KGZhbHNlLCBmYWxzZSk7CisJCQkJCVhMb2dXYWxSY3ZTZW5kUmVwbHkoZmFsc2UsIGZh bHNlLCBmYWxzZSk7CiAKIAkJCQkJLyoKIAkJCQkJICogSWYgd2UndmUgd3JpdHRlbiBzb21lIHJl Y29yZHMsIGZsdXNoIHRoZW0gdG8gZGlzayBhbmQKQEAgLTUzOSw3ICs1MzksNyBAQCBXYWxSZWNl aXZlck1haW4oY29uc3Qgdm9pZCAqc3RhcnR1cF9kYXRhLCBzaXplX3Qgc3RhcnR1cF9kYXRhX2xl bikKIAkJCQkJUmVzZXRMYXRjaChNeUxhdGNoKTsKIAkJCQkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMo KTsKIAotCQkJCQlpZiAod2FscmN2LT5mb3JjZV9yZXBseSkKKwkJCQkJaWYgKHdhbHJjdi0+cmVw bHlfYXBwbHkpCiAJCQkJCXsKIAkJCQkJCS8qCiAJCQkJCQkgKiBUaGUgcmVjb3ZlcnkgcHJvY2Vz cyBoYXMgYXNrZWQgdXMgdG8gc2VuZCBhcHBseQpAQCAtNTQ3LDkgKzU0Nyw5IEBAIFdhbFJlY2Vp dmVyTWFpbihjb25zdCB2b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVu KQogCQkJCQkJICogZmFsc2UgaW4gc2hhcmVkIG1lbW9yeSBiZWZvcmUgc2VuZGluZyB0aGUgcmVw bHksIHNvCiAJCQkJCQkgKiB3ZSBkb24ndCBtaXNzIGEgbmV3IHJlcXVlc3QgZm9yIGEgcmVwbHku CiAJCQkJCQkgKi8KLQkJCQkJCXdhbHJjdi0+Zm9yY2VfcmVwbHkgPSBmYWxzZTsKKwkJCQkJCXdh bHJjdi0+cmVwbHlfYXBwbHkgPSBmYWxzZTsKIAkJCQkJCXBnX21lbW9yeV9iYXJyaWVyKCk7Ci0J CQkJCQlYTG9nV2FsUmN2U2VuZFJlcGx5KHRydWUsIGZhbHNlKTsKKwkJCQkJCVhMb2dXYWxSY3ZT ZW5kUmVwbHkoZmFsc2UsIGZhbHNlLCB0cnVlKTsKIAkJCQkJfQogCQkJCX0KIAkJCQlpZiAocmMg JiBXTF9USU1FT1VUKQpAQCAtNTk1LDcgKzU5NSw3IEBAIFdhbFJlY2VpdmVyTWFpbihjb25zdCB2 b2lkICpzdGFydHVwX2RhdGEsIHNpemVfdCBzdGFydHVwX2RhdGFfbGVuKQogCQkJCQkJd2FrZXVw W1dBTFJDVl9XQUtFVVBfUElOR10gPSBUSU1FU1RBTVBfSU5GSU5JVFk7CiAJCQkJCX0KIAotCQkJ CQlYTG9nV2FsUmN2U2VuZFJlcGx5KHJlcXVlc3RSZXBseSwgcmVxdWVzdFJlcGx5KTsKKwkJCQkJ WExvZ1dhbFJjdlNlbmRSZXBseShyZXF1ZXN0UmVwbHksIHJlcXVlc3RSZXBseSwgZmFsc2UpOwog CQkJCQlYTG9nV2FsUmN2U2VuZEhTRmVlZGJhY2soZmFsc2UpOwogCQkJCX0KIAkJCX0KQEAgLTg4 Niw3ICs4ODYsNyBAQCBYTG9nV2FsUmN2UHJvY2Vzc01zZyh1bnNpZ25lZCBjaGFyIHR5cGUsIGNo YXIgKmJ1ZiwgU2l6ZSBsZW4sIFRpbWVMaW5lSUQgdGxpKQogCiAJCQkJLyogSWYgdGhlIHByaW1h cnkgcmVxdWVzdGVkIGEgcmVwbHksIHNlbmQgb25lIGltbWVkaWF0ZWx5ICovCiAJCQkJaWYgKHJl cGx5UmVxdWVzdGVkKQotCQkJCQlYTG9nV2FsUmN2U2VuZFJlcGx5KHRydWUsIGZhbHNlKTsKKwkJ CQkJWExvZ1dhbFJjdlNlbmRSZXBseSh0cnVlLCBmYWxzZSwgZmFsc2UpOwogCQkJCWJyZWFrOwog CQkJfQogCQlkZWZhdWx0OgpAQCAtMTA1Myw3ICsxMDUzLDcgQEAgWExvZ1dhbFJjdkZsdXNoKGJv b2wgZHlpbmcsIFRpbWVMaW5lSUQgdGxpKQogCQkvKiBBbHNvIGxldCB0aGUgcHJpbWFyeSBrbm93 IHRoYXQgd2UgbWFkZSBzb21lIHByb2dyZXNzICovCiAJCWlmICghZHlpbmcpCiAJCXsKLQkJCVhM b2dXYWxSY3ZTZW5kUmVwbHkoZmFsc2UsIGZhbHNlKTsKKwkJCVhMb2dXYWxSY3ZTZW5kUmVwbHko ZmFsc2UsIGZhbHNlLCBmYWxzZSk7CiAJCQlYTG9nV2FsUmN2U2VuZEhTRmVlZGJhY2soZmFsc2Up OwogCQl9CiAJfQpAQCAtMTEwNywyNCArMTEwNywzMyBAQCBYTG9nV2FsUmN2Q2xvc2UoWExvZ1Jl Y1B0ciByZWNwdHIsIFRpbWVMaW5lSUQgdGxpKQogfQogCiAvKgotICogU2VuZCByZXBseSBtZXNz YWdlIHRvIHByaW1hcnksIGluZGljYXRpbmcgb3VyIGN1cnJlbnQgV0FMIGxvY2F0aW9ucywgb2xk ZXN0Ci0gKiB4bWluIGFuZCB0aGUgY3VycmVudCB0aW1lLgorICogU2VuZCByZXBseSBtZXNzYWdl IHRvIHByaW1hcnksIGluZGljYXRpbmcgb3VyIGN1cnJlbnQgV0FMIGxvY2F0aW9ucyBhbmQKKyAq IHRpbWUuCiAgKgotICogSWYgJ2ZvcmNlJyBpcyBub3Qgc2V0LCB0aGUgbWVzc2FnZSBpcyBvbmx5 IHNlbnQgaWYgZW5vdWdoIHRpbWUgaGFzCi0gKiBwYXNzZWQgc2luY2UgbGFzdCBzdGF0dXMgdXBk YXRlIHRvIHJlYWNoIHdhbF9yZWNlaXZlcl9zdGF0dXNfaW50ZXJ2YWwuCi0gKiBJZiB3YWxfcmVj ZWl2ZXJfc3RhdHVzX2ludGVydmFsIGlzIGRpc2FibGVkIGFsdG9nZXRoZXIgYW5kICdmb3JjZScg aXMKLSAqIGZhbHNlLCB0aGlzIGlzIGEgbm8tb3AuCisgKiBUaGUgbWVzc2FnZSBpcyBzZW50IGlm ICdmb3JjZScgaXMgc2V0LCBpZiBlbm91Z2ggdGltZSBoYXMgcGFzc2VkIHNpbmNlIHRoZQorICog bGFzdCB1cGRhdGUgdG8gcmVhY2ggd2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbCwgb3IgaWYg V0FMIGxvY2F0aW9ucyBoYXZlCisgKiBhZHZhbmNlZCBzaW5jZSB0aGUgcHJldmlvdXMgc3RhdHVz IHVwZGF0ZS4gSWYgd2FsX3JlY2VpdmVyX3N0YXR1c19pbnRlcnZhbAorICogaXMgZGlzYWJsZWQg YW5kICdmb3JjZScgaXMgZmFsc2UsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3RoaW5nLiBTZXQgJ2Zv cmNlJyB0bworICogc2VuZCB0aGUgbWVzc2FnZSB1bmNvbmRpdGlvbmFsbHkuCisgKgorICogU2V0 ICdyZXBseUFwcGx5JyB3aGVuIHRoZSBhcHBseSBsb2NhdGlvbiBpcyBleHBlY3RlZCB0byBoYXZl IGFkdmFuY2VkIGZyb20gdGhlCisgKiBwcmV2aW91cyB1cGRhdGUgKGZvciBleGFtcGxlLCB3aGVu IHRoZSBzdGFydHVwIHByb2Nlc3MgcmVxdWVzdHMgYW4gYXBwbHkKKyAqIG5vdGlmaWNhdGlvbiB0 byBiZSBzZW50IHRvIHRoZSBwcmltYXJ5KS4gSW4gdGhhdCBjYXNlLCB0aGUgd3JpdGUsIGZsdXNo LCBhbmQKKyAqIGFwcGx5IGxvY2F0aW9ucyBhcmUgY29tcGFyZWQgdG8gZGV0ZXJtaW5lIHdoZXRo ZXIgV0FMIGhhcyBhZHZhbmNlZC4KKyAqIE90aGVyd2lzZSB0aGUgYXBwbHkgbG9jYXRpb24gaXMg YXNzdW1lZCB1bmNoYW5nZWQgYW5kIGlzIG5vdCBjaGVja2VkLAorICogc28gb25seSB0aGUgd3Jp dGUgYW5kIGZsdXNoIGxvY2F0aW9ucyBhcmUgY29uc2lkZXJlZC4KICAqCiAgKiBJZiAncmVxdWVz dFJlcGx5JyBpcyB0cnVlLCByZXF1ZXN0cyB0aGUgc2VydmVyIHRvIHJlcGx5IGltbWVkaWF0ZWx5 IHVwb24KICAqIHJlY2VpdmluZyB0aGlzIG1lc3NhZ2UuIFRoaXMgaXMgdXNlZCBmb3IgaGVhcnRi ZWF0cywgd2hlbiBhcHByb2FjaGluZwogICogd2FsX3JlY2VpdmVyX3RpbWVvdXQuCiAgKi8KIHN0 YXRpYyB2b2lkCi1YTG9nV2FsUmN2U2VuZFJlcGx5KGJvb2wgZm9yY2UsIGJvb2wgcmVxdWVzdFJl cGx5KQorWExvZ1dhbFJjdlNlbmRSZXBseShib29sIGZvcmNlLCBib29sIHJlcXVlc3RSZXBseSwg Ym9vbCByZXBseUFwcGx5KQogewogCXN0YXRpYyBYTG9nUmVjUHRyIHdyaXRlUHRyID0gSW52YWxp ZFhMb2dSZWNQdHI7CiAJc3RhdGljIFhMb2dSZWNQdHIgZmx1c2hQdHIgPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKLQlYTG9nUmVjUHRyCWFwcGx5UHRyOworCXN0YXRpYyBYTG9nUmVjUHRyIGFwcGx5UHRy ID0gSW52YWxpZFhMb2dSZWNQdHI7CisJWExvZ1JlY1B0cglsYXRlc3RBcHBseVB0ciA9IEludmFs aWRYTG9nUmVjUHRyOwogCVRpbWVzdGFtcFR6IG5vdzsKIAogCS8qCkBAIC0xMTQwLDE3ICsxMTQ5 LDE5IEBAIFhMb2dXYWxSY3ZTZW5kUmVwbHkoYm9vbCBmb3JjZSwgYm9vbCByZXF1ZXN0UmVwbHkp CiAJLyoKIAkgKiBXZSBjYW4gY29tcGFyZSB0aGUgd3JpdGUgYW5kIGZsdXNoIHBvc2l0aW9ucyB0 byB0aGUgbGFzdCBtZXNzYWdlIHdlCiAJICogc2VudCB3aXRob3V0IHRha2luZyBhbnkgbG9jaywg YnV0IHRoZSBhcHBseSBwb3NpdGlvbiByZXF1aXJlcyBhIHNwaW4KLQkgKiBsb2NrLCBzbyB3ZSBk b24ndCBjaGVjayB0aGF0IHVubGVzcyBzb21ldGhpbmcgZWxzZSBoYXMgY2hhbmdlZCBvciAxMAot CSAqIHNlY29uZHMgaGF2ZSBwYXNzZWQuICBUaGlzIG1lYW5zIHRoYXQgdGhlIGFwcGx5IFdBTCBs b2NhdGlvbiB3aWxsCi0JICogYXBwZWFyLCBmcm9tIHRoZSBwcmltYXJ5J3MgcG9pbnQgb2Ygdmll dywgdG8gbGFnIHNsaWdodGx5LCBidXQgc2luY2UKLQkgKiB0aGlzIGlzIG9ubHkgZm9yIHJlcG9y dGluZyBwdXJwb3NlcyBhbmQgb25seSBvbiBpZGxlIHN5c3RlbXMsIHRoYXQncwotCSAqIHByb2Jh Ymx5IE9LLgorCSAqIGxvY2ssIHNvIHdlIGRvbid0IGNoZWNrIHRoYXQgdW5sZXNzIGl0IGlzIGV4 cGVjdGVkIHRvIGFkdmFuY2Ugc2luY2UgdGhlCisJICogcHJldmlzb3UgdXBkYXRlLCBpLmUuLCB3 aGVuICdyZXBseUFwcGx5JyBpcyB0cnVlLgogCSAqLwotCWlmICghZm9yY2UKLQkJJiYgd3JpdGVQ dHIgPT0gTG9nc3RyZWFtUmVzdWx0LldyaXRlCi0JCSYmIGZsdXNoUHRyID09IExvZ3N0cmVhbVJl c3VsdC5GbHVzaAotCQkmJiBub3cgPCB3YWtldXBbV0FMUkNWX1dBS0VVUF9SRVBMWV0pCi0JCXJl dHVybjsKKwlpZiAoIWZvcmNlICYmIG5vdyA8IHdha2V1cFtXQUxSQ1ZfV0FLRVVQX1JFUExZXSkK Kwl7CisJCWlmIChyZXBseUFwcGx5KQorCQkJbGF0ZXN0QXBwbHlQdHIgPSBHZXRYTG9nUmVwbGF5 UmVjUHRyKE5VTEwpOworCisJCWlmICh3cml0ZVB0ciA9PSBMb2dzdHJlYW1SZXN1bHQuV3JpdGUK KwkJCSYmIGZsdXNoUHRyID09IExvZ3N0cmVhbVJlc3VsdC5GbHVzaAorCQkJJiYgKCFyZXBseUFw cGx5IHx8IGFwcGx5UHRyID09IGxhdGVzdEFwcGx5UHRyKSkKKwkJCXJldHVybjsKKwl9CiAKIAkv KiBNYWtlIHN1cmUgd2Ugd2FrZSB1cCB3aGVuIGl0J3MgdGltZSB0byBzZW5kIGFub3RoZXIgcmVw bHkuICovCiAJV2FsUmN2Q29tcHV0ZU5leHRXYWtldXAoV0FMUkNWX1dBS0VVUF9SRVBMWSwgbm93 KTsKQEAgLTExNTgsNyArMTE2OSw4IEBAIFhMb2dXYWxSY3ZTZW5kUmVwbHkoYm9vbCBmb3JjZSwg Ym9vbCByZXF1ZXN0UmVwbHkpCiAJLyogQ29uc3RydWN0IGEgbmV3IG1lc3NhZ2UgKi8KIAl3cml0 ZVB0ciA9IExvZ3N0cmVhbVJlc3VsdC5Xcml0ZTsKIAlmbHVzaFB0ciA9IExvZ3N0cmVhbVJlc3Vs dC5GbHVzaDsKLQlhcHBseVB0ciA9IEdldFhMb2dSZXBsYXlSZWNQdHIoTlVMTCk7CisJYXBwbHlQ dHIgPSAobGF0ZXN0QXBwbHlQdHIgPT0gSW52YWxpZFhMb2dSZWNQdHIpID8KKwkJR2V0WExvZ1Jl cGxheVJlY1B0cihOVUxMKSA6IGxhdGVzdEFwcGx5UHRyOwogCiAJcmVzZXRTdHJpbmdJbmZvKCZy ZXBseV9tZXNzYWdlKTsKIAlwcV9zZW5kYnl0ZSgmcmVwbHlfbWVzc2FnZSwgUHFSZXBsTXNnX1N0 YW5kYnlTdGF0dXNVcGRhdGUpOwpAQCAtMTM4Miw3ICsxMzk0LDcgQEAgV2FsUmN2Rm9yY2VSZXBs eSh2b2lkKQogewogCVByb2NOdW1iZXIJcHJvY25vOwogCi0JV2FsUmN2LT5mb3JjZV9yZXBseSA9 IHRydWU7CisJV2FsUmN2LT5yZXBseV9hcHBseSA9IHRydWU7CiAJLyogZmV0Y2hpbmcgdGhlIHBy b2MgbnVtYmVyIGlzIHByb2JhYmx5IGF0b21pYywgYnV0IGRvbid0IHJlbHkgb24gaXQgKi8KIAlT cGluTG9ja0FjcXVpcmUoJldhbFJjdi0+bXV0ZXgpOwogCXByb2NubyA9IFdhbFJjdi0+cHJvY25v OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vd2Fsc2VuZGVyLmMgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi93YWxzZW5kZXIuYwppbmRleCAwODI1MzEwM2NiMy4uNjY1MDdl OWMyZGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCisr KyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3dhbHNlbmRlci5jCkBAIC0yNDcyLDcgKzI0NzIs OSBAQCBQcm9jZXNzU3RhbmRieVJlcGx5TWVzc2FnZSh2b2lkKQogCVRpbWVzdGFtcFR6IG5vdzsK IAlUaW1lc3RhbXBUeiByZXBseVRpbWU7CiAKLQlzdGF0aWMgYm9vbCBmdWxseUFwcGxpZWRMYXN0 VGltZSA9IGZhbHNlOworCXN0YXRpYyBYTG9nUmVjUHRyIHByZXZXcml0ZVB0ciA9IEludmFsaWRY TG9nUmVjUHRyOworCXN0YXRpYyBYTG9nUmVjUHRyIHByZXZGbHVzaFB0ciA9IEludmFsaWRYTG9n UmVjUHRyOworCXN0YXRpYyBYTG9nUmVjUHRyIHByZXZBcHBseVB0ciA9IEludmFsaWRYTG9nUmVj UHRyOwogCiAJLyogdGhlIGNhbGxlciBhbHJlYWR5IGNvbnN1bWVkIHRoZSBtc2d0eXBlIGJ5dGUg Ki8KIAl3cml0ZVB0ciA9IHBxX2dldG1zZ2ludDY0KCZyZXBseV9tZXNzYWdlKTsKQEAgLTI1MDUs MjIgKzI1MDcsMjMgQEAgUHJvY2Vzc1N0YW5kYnlSZXBseU1lc3NhZ2Uodm9pZCkKIAlhcHBseUxh ZyA9IExhZ1RyYWNrZXJSZWFkKFNZTkNfUkVQX1dBSVRfQVBQTFksIGFwcGx5UHRyLCBub3cpOwog CiAJLyoKLQkgKiBJZiB0aGUgc3RhbmRieSByZXBvcnRzIHRoYXQgaXQgaGFzIGZ1bGx5IHJlcGxh eWVkIHRoZSBXQUwgaW4gdHdvCi0JICogY29uc2VjdXRpdmUgcmVwbHkgbWVzc2FnZXMsIHRoZW4g dGhlIHNlY29uZCBzdWNoIG1lc3NhZ2UgbXVzdCByZXN1bHQKLQkgKiBmcm9tIHdhbF9yZWNlaXZl cl9zdGF0dXNfaW50ZXJ2YWwgZXhwaXJpbmcgb24gdGhlIHN0YW5kYnkuICBUaGlzIGlzIGEKLQkg KiBjb252ZW5pZW50IHRpbWUgdG8gZm9yZ2V0IHRoZSBsYWcgdGltZXMgbWVhc3VyZWQgd2hlbiBp dCBsYXN0Ci0JICogd3JvdGUvZmx1c2hlZC9hcHBsaWVkIGEgV0FMIHJlY29yZCwgdG8gYXZvaWQg ZGlzcGxheWluZyBzdGFsZSBsYWcgZGF0YQotCSAqIHVudGlsIG1vcmUgV0FMIHRyYWZmaWMgYXJy aXZlcy4KKwkgKiBJZiB0aGUgc3RhbmRieSByZXBvcnRzIHRoYXQgaXQgaGFzIGZ1bGx5IHJlcGxh eWVkIHRoZSBXQUwsIGFuZCB0aGUKKwkgKiB3cml0ZS9mbHVzaC9hcHBseSBwb3NpdGlvbnMgcmVt YWluIHVuY2hhbmdlZCBhY3Jvc3MgdHdvIGNvbnNlY3V0aXZlCisJICogcmVwbHkgbWVzc2FnZXMs IGZvcmdldCB0aGUgbGFnIHRpbWVzIG1lYXN1cmVkIHdoZW4gaXQgbGFzdAorCSAqIHdyb3RlL2Zs dXNoZWQvYXBwbGllZCBhIFdBTCByZWNvcmQuCisJICoKKwkgKiBUaGUgc2Vjb25kIG1lc3NhZ2Ug d2l0aCB1bmNoYW5nZWQgcG9zaXRpb25zIHR5cGljYWxseSByZXN1bHRzIGZyb20KKwkgKiB3YWxf cmVjZWl2ZXJfc3RhdHVzX2ludGVydmFsIGV4cGlyaW5nIG9uIHRoZSBzdGFuZGJ5LCBzbyBsYWcg dmFsdWVzIGFyZQorCSAqIHVzdWFsbHkgY2xlYXJlZCBhZnRlciB0aGF0IGludGVydmFsIHdoZW4g dGhlcmUgaXMgbm8gYWN0aXZpdHkuIFRoaXMKKwkgKiBhdm9pZHMgZGlzcGxheWluZyBzdGFsZSBs YWcgZGF0YSB1bnRpbCBtb3JlIFdBTCB0cmFmZmljIGFycml2ZXMuCiAJICovCi0JY2xlYXJMYWdU aW1lcyA9IGZhbHNlOwotCWlmIChhcHBseVB0ciA9PSBzZW50UHRyKQotCXsKLQkJaWYgKGZ1bGx5 QXBwbGllZExhc3RUaW1lKQotCQkJY2xlYXJMYWdUaW1lcyA9IHRydWU7Ci0JCWZ1bGx5QXBwbGll ZExhc3RUaW1lID0gdHJ1ZTsKLQl9Ci0JZWxzZQotCQlmdWxseUFwcGxpZWRMYXN0VGltZSA9IGZh bHNlOworCWNsZWFyTGFnVGltZXMgPSAoYXBwbHlQdHIgPT0gc2VudFB0ciAmJiBmbHVzaFB0ciA9 PSBzZW50UHRyICYmCisJCQkJCSB3cml0ZVB0ciA9PSBwcmV2V3JpdGVQdHIgJiYgZmx1c2hQdHIg PT0gcHJldkZsdXNoUHRyICYmCisJCQkJCSBhcHBseVB0ciA9PSBwcmV2QXBwbHlQdHIpOworCisJ cHJldldyaXRlUHRyID0gd3JpdGVQdHI7CisJcHJldkZsdXNoUHRyID0gZmx1c2hQdHI7CisJcHJl dkFwcGx5UHRyID0gYXBwbHlQdHI7CiAKIAkvKiBTZW5kIGEgcmVwbHkgaWYgdGhlIHN0YW5kYnkg cmVxdWVzdGVkIG9uZS4gKi8KIAlpZiAocmVwbHlSZXF1ZXN0ZWQpCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi93YWxyZWNlaXZlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRp b24vd2FscmVjZWl2ZXIuaAppbmRleCA5YjliZDkxNjMxNC4uMDI0ZWJjZjRmMzcgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dhbHJlY2VpdmVyLmgKKysrIGIvc3JjL2luY2x1 ZGUvcmVwbGljYXRpb24vd2FscmVjZWl2ZXIuaApAQCAtMTU2LDExICsxNTYsMTEgQEAgdHlwZWRl ZiBzdHJ1Y3QKIAlwZ19hdG9taWNfdWludDY0IHdyaXR0ZW5VcHRvOwogCiAJLyoKLQkgKiBmb3Jj ZSB3YWxyZWNlaXZlciByZXBseT8gIFRoaXMgZG9lc24ndCBuZWVkIHRvIGJlIGxvY2tlZDsgbWVt b3J5CisJICogcmVxdWVzdCB3YWxyZWNlaXZlciByZXBseT8gIFRoaXMgZG9lc24ndCBuZWVkIHRv IGJlIGxvY2tlZDsgbWVtb3J5CiAJICogYmFycmllcnMgZm9yIG9yZGVyaW5nIGFyZSBzdWZmaWNp ZW50LiAgQnV0IHdlIGRvIG5lZWQgYXRvbWljIGZldGNoIGFuZAogCSAqIHN0b3JlIHNlbWFudGlj cywgc28gdXNlIHNpZ19hdG9taWNfdC4KIAkgKi8KLQlzaWdfYXRvbWljX3QgZm9yY2VfcmVwbHk7 CS8qIHVzZWQgYXMgYSBib29sICovCisJc2lnX2F0b21pY190IHJlcGx5X2FwcGx5OwkvKiB1c2Vk IGFzIGEgYm9vbCAqLwogfSBXYWxSY3ZEYXRhOwogCiBleHRlcm4gUEdETExJTVBPUlQgV2FsUmN2 RGF0YSAqV2FsUmN2OwotLSAKMi41MS4yCgo= --0000000000007b2564064d63b03a--