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 1vvWal-006FEb-28 for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 08:19:27 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vvWak-00BAnL-1R for pgsql-hackers@arkaria.postgresql.org; Thu, 26 Feb 2026 08:19:26 +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 1vvWak-00BAnB-05 for pgsql-hackers@lists.postgresql.org; Thu, 26 Feb 2026 08:19:26 +0000 Received: from mail-yw1-x1135.google.com ([2607:f8b0:4864:20::1135]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vvWag-00000001MIr-23E4 for pgsql-hackers@postgresql.org; Thu, 26 Feb 2026 08:19:25 +0000 Received: by mail-yw1-x1135.google.com with SMTP id 00721157ae682-7986e0553bdso4836717b3.2 for ; Thu, 26 Feb 2026 00:19:22 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772093961; cv=none; d=google.com; s=arc-20240605; b=VyrGu0ywWLyDDA3+Yx64NCN7bcHrb4vZ+CqbfzJMEuyJMFtmn7Fj6XscCUATMSJIyU 4t5qEglzd79BEVeMzzS/h8aAzP09qKwaSzC2+m0g1/DJ0tD0LJy1anfX4hUkrnirKN7F PPQl4FdM5yvyaefwG46DTB+yAoZOu5VqV1hfo+RluMV9iqnxoKG8C0wM/zMyMxfbB+i2 qE+T24q0gZZjbX7rkwTb4e0KDxabmFMUp7q4VQMUutYt0oFSKKBn+4x9CFDF7JZTQCy+ KzkpCmqvou1mANPvdsAtSlibTlGqd5V01377rP5aQa5AgoYWI2lz64bhnZRoZIJiJBq1 GkvA== 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=EzRsdnqCR+F4Wjmnwt+9l2XhIQxXEXNP5eSpoBZ5/PA=; fh=PmCiex/oMMUfWeFldc08UZIW3I6IQ4LWvnEFbSQ6GAk=; b=Eyxv9crU6G7khvLEssHZrfuVsoUhBpE5wVvDmNFJWjMye+NhrMLK81G8XZCNi9XHdN kL/wlhGDTAACrrYnBzjhpGPUVbGhyvskRu6ynGucKedcue5Ahf/Wxo965bDR2skkHetf XYbL1jjo7mKkBkSRnEXnQOxQUFcWfXUpdhcRRqo6vz3rsaMkbpc0QUhafZse4YapRWtx ochNnVReMH8VTctAB09sJy+TYnFrkHnYUHarDK+c9ayNtBUiuAcM2an4MJB5OSfWlLRW cNXBvTSM9DYkr08AzUJrg/nCRR/4mJ1i8mXTKawNaVR+NH94h8mO0JB0MUPkiMw/hrer zXtA==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=datadoghq.com; s=google; t=1772093961; x=1772698761; darn=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=EzRsdnqCR+F4Wjmnwt+9l2XhIQxXEXNP5eSpoBZ5/PA=; b=XEWUjUYSaVbbGGzGtFnxQEbVZ9O7mKSu6bKSw4KPnPIZziLb0RpzqO10P3QnhUuU+I 38isaZ4T8NRni/oyIAr+l8Mj1PAiH0mSCwpMCDcO1/pU8JRnmIGhuOkvtFzRYwBWpMaD Ea7rsuA/Z4cmyf24gLYrophTROSBEkm3XYn5k= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772093961; x=1772698761; 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=EzRsdnqCR+F4Wjmnwt+9l2XhIQxXEXNP5eSpoBZ5/PA=; b=L64PMfPl61nWBBzp1M4+mY4Mle0GZ91bnLI9/OVMx4W033aNFzpzEwyJqN6DRIlY7O bRhBlYwMPz3qplIy8zL6uHx/f3C3b5YyJ6zTAhZknm1q/Ir7KFmpeZ6ivveAbDj/Y5si FXD8LxP4cjzjHYPTtvCdTscf77qaw928VHtiVgWzLFausN2ORwLaVir8M8hcduqvmXRZ ELSZZzM8yTVIarwEV6fELYFzRZ8KI8Gn2OAXRc/q0CK8aKDt4x1mSp9l/Heh0gbCcuBY w/B47FU/Z/WlZYXrcXiCxcYHPS8kiEol5rdYvpnux95u1GJDMOU1WaTxuTrdQEcwz5lA ZMIg== X-Forwarded-Encrypted: i=1; AJvYcCWcpaAKHOngtCl9x3ARUbIT9XC/jYYvMAOhbNeGhnaqYI0WqeOX6qHdG+mvM0IDGkx4RERqGl1k/Xrmr4q8@postgresql.org X-Gm-Message-State: AOJu0YxJpJ0S8fi/mEfNo8CuBtj7Vnpj9Mtp/svvOxPZivuxPV7QBIQ9 xJVeBOy3KJ0fgHSGZNXi3hnCgw87qd258Nceu2w3wLMAmjuWSj5qyfflvC7Z2K0xqLLY5GVomhL JPVAzp+CYHt6A/OyG1/71j9UJUMYjeErVsGIavwoa8A== X-Gm-Gg: ATEYQzzbWn7Q2mJIzHAu5Lp0MiAKZpytozOv6uaUyUfqhyVQVHQFXxhy/ZjdEnI6APK l4CbKAdlU4WYQK76goZFVLfnzaH+wmZfmKjzopQSgweSSiWRzqTNEDFLm26B4iMERzdb2FfTRtx 2235ahTJnbfEBccrNhQCFd5EmV2LhdtugzE5ypiWxfeFNHJv2FkLPRm5j34bQBDGWbqnu5W7K5i FrbcH88Uj/6K4JS6LXxdTxK5Jp+2D3Qshj4Rfy89JwFswPZcia3/pEz4v3odfCYOdmO+XdeCOpw RJ/55Q== X-Received: by 2002:a05:690c:1d:b0:798:5333:ce1c with SMTP id 00721157ae682-79876c1db77mr12646437b3.23.1772093960976; Thu, 26 Feb 2026 00:19:20 -0800 (PST) MIME-Version: 1.0 References: <0cbf5d34-f117-456f-bcc0-50fa9a8eafba@gmail.com> <1D505B52-9D58-4783-846D-600391C2A3B1@gmail.com> In-Reply-To: <1D505B52-9D58-4783-846D-600391C2A3B1@gmail.com> From: Anthonin Bonnefoy Date: Thu, 26 Feb 2026 09:19:09 +0100 X-Gm-Features: AaiRm52LvGjKMw_YyWEG-hrnqBuJjqE9PeseTH6EoDe0H1PMe56r26Sk6uknQJ8 Message-ID: Subject: Re: Propagate XLogFindNextRecord error to callers To: Chao Li Cc: Mircea Cadariu , PostgreSQL Hackers , Japin Li Content-Type: multipart/mixed; boundary="0000000000000e9990064bb5c75a" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000000e9990064bb5c75a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Thanks for the comments! On Tue, Feb 24, 2026 at 5:00=E2=80=AFAM Chao Li wr= ote: > From a design perspective, I=E2=80=99m not sure we need to add a new erro= rmsg parameter to XLogFindNextRecord(). The new parameter ultimately just e= xposes state->errormsg_buf, so the returned errormsg implicitly depends on = the lifetime of state, and we also need extra handling for cases like error= msg =3D=3D NULL. > > Instead, perhaps we could add a helper function, say XLogReaderGetLastErr= or(XLogReaderState *state). which internally pstrdup()s state->errormsg_buf= (after checking errormsg_deferred, etc.). That way the caller owns the ret= urned string explicitly, and there=E2=80=99s no hidden dependency on the re= ader state=E2=80=99s lifetime. > > This would also avoid changing the XLogFindNextRecord() signature while m= aking the ownership semantics clearer. One issue I see is that it introduces another way to get the error, with XLogReadRecord and XLogNextRecord using an errormsg parameter, and XLogFindNextRecord using the helper function. Maybe the solution would be to change both XLogReadRecord and XLogNextRecord to use this new function to stay consistent, but that means changing their signatures. Also, I see the errormsg parameter as a way to signal the caller that "this function can fail, the detailed error will be available here". With the XLogReaderGetLastError, it becomes the caller's responsibility to know which function may fill the error message and check it accordingly. The error message is likely printed shortly after the function's call, so I suspect the risk of using the errormsg after its intended lifetime is low. You bring up a good point about the errormsg's lifetime, which is definitely something to mention in the function's comments. I've updated the patch with the additional comments. Regards, Anthonin Bonnefoy --0000000000000e9990064bb5c75a Content-Type: application/octet-stream; name="v6-0001-Propagate-errormsg-to-XLogFindNextRecord-caller.patch" Content-Disposition: attachment; filename="v6-0001-Propagate-errormsg-to-XLogFindNextRecord-caller.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mm36ycj50 RnJvbSA4Mzk3MmNmOWNkMWU3YmYwNTdhMGZmNGYzOTY5ODQwYWIwZmI3NzFhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbnRob25pbiBCb25uZWZveSA8YW50aG9uaW4uYm9ubmVmb3lA ZGF0YWRvZ2hxLmNvbT4KRGF0ZTogRnJpLCAxMiBEZWMgMjAyNSAwOTo1NjowMCArMDEwMApTdWJq ZWN0OiBQcm9wYWdhdGUgZXJyb3Jtc2cgdG8gWExvZ0ZpbmROZXh0UmVjb3JkIGNhbGxlcgoKQ3Vy cmVudGx5LCBYTG9nRmluZE5leHRSZWNvcmQgZXJyb3Jtc2cgaXMgaWdub3JlZCBhbmQgY2FsbGVy cyB3aWxsIG9ubHkKb3V0cHV0IGEgZ2VuZXJpYyAnY291bGQgbm90IGZpbmQgYSB2YWxpZCByZWNv cmQnIG1lc3NhZ2Ugd2l0aG91dApkZXRhaWxzLgpBZGRpdGlvbmFsbHksIGludmFsaWQgcGFnZSBo ZWFkZXIgd29uJ3QgZ28gdGhyb3VnaCBYTG9nUmVhZFJlY29yZCwKbGVhdmluZyB0aGUgZXJyb3Ig aW4gc3RhdGUtPmVycm9ybXNnX2J1Zi4KClRoaXMgcGF0Y2ggcHJvcGFnYXRlcyBYTG9nRmluZE5l eHRSZWNvcmQncyBlcnJvciBtZXNzYWdlIHRvIHRoZSBjYWxsZXJzCmFuZCBkaXNwbGF5cyBpdC4g SW4gY2FzZSBvZiBhbiBpbnZhbGlkIHBhZ2UgaGVhZGVyLCB0aGUgZXJyb3Jtc2cgaXMKZmlsbGVk IHdpdGggZXJyb3Jtc2dfYnVmIGNvbnRlbnQuCi0tLQogY29udHJpYi9wZ193YWxpbnNwZWN0L3Bn X3dhbGluc3BlY3QuYyAgIHwgMTYgKysrKysrKysrKysrLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0veGxvZ3JlYWRlci5jIHwgMjQgKysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMv YmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyAgfCAxNyArKysrKysrKysrKystLS0t LQogc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuYyAgICAgICAgIHwgMTIgKysrKysrKysr LS0tCiBzcmMvYmluL3BnX3dhbGR1bXAvdC8wMDFfYmFzaWMucGwgICAgICAgfCAyMyArKysrKysr KysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3hsb2dyZWFkZXIuaCAgICAgICAg IHwgIDMgKystCiA2IGZpbGVzIGNoYW5nZWQsIDc5IGluc2VydGlvbnMoKyksIDE2IGRlbGV0aW9u cygtKQoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcGdfd2FsaW5zcGVjdC9wZ193YWxpbnNwZWN0LmMg Yi9jb250cmliL3BnX3dhbGluc3BlY3QvcGdfd2FsaW5zcGVjdC5jCmluZGV4IDcxNmEwOTIyYzZi Li45OGRkMzFiNjliYiAxMDA2NDQKLS0tIGEvY29udHJpYi9wZ193YWxpbnNwZWN0L3BnX3dhbGlu c3BlY3QuYworKysgYi9jb250cmliL3BnX3dhbGluc3BlY3QvcGdfd2FsaW5zcGVjdC5jCkBAIC05 Nyw2ICs5Nyw3IEBAIEluaXRYTG9nUmVhZGVyU3RhdGUoWExvZ1JlY1B0ciBsc24pCiAJWExvZ1Jl YWRlclN0YXRlICp4bG9ncmVhZGVyOwogCVJlYWRMb2NhbFhMb2dQYWdlTm9XYWl0UHJpdmF0ZSAq cHJpdmF0ZV9kYXRhOwogCVhMb2dSZWNQdHIJZmlyc3RfdmFsaWRfcmVjb3JkOworCWNoYXIJICAg KmVycm9ybXNnOwogCiAJLyoKIAkgKiBSZWFkaW5nIFdBTCBiZWxvdyB0aGUgZmlyc3QgcGFnZSBv ZiB0aGUgZmlyc3Qgc2VnbWVudHMgaXNuJ3QgYWxsb3dlZC4KQEAgLTEyNCwxMiArMTI1LDE5IEBA IEluaXRYTG9nUmVhZGVyU3RhdGUoWExvZ1JlY1B0ciBsc24pCiAJCQkJIGVycmRldGFpbCgiRmFp bGVkIHdoaWxlIGFsbG9jYXRpbmcgYSBXQUwgcmVhZGluZyBwcm9jZXNzb3IuIikpKTsKIAogCS8q IGZpcnN0IGZpbmQgYSB2YWxpZCByZWNwdHIgdG8gc3RhcnQgZnJvbSAqLwotCWZpcnN0X3ZhbGlk X3JlY29yZCA9IFhMb2dGaW5kTmV4dFJlY29yZCh4bG9ncmVhZGVyLCBsc24pOworCWZpcnN0X3Zh bGlkX3JlY29yZCA9IFhMb2dGaW5kTmV4dFJlY29yZCh4bG9ncmVhZGVyLCBsc24sICZlcnJvcm1z Zyk7CiAKIAlpZiAoIVhMb2dSZWNQdHJJc1ZhbGlkKGZpcnN0X3ZhbGlkX3JlY29yZCkpCi0JCWVy ZXBvcnQoRVJST1IsCi0JCQkJZXJybXNnKCJjb3VsZCBub3QgZmluZCBhIHZhbGlkIHJlY29yZCBh ZnRlciAlWC8lMDhYIiwKLQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKGxzbikpKTsKKwl7CisJCWlm IChlcnJvcm1zZykKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycm1zZygiY291bGQgbm90IGZp bmQgYSB2YWxpZCByZWNvcmQgYWZ0ZXIgJVgvJTA4WDogJXMiLAorCQkJCQkJICAgTFNOX0ZPUk1B VF9BUkdTKGxzbiksIGVycm9ybXNnKSk7CisJCWVsc2UKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CWVycm1zZygiY291bGQgbm90IGZpbmQgYSB2YWxpZCByZWNvcmQgYWZ0ZXIgJVgvJTA4WCIsCisJ CQkJCQkgICBMU05fRk9STUFUX0FSR1MobHNuKSkpOworCX0KIAogCXJldHVybiB4bG9ncmVhZGVy OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlYWRlci5jCmluZGV4IDAzYWRhOGFh MGM1Li5lMDc5MDUzZWMxYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v eGxvZ3JlYWRlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dyZWFkZXIu YwpAQCAtMTM4OSwxNCArMTM4OSwyMSBAQCBYTG9nUmVhZGVyUmVzZXRFcnJvcihYTG9nUmVhZGVy U3RhdGUgKnN0YXRlKQogICoKICAqIFRoaXMgcG9zaXRpb25zIHRoZSByZWFkZXIsIGxpa2UgWExv Z0JlZ2luUmVhZCgpLCBzbyB0aGF0IHRoZSBuZXh0IGNhbGwgdG8KICAqIFhMb2dSZWFkUmVjb3Jk KCkgd2lsbCByZWFkIHRoZSBuZXh0IHZhbGlkIHJlY29yZC4KKyAqCisgKiBPbiBmYWlsdXJlLCBJ bnZhbGlkWExvZ1JlY1B0ciBpcyByZXR1cm5lZCwgYW5kICplcnJvcm1zZyBpcyBzZXQgdG8gYSBz dHJpbmcKKyAqIHdpdGggZGV0YWlscyBvZiB0aGUgZmFpbHVyZS4KKyAqCisgKiBXaGVuIHNldCwg KmVycm9ybXNnIHBvaW50cyB0byBhbiBpbnRlcm5hbCBidWZmZXIgdGhhdCdzIHZhbGlkIHVudGls IHRoZSBuZXh0CisgKiBjYWxsIHRvIFhMb2dSZWFkUmVjb3JkLgogICovCiBYTG9nUmVjUHRyCi1Y TG9nRmluZE5leHRSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0ciBSZWNQ dHIpCitYTG9nRmluZE5leHRSZWNvcmQoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0 ciBSZWNQdHIsIGNoYXIgKiplcnJvcm1zZykKIHsKIAlYTG9nUmVjUHRyCXRtcFJlY1B0cjsKIAlY TG9nUmVjUHRyCWZvdW5kID0gSW52YWxpZFhMb2dSZWNQdHI7CiAJWExvZ1BhZ2VIZWFkZXIgaGVh ZGVyOwotCWNoYXIJICAgKmVycm9ybXNnOworCisJKmVycm9ybXNnID0gTlVMTDsKIAogCUFzc2Vy dChYTG9nUmVjUHRySXNWYWxpZChSZWNQdHIpKTsKIApAQCAtMTQ4MSw3ICsxNDg4LDcgQEAgWExv Z0ZpbmROZXh0UmVjb3JkKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgUmVjUHRy KQogCSAqIG9yIHdlIGp1c3QganVtcGVkIG92ZXIgdGhlIHJlbWFpbmluZyBkYXRhIG9mIGEgY29u dGludWF0aW9uLgogCSAqLwogCVhMb2dCZWdpblJlYWQoc3RhdGUsIHRtcFJlY1B0cik7Ci0Jd2hp bGUgKFhMb2dSZWFkUmVjb3JkKHN0YXRlLCAmZXJyb3Jtc2cpICE9IE5VTEwpCisJd2hpbGUgKFhM b2dSZWFkUmVjb3JkKHN0YXRlLCBlcnJvcm1zZykgIT0gTlVMTCkKIAl7CiAJCS8qIHBhc3QgdGhl IHJlY29yZCB3ZSd2ZSBmb3VuZCwgYnJlYWsgb3V0ICovCiAJCWlmIChSZWNQdHIgPD0gc3RhdGUt PlJlYWRSZWNQdHIpCkBAIC0xNDk2LDYgKzE1MDMsMTcgQEAgWExvZ0ZpbmROZXh0UmVjb3JkKFhM b2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgUmVjUHRyKQogZXJyOgogCVhMb2dSZWFk ZXJJbnZhbFJlYWRTdGF0ZShzdGF0ZSk7CiAKKwkvKgorCSAqIFdlIG1heSBoYXZlIHJlcG9ydGVk IGVycm9ycyBkdWUgdG8gaW52YWxpZCBXQUwgaGVhZGVyLCBwcm9wYWdhdGUgdGhlCisJICogZXJy b3IgbWVzc2FnZSB0byB0aGUgY2FsbGVyLgorCSAqLworCWlmIChzdGF0ZS0+ZXJyb3Jtc2dfZGVm ZXJyZWQpCisJeworCQlpZiAoc3RhdGUtPmVycm9ybXNnX2J1ZlswXSAhPSAnXDAnKQorCQkJKmVy cm9ybXNnID0gc3RhdGUtPmVycm9ybXNnX2J1ZjsKKwkJc3RhdGUtPmVycm9ybXNnX2RlZmVycmVk ID0gZmFsc2U7CisJfQorCiAJcmV0dXJuIEludmFsaWRYTG9nUmVjUHRyOwogfQogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL3dhbHN1bW1hcml6ZXIuYyBiL3NyYy9iYWNrZW5k L3Bvc3RtYXN0ZXIvd2Fsc3VtbWFyaXplci5jCmluZGV4IDc0MjEzN2VkYWQ2Li4zNTc5YzY5NmFj NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKKysr IGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci93YWxzdW1tYXJpemVyLmMKQEAgLTkxNCw2ICs5MTQs NyBAQCBTdW1tYXJpemVXQUwoVGltZUxpbmVJRCB0bGksIFhMb2dSZWNQdHIgc3RhcnRfbHNuLCBi b29sIGV4YWN0LAogCVdhbFN1bW1hcnlJTyBpbzsKIAlCbG9ja1JlZlRhYmxlICpicnRhYiA9IENy ZWF0ZUVtcHR5QmxvY2tSZWZUYWJsZSgpOwogCWJvb2wJCWZhc3RfZm9yd2FyZCA9IHRydWU7CisJ Y2hhcgkgICAqZXJyb3Jtc2c7CiAKIAkvKiBJbml0aWFsaXplIHByaXZhdGUgZGF0YSBmb3IgeGxv Z3JlYWRlci4gKi8KIAlwcml2YXRlX2RhdGEgPSBwYWxsb2MwX29iamVjdChTdW1tYXJpemVyUmVh ZExvY2FsWExvZ1ByaXZhdGUpOwpAQCAtOTY1LDcgKzk2Niw3IEBAIFN1bW1hcml6ZVdBTChUaW1l TGluZUlEIHRsaSwgWExvZ1JlY1B0ciBzdGFydF9sc24sIGJvb2wgZXhhY3QsCiAJfQogCWVsc2UK IAl7Ci0JCXN1bW1hcnlfc3RhcnRfbHNuID0gWExvZ0ZpbmROZXh0UmVjb3JkKHhsb2dyZWFkZXIs IHN0YXJ0X2xzbik7CisJCXN1bW1hcnlfc3RhcnRfbHNuID0gWExvZ0ZpbmROZXh0UmVjb3JkKHhs b2dyZWFkZXIsIHN0YXJ0X2xzbiwgJmVycm9ybXNnKTsKIAkJaWYgKCFYTG9nUmVjUHRySXNWYWxp ZChzdW1tYXJ5X3N0YXJ0X2xzbikpCiAJCXsKIAkJCS8qCkBAIC05OTQsOSArOTk1LDE2IEBAIFN1 bW1hcml6ZVdBTChUaW1lTGluZUlEIHRsaSwgWExvZ1JlY1B0ciBzdGFydF9sc24sIGJvb2wgZXhh Y3QsCiAJCQkJc3dpdGNoX2xzbiA9IHhsb2dyZWFkZXItPkVuZFJlY1B0cjsKIAkJCX0KIAkJCWVs c2UKLQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJZXJybXNnKCJjb3VsZCBub3QgZmluZCBhIHZh bGlkIHJlY29yZCBhZnRlciAlWC8lMDhYIiwKLQkJCQkJCQkgICBMU05fRk9STUFUX0FSR1Moc3Rh cnRfbHNuKSkpOworCQkJeworCQkJCWlmIChlcnJvcm1zZykKKwkJCQkJZXJlcG9ydChFUlJPUiwK KwkJCQkJCQllcnJtc2coImNvdWxkIG5vdCBmaW5kIGEgdmFsaWQgcmVjb3JkIGFmdGVyICVYLyUw OFg6ICVzIiwKKwkJCQkJCQkJICAgTFNOX0ZPUk1BVF9BUkdTKHN0YXJ0X2xzbiksIGVycm9ybXNn KSk7CisJCQkJZWxzZQorCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCWVycm1zZygiY291bGQg bm90IGZpbmQgYSB2YWxpZCByZWNvcmQgYWZ0ZXIgJVgvJTA4WCIsCisJCQkJCQkJCSAgIExTTl9G T1JNQVRfQVJHUyhzdGFydF9sc24pKSk7CisJCQl9CiAJCX0KIAogCQkvKiBXZSBzaG91bGRuJ3Qg Z28gYmFja3dhcmQuICovCkBAIC0xMDA5LDcgKzEwMTcsNiBAQCBTdW1tYXJpemVXQUwoVGltZUxp bmVJRCB0bGksIFhMb2dSZWNQdHIgc3RhcnRfbHNuLCBib29sIGV4YWN0LAogCXdoaWxlICgxKQog CXsKIAkJaW50CQkJYmxvY2tfaWQ7Ci0JCWNoYXIJICAgKmVycm9ybXNnOwogCQlYTG9nUmVjb3Jk ICpyZWNvcmQ7CiAJCXVpbnQ4CQlybWlkOwogCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1 bXAvcGdfd2FsZHVtcC5jIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuYwppbmRleCBm MzQ0NjM4NWQ2YS4uNTAzYmE3NmU1NTkgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9w Z193YWxkdW1wLmMKKysrIGIvc3JjL2Jpbi9wZ193YWxkdW1wL3BnX3dhbGR1bXAuYwpAQCAtMTIx MiwxMSArMTIxMiwxNyBAQCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIAkJcGdfZmF0YWwo Im91dCBvZiBtZW1vcnkgd2hpbGUgYWxsb2NhdGluZyBhIFdBTCByZWFkaW5nIHByb2Nlc3NvciIp OwogCiAJLyogZmlyc3QgZmluZCBhIHZhbGlkIHJlY3B0ciB0byBzdGFydCBmcm9tICovCi0JZmly c3RfcmVjb3JkID0gWExvZ0ZpbmROZXh0UmVjb3JkKHhsb2dyZWFkZXJfc3RhdGUsIHByaXZhdGUu c3RhcnRwdHIpOworCWZpcnN0X3JlY29yZCA9IFhMb2dGaW5kTmV4dFJlY29yZCh4bG9ncmVhZGVy X3N0YXRlLCBwcml2YXRlLnN0YXJ0cHRyLCAmZXJyb3Jtc2cpOwogCiAJaWYgKCFYTG9nUmVjUHRy SXNWYWxpZChmaXJzdF9yZWNvcmQpKQotCQlwZ19mYXRhbCgiY291bGQgbm90IGZpbmQgYSB2YWxp ZCByZWNvcmQgYWZ0ZXIgJVgvJTA4WCIsCi0JCQkJIExTTl9GT1JNQVRfQVJHUyhwcml2YXRlLnN0 YXJ0cHRyKSk7CisJeworCQlpZiAoZXJyb3Jtc2cpCisJCQlwZ19mYXRhbCgiY291bGQgbm90IGZp bmQgYSB2YWxpZCByZWNvcmQgYWZ0ZXIgJVgvJTA4WDogJXMiLAorCQkJCQkgTFNOX0ZPUk1BVF9B UkdTKHByaXZhdGUuc3RhcnRwdHIpLCBlcnJvcm1zZyk7CisJCWVsc2UKKwkJCXBnX2ZhdGFsKCJj b3VsZCBub3QgZmluZCBhIHZhbGlkIHJlY29yZCBhZnRlciAlWC8lMDhYIiwKKwkJCQkJIExTTl9G T1JNQVRfQVJHUyhwcml2YXRlLnN0YXJ0cHRyKSk7CisJfQogCiAJLyoKIAkgKiBEaXNwbGF5IGEg bWVzc2FnZSB0aGF0IHdlJ3JlIHNraXBwaW5nIGRhdGEgaWYgYGZyb21gIHdhc24ndCBhIHBvaW50 ZXIKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbCBiL3NyYy9i aW4vcGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbAppbmRleCA1ZGI1ZDIwMTM2Zi4uMTg5ODg0OGU0 MTggMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC90LzAwMV9iYXNpYy5wbAorKysgYi9z cmMvYmluL3BnX3dhbGR1bXAvdC8wMDFfYmFzaWMucGwKQEAgLTYsNiArNiw3IEBAIHVzZSB3YXJu aW5ncyBGQVRBTCA9PiAnYWxsJzsKIHVzZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNl IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNlIFRlc3Q6Ok1vcmU7Cit1c2UgRmlsZTo6Q29w eTsKIAogcHJvZ3JhbV9oZWxwX29rKCdwZ193YWxkdW1wJyk7CiBwcm9ncmFtX3ZlcnNpb25fb2so J3BnX3dhbGR1bXAnKTsKQEAgLTIzNiw2ICsyMzcsMjggQEAgY29tbWFuZF9mYWlsc19saWtlKAog CXFyL2Vycm9yOiBlcnJvciBpbiBXQUwgcmVjb3JkIGF0LywKIAknZXJyb3JzIGFyZSBzaG93biB3 aXRoIC0tcXVpZXQnKTsKIAorIyBXcm9uZyBXQUwgdmVyc2lvbi4gV2UgY29weSBhbiBleGlzdGlu ZyB3YWwgZmlsZSBhbmQgc2V0IHRoZQorIyBwYWdlJ3MgbWFnaWMgdmFsdWUgdG8gMDAwMC4KK3sK KwlteSAkYnJva2VuX3dhbF9kaXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGVtcGRpcl9z aG9ydCgpOworCW15ICRicm9rZW5fd2FsID0gIiRicm9rZW5fd2FsX2Rpci8kc3RhcnRfd2FsZmls ZSI7CisJY29weSgkbm9kZS0+ZGF0YV9kaXIgLiAnL3BnX3dhbC8nIC4gJHN0YXJ0X3dhbGZpbGUs ICRicm9rZW5fd2FsKQorCQl8fCBkaWUgImNvcHlpbmcgJHN0YXJ0X3dhbGZpbGUgJCEiOworCisJ bXkgJGZoOworCW9wZW4oJGZoLCAnKzwnLCAkYnJva2VuX3dhbCk7CisJc3lzc2VlaygkZmgsIDAs IDApCisJCW9yIEJBSUxfT1VUKCJzeXNzZWVrIGZhaWxlZDogJCEiKTsKKwlzeXN3cml0ZSgkZmgs IHBhY2soIlMiLCAwKSkKKwkJb3IgQkFJTF9PVVQoInN5c3dyaXRlIGZhaWxlZDogJCEiKTsKKwlj bG9zZSgkZmgpOworCisJY29tbWFuZF9mYWlsc19saWtlKAorCQlbICdwZ193YWxkdW1wJywgJGJy b2tlbl93YWwgXSwKKwkJCXFyL2ludmFsaWQgbWFnaWMgbnVtYmVyIDAwMDAvaSwKKwkJCSdkZXRh aWxlZCBlcnJvciBtZXNzYWdlIHNob3duIGZvciBpbnZhbGlkIFdBTCBwYWdlIG1hZ2ljJworCSk7 Cit9CiAKICMgVGVzdCBmb3I6IERpc3BsYXkgYSBtZXNzYWdlIHRoYXQgd2UncmUgc2tpcHBpbmcg ZGF0YSBpZiBgZnJvbWAKICMgd2Fzbid0IGEgcG9pbnRlciB0byB0aGUgc3RhcnQgb2YgYSByZWNv cmQuCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MveGxvZ3JlYWRlci5oIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dyZWFkZXIuaAppbmRleCA4MGYxYTU0OGUwOC4uYzJhNDhiZmU4MDkg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy94bG9ncmVhZGVyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvYWNjZXNzL3hsb2dyZWFkZXIuaApAQCAtMzQyLDcgKzM0Miw4IEBAIGV4dGVybiB2b2lk IFhMb2dSZWFkZXJTZXREZWNvZGVCdWZmZXIoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwKIAogLyog UG9zaXRpb24gdGhlIFhMb2dSZWFkZXIgdG8gZ2l2ZW4gcmVjb3JkICovCiBleHRlcm4gdm9pZCBY TG9nQmVnaW5SZWFkKFhMb2dSZWFkZXJTdGF0ZSAqc3RhdGUsIFhMb2dSZWNQdHIgUmVjUHRyKTsK LWV4dGVybiBYTG9nUmVjUHRyIFhMb2dGaW5kTmV4dFJlY29yZChYTG9nUmVhZGVyU3RhdGUgKnN0 YXRlLCBYTG9nUmVjUHRyIFJlY1B0cik7CitleHRlcm4gWExvZ1JlY1B0ciBYTG9nRmluZE5leHRS ZWNvcmQoWExvZ1JlYWRlclN0YXRlICpzdGF0ZSwgWExvZ1JlY1B0ciBSZWNQdHIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmVycm9ybXNnKTsKIAogLyogUmV0 dXJuIHZhbHVlcyBmcm9tIFhMb2dQYWdlUmVhZENCLiAqLwogdHlwZWRlZiBlbnVtIFhMb2dQYWdl UmVhZFJlc3VsdAotLSAKMi41Mi4wCgo= --0000000000000e9990064bb5c75a--