Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRt0a-00013U-C0 for pgsql-hackers@arkaria.postgresql.org; Sat, 27 Aug 2022 10:25:44 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1oRszZ-0008PR-E7 for pgsql-hackers@arkaria.postgresql.org; Sat, 27 Aug 2022 10:24:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1oRszZ-0008PI-0v for pgsql-hackers@lists.postgresql.org; Sat, 27 Aug 2022 10:24:41 +0000 Received: from mail-yw1-x1131.google.com ([2607:f8b0:4864:20::1131]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1oRszW-0004XA-9l for pgsql-hackers@lists.postgresql.org; Sat, 27 Aug 2022 10:24:40 +0000 Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-33dce2d4bc8so91056927b3.4 for ; Sat, 27 Aug 2022 03:24:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=7Kw3Aqy8St8emlZZuVLkq9iSdpXn3Pt71aQS5wFyWhQ=; b=lxEzqleMVyGpwhRtWnxh4kthunXhOF03J9y60D0u7wgY03yhwpl41LufpDtWD4kpNy PL9FILvE0S21D4rdCe/VQ2FpSwbtniGTOAInIG8Tyj2w6cB2/1esB6EDooorLuIDgutQ RcUMlu3QkCHkpmi9b6slePw3B8v125UOv2EDsvlVX7QxGDUW0tdkxSPlWbZF9S2e8WU6 TyivIb08W9kL9AVtuw80PlmG85K6e4ZKrtntJqvOm7hj7+tgExF3YYBLj9H0tHkAGS/Q mDI/PIO6h7BqNAgXOWAkoQo/nF3y3D0EDQ9G3Jw1yWEKFb5uFtYGgDV0uve25rhk7PPM e9RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc; bh=7Kw3Aqy8St8emlZZuVLkq9iSdpXn3Pt71aQS5wFyWhQ=; b=Q6HK70Myr6FOiv5LPxCVE8LpiHINV1pNbEM0JkMzmCEuSTpKe7ST61NrFTzQtvmI+s 9rvQY8GCT0yWFwwgkfda3ifmK4FLrjIYxM53fm+1ICDYWQf663+2OVkFY5WRLZdu0jG5 Rduzhk10N8OpLYzJPJX5hJVod2v8jR02aPtjeT2wed/+4XctxvgCMmGVBP26gv+GEsiF tEop4AR53RYvkwJ4hhvV/zt0mxE6qTPXIKdIL8ctmcKVtmEOa/uxUaEjClGJo6XDhVFz HYxKGOUgpBg1ssKGSL8PUpTuGtnBzrWk9j5GgX+srCH/1QKO6hB3FETbiVJXwK8ZjfSR 9zew== X-Gm-Message-State: ACgBeo2MbkiUnNOOrEGL5TnIdd5U7Mt7eOU8goZtVD8WYy6Qbqfe50f5 /DBFlcoY2hALTUXutuuPL3Ni5x/fM5PcAD2/5K0= X-Google-Smtp-Source: AA6agR7cNnqrEAlhEOJA8Yf9mEH6qgh70xZ5PHJwfRYuk8P0pkxsIYGim9Tl+5rFpANMY++Qsnww3Eh5JTmxc1lR6+k= X-Received: by 2002:a05:690c:80e:b0:33b:319f:4a81 with SMTP id bx14-20020a05690c080e00b0033b319f4a81mr3334034ywb.404.1661595876259; Sat, 27 Aug 2022 03:24:36 -0700 (PDT) MIME-Version: 1.0 References: <20211008.165055.1621145185927268721.horikyota.ntt@gmail.com> <20220523.133323.444599955292141474.horikyota.ntt@gmail.com> In-Reply-To: From: Amit Kapila Date: Sat, 27 Aug 2022 15:54:24 +0530 Message-ID: Subject: Re: [BUG] Logical replication failure "ERROR: could not map filenode "base/13237/442428" to relation OID" with catalog modifying txns To: Masahiko Sawada Cc: "shiy.fnst@fujitsu.com" , Kyotaro Horiguchi , "Drouvot, Bertrand" , PostgreSQL Hackers , "Oh, Mike" Content-Type: multipart/mixed; boundary="000000000000f719c305e7366f66" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000f719c305e7366f66 Content-Type: text/plain; charset="UTF-8" On Sat, Aug 27, 2022 at 1:06 PM Masahiko Sawada wrote: > > On Sat, Aug 27, 2022 at 3:56 PM Amit Kapila wrote: > > > > On Fri, Jul 29, 2022 at 12:15 PM Amit Kapila wrote: > > > > > > > > > > > Yeah, your description makes sense to me. I've also considered how to > > > > hit this path but I guess it is never hit. Thinking of it in another > > > > way, first of all, at least 2 catalog modifying transactions have to > > > > be running while writing a xl_running_xacts. The serialized snapshot > > > > that is written when we decode the first xl_running_xact has two > > > > transactions. Then, one of them is committed before the second > > > > xl_running_xacts. The second serialized snapshot has only one > > > > transaction. Then, the transaction is also committed after that. Now, > > > > in order to execute the path, we need to start decoding from the first > > > > serialized snapshot. However, if we start from there, we cannot decode > > > > the full contents of the transaction that was committed later. > > > > > > > > > > I think then we should change this code in the master branch patch > > > with an additional comment on the lines of: "Either all the xacts got > > > purged or none. It is only possible to partially remove the xids from > > > this array if one or more of the xids are still running but not all. > > > That can happen if we start decoding from a point (LSN where the > > > snapshot state became consistent) where all the xacts in this were > > > running and then at least one of those got committed and a few are > > > still running. We will never start from such a point because we won't > > > move the slot's restart_lsn past the point where the oldest running > > > transaction's restart_decoding_lsn is." > > > > > > > Unfortunately, this theory doesn't turn out to be true. While > > investigating the latest buildfarm failure [1], I see that it is > > possible that only part of the xacts in the restored catalog modifying > > xacts list needs to be purged. See the attached where I have > > demonstrated it via a reproducible test. It seems the point we were > > missing was that to start from a point where two or more catalog > > modifying were serialized, it requires another open transaction before > > both get committed, and then we need the checkpoint or other way to > > force running_xacts record in-between the commit of initial two > > catalog modifying xacts. There could possibly be other ways as well > > but the theory above wasn't correct. > > > > Thank you for the analysis and the patch. I have the same conclusion. > Since we took this approach only on the master the back branches are > not affected. > > The new test scenario makes sense to me and looks better than the one > I have. Regarding the fix, I think we should use > TransactionIdFollowsOrEquals() instead of > NormalTransactionIdPrecedes(): > > + for (off = 0; off < builder->catchange.xcnt; off++) > + { > + if (NormalTransactionIdPrecedes(builder->catchange.xip[off], > + builder->xmin)) > + break; > + } > Right, fixed. -- With Regards, Amit Kapila. --000000000000f719c305e7366f66 Content-Type: application/octet-stream; name="v2-0001-Fix-the-incorrect-assertion-introduced-in-commit-.patch" Content-Disposition: attachment; filename="v2-0001-Fix-the-incorrect-assertion-introduced-in-commit-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l7br393z0 RnJvbSBmN2Y2NGIxMjI4N2Y0NGU1ODk2NmMyZTI0NTAzZDg5NjlmOTJjYTY4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IEthcGlsYSA8YWthcGlsYUBwb3N0Z3Jlc3FsLm9yZz4K RGF0ZTogU2F0LCAyNyBBdWcgMjAyMiAxNTozOTozOCArMDUzMApTdWJqZWN0OiBbUEFUQ0ggdjNd IEZpeCB0aGUgaW5jb3JyZWN0IGFzc2VydGlvbiBpbnRyb2R1Y2VkIGluIGNvbW1pdAogN2YxM2Fj ODEyMy4KCkl0IGhhcyBiZWVuIGluY29ycmVjdGx5IGFzc3VtZWQgaW4gY29tbWl0IDdmMTNhYzgx MjMgdGhhdCB3ZSBjYW4gZWl0aGVyCnB1cmdlIGFsbCBvciBub25lIGluIHRoZSBjYXRhbG9nIG1v ZGlmeWluZyB4aWRzIGxpc3QgcmV0cmlldmVkIGZyb20gYQpzZXJpYWxpemVkIHNuYXBzaG90LiBJ dCBpcyBxdWl0ZSBwb3NzaWJsZSB0aGF0IHNvbWUgb2YgdGhlIHhpZHMgaW4gdGhhdAphcnJheSBh cmUgb2xkIGVub3VnaCB0byBiZSBwcnVuZWQgYnV0IG5vdCBvdGhlcnMuCgpBcyBwZXIgYnVpbGRm YXJtCgpBdXRob3I6IEFtaXQgS2FwaWxhIGFuZCBNYXNhaGlrbyBTYXdhZGEKUmV2aXdlZC1ieTog TWFzYWhpa28gU2F3YWRhCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FBNGVLMUxC dHY2YXlFK1R2Q2NQbUMteHNlPURWZz1TbWJ5UUQxbnZfQWFxY3BVSkVnQG1haWwuZ21haWwuY29t Ci0tLQogLi4uL2V4cGVjdGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90Lm91dCAgICAgICAgICAg fCA1NiArKysrKysrKysrKysrKysrKysrKystCiAuLi4vc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25h cHNob3Quc3BlYyAgICAgICAgICAgICB8IDIwICsrKysrKysrCiBzcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jICAgICAgICB8IDUwICsrKysrKysrKysrLS0tLS0tLS0K IDMgZmlsZXMgY2hhbmdlZCwgMTA2IGluc2VydGlvbnMoKyksIDIwIGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL2NvbnRyaWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9jYXRhbG9nX2NoYW5nZV9z bmFwc2hvdC5vdXQgYi9jb250cmliL3Rlc3RfZGVjb2RpbmcvZXhwZWN0ZWQvY2F0YWxvZ19jaGFu Z2Vfc25hcHNob3Qub3V0CmluZGV4IGRjNGY5YjcuLmQyYTRiZGYgMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvdGVzdF9kZWNvZGluZy9leHBlY3RlZC9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5vdXQKKysr IGIvY29udHJpYi90ZXN0X2RlY29kaW5nL2V4cGVjdGVkL2NhdGFsb2dfY2hhbmdlX3NuYXBzaG90 Lm91dApAQCAtMSw0ICsxLDQgQEAKLVBhcnNlZCB0ZXN0IHNwZWMgd2l0aCAyIHNlc3Npb25zCitQ YXJzZWQgdGVzdCBzcGVjIHdpdGggMyBzZXNzaW9ucwogCiBzdGFydGluZyBwZXJtdXRhdGlvbjog czBfaW5pdCBzMF9iZWdpbiBzMF9zYXZlcG9pbnQgczBfdHJ1bmNhdGUgczFfY2hlY2twb2ludCBz MV9nZXRfY2hhbmdlcyBzMF9jb21taXQgczBfYmVnaW4gczBfaW5zZXJ0IHMxX2NoZWNrcG9pbnQg czFfZ2V0X2NoYW5nZXMgczBfY29tbWl0IHMxX2dldF9jaGFuZ2VzCiBzdGVwIHMwX2luaXQ6IFNF TEVDVCAnaW5pdCcgRlJPTSBwZ19jcmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29s YXRpb25fc2xvdCcsICd0ZXN0X2RlY29kaW5nJyk7CkBAIC00MiwzICs0Miw1NyBAQCBDT01NSVQK IHN0b3AgICAgCiAoMSByb3cpCiAKKworc3RhcnRpbmcgcGVybXV0YXRpb246IHMwX2luaXQgczBf YmVnaW4gczBfdHJ1bmNhdGUgczJfYmVnaW4gczJfdHJ1bmNhdGUgczFfY2hlY2twb2ludCBzMV9n ZXRfY2hhbmdlcyBzMF9jb21taXQgczBfYmVnaW4gczBfaW5zZXJ0IHMxX2NoZWNrcG9pbnQgczFf Z2V0X2NoYW5nZXMgczJfY29tbWl0IHMxX2NoZWNrcG9pbnQgczFfZ2V0X2NoYW5nZXMgczBfY29t bWl0IHMxX2dldF9jaGFuZ2VzCitzdGVwIHMwX2luaXQ6IFNFTEVDVCAnaW5pdCcgRlJPTSBwZ19j cmVhdGVfbG9naWNhbF9yZXBsaWNhdGlvbl9zbG90KCdpc29sYXRpb25fc2xvdCcsICd0ZXN0X2Rl Y29kaW5nJyk7Cis/Y29sdW1uPworLS0tLS0tLS0KK2luaXQgICAgCisoMSByb3cpCisKK3N0ZXAg czBfYmVnaW46IEJFR0lOOworc3RlcCBzMF90cnVuY2F0ZTogVFJVTkNBVEUgdGJsMTsKK3N0ZXAg czJfYmVnaW46IEJFR0lOOworc3RlcCBzMl90cnVuY2F0ZTogVFJVTkNBVEUgdGJsMjsKK3N0ZXAg czFfY2hlY2twb2ludDogQ0hFQ0tQT0lOVDsKK3N0ZXAgczFfZ2V0X2NoYW5nZXM6IFNFTEVDVCBk YXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dldF9jaGFuZ2VzKCdpc29sYXRpb25fc2xvdCcsIE5V TEwsIE5VTEwsICdza2lwLWVtcHR5LXhhY3RzJywgJzEnLCAnaW5jbHVkZS14aWRzJywgJzAnKTsK K2RhdGEKKy0tLS0KKygwIHJvd3MpCisKK3N0ZXAgczBfY29tbWl0OiBDT01NSVQ7CitzdGVwIHMw X2JlZ2luOiBCRUdJTjsKK3N0ZXAgczBfaW5zZXJ0OiBJTlNFUlQgSU5UTyB0YmwxIFZBTFVFUyAo MSk7CitzdGVwIHMxX2NoZWNrcG9pbnQ6IENIRUNLUE9JTlQ7CitzdGVwIHMxX2dldF9jaGFuZ2Vz OiBTRUxFQ1QgZGF0YSBGUk9NIHBnX2xvZ2ljYWxfc2xvdF9nZXRfY2hhbmdlcygnaXNvbGF0aW9u X3Nsb3QnLCBOVUxMLCBOVUxMLCAnc2tpcC1lbXB0eS14YWN0cycsICcxJywgJ2luY2x1ZGUteGlk cycsICcwJyk7CitkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQkVHSU4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCit0YWJsZSBwdWJsaWMudGJsMTogVFJVTkNBVEU6IChuby1mbGFn cykKK0NPTU1JVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKDMgcm93cykKKwor c3RlcCBzMl9jb21taXQ6IENPTU1JVDsKK3N0ZXAgczFfY2hlY2twb2ludDogQ0hFQ0tQT0lOVDsK K3N0ZXAgczFfZ2V0X2NoYW5nZXM6IFNFTEVDVCBkYXRhIEZST00gcGdfbG9naWNhbF9zbG90X2dl dF9jaGFuZ2VzKCdpc29sYXRpb25fc2xvdCcsIE5VTEwsIE5VTEwsICdza2lwLWVtcHR5LXhhY3Rz JywgJzEnLCAnaW5jbHVkZS14aWRzJywgJzAnKTsKK2RhdGEgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitC RUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKK3RhYmxlIHB1YmxpYy50Ymwy OiBUUlVOQ0FURTogKG5vLWZsYWdzKQorQ09NTUlUICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgCisoMyByb3dzKQorCitzdGVwIHMwX2NvbW1pdDogQ09NTUlUOworc3RlcCBzMV9nZXRf Y2hhbmdlczogU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lz b2xhdGlvbl9zbG90JywgTlVMTCwgTlVMTCwgJ3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNs dWRlLXhpZHMnLCAnMCcpOworZGF0YSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQkVHSU4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAordGFibGUgcHVibGljLnRibDE6IElO U0VSVDogdmFsMVtpbnRlZ2VyXToxIHZhbDJbaW50ZWdlcl06bnVsbAorQ09NTUlUICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorKDMgcm93cykK KworP2NvbHVtbj8KKy0tLS0tLS0tCitzdG9wICAgIAorKDEgcm93KQorCmRpZmYgLS1naXQgYS9j b250cmliL3Rlc3RfZGVjb2Rpbmcvc3BlY3MvY2F0YWxvZ19jaGFuZ2Vfc25hcHNob3Quc3BlYyBi L2NvbnRyaWIvdGVzdF9kZWNvZGluZy9zcGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVj CmluZGV4IDI5NzFkZGMuLmZmOGY2ODQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdGVzdF9kZWNvZGlu Zy9zcGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVjCisrKyBiL2NvbnRyaWIvdGVzdF9k ZWNvZGluZy9zcGVjcy9jYXRhbG9nX2NoYW5nZV9zbmFwc2hvdC5zcGVjCkBAIC0zLDEyICszLDE1 IEBACiBzZXR1cAogewogICAgIERST1AgVEFCTEUgSUYgRVhJU1RTIHRibDE7CisgICAgRFJPUCBU QUJMRSBJRiBFWElTVFMgdGJsMjsKICAgICBDUkVBVEUgVEFCTEUgdGJsMSAodmFsMSBpbnRlZ2Vy LCB2YWwyIGludGVnZXIpOworICAgIENSRUFURSBUQUJMRSB0YmwyICh2YWwxIGludGVnZXIsIHZh bDIgaW50ZWdlcik7CiB9CiAKIHRlYXJkb3duCiB7CiAgICAgRFJPUCBUQUJMRSB0YmwxOworICAg IERST1AgVEFCTEUgdGJsMjsKICAgICBTRUxFQ1QgJ3N0b3AnIEZST00gcGdfZHJvcF9yZXBsaWNh dGlvbl9zbG90KCdpc29sYXRpb25fc2xvdCcpOwogfQogCkBAIC0yNiw2ICsyOSwxMiBAQCBzZXR1 cCB7IFNFVCBzeW5jaHJvbm91c19jb21taXQ9b247IH0KIHN0ZXAgInMxX2NoZWNrcG9pbnQiIHsg Q0hFQ0tQT0lOVDsgfQogc3RlcCAiczFfZ2V0X2NoYW5nZXMiIHsgU0VMRUNUIGRhdGEgRlJPTSBw Z19sb2dpY2FsX3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl9zbG90JywgTlVMTCwgTlVMTCwg J3NraXAtZW1wdHkteGFjdHMnLCAnMScsICdpbmNsdWRlLXhpZHMnLCAnMCcpOyB9CiAKK3Nlc3Np b24gInMyIgorc2V0dXAgeyBTRVQgc3luY2hyb25vdXNfY29tbWl0PW9uOyB9CitzdGVwICJzMl9i ZWdpbiIgeyBCRUdJTjsgfQorc3RlcCAiczJfdHJ1bmNhdGUiIHsgVFJVTkNBVEUgdGJsMjsgfQor c3RlcCAiczJfY29tbWl0IiB7IENPTU1JVDsgfQorCiAjIEZvciB0aGUgdHJhbnNhY3Rpb24gdGhh dCBUUlVOQ0FURWQgdGhlIHRhYmxlIHRibDEsIHRoZSBsYXN0IGRlY29kaW5nIGRlY29kZXMKICMg b25seSBpdHMgQ09NTUlUIHJlY29yZCwgYmVjYXVzZSBpdCBzdGFydHMgZnJvbSB0aGUgUlVOTklO R19YQUNUUyByZWNvcmQgZW1pdHRlZAogIyBkdXJpbmcgdGhlIGZpcnN0IGNoZWNrcG9pbnQgZXhl Y3V0aW9uLiAgVGhpcyB0cmFuc2FjdGlvbiBtdXN0IGJlIG1hcmtlZCBhcwpAQCAtMzcsMyArNDYs MTQgQEAgc3RlcCAiczFfZ2V0X2NoYW5nZXMiIHsgU0VMRUNUIGRhdGEgRlJPTSBwZ19sb2dpY2Fs X3Nsb3RfZ2V0X2NoYW5nZXMoJ2lzb2xhdGlvbl8KICMgcmVjb3JkIHdyaXR0ZW4gYnkgYmd3cml0 ZXIuICBPbmUgbWlnaHQgdGhpbmsgd2UgY2FuIGVpdGhlciBzdG9wIHRoZSBiZ3dyaXRlciBvcgog IyBpbmNyZWFzZSBMT0dfU05BUFNIT1RfSU5URVJWQUxfTVMgYnV0IGl0J3Mgbm90IHByYWN0aWNh bCB2aWEgdGVzdHMuCiBwZXJtdXRhdGlvbiAiczBfaW5pdCIgInMwX2JlZ2luIiAiczBfc2F2ZXBv aW50IiAiczBfdHJ1bmNhdGUiICJzMV9jaGVja3BvaW50IiAiczFfZ2V0X2NoYW5nZXMiICJzMF9j b21taXQiICJzMF9iZWdpbiIgInMwX2luc2VydCIgInMxX2NoZWNrcG9pbnQiICJzMV9nZXRfY2hh bmdlcyIgInMwX2NvbW1pdCIgInMxX2dldF9jaGFuZ2VzIgorCisjIFRlc3QgdGhhdCB3ZSBjYW4g cHVyZ2UgdGhlIG9sZCBjYXRhbG9nIG1vZGlmeWluZyB0cmFuc2FjdGlvbnMgYWZ0ZXIgcmVzdG9y aW5nCisjIHRoZW0gZnJvbSB0aGUgc2VyaWFsaXplZCBzbmFwc2hvdC4gVGhlIGZpcnN0IGNoZWNr cG9pbnQgd2lsbCBzZXJpYWxpemUgdGhlIGxpc3QKKyMgb2YgdHdvIGNhdGFsb2cgbW9kaWZ5aW5n IHhhY3RzLiBUaGUgcHVycG9zZSBvZiB0aGUgc2Vjb25kIGNoZWNrcG9pbnQgaXMgdG8gYWxsb3cK KyMgcGFydGlhbCBwcnVuaW5nIG9mIHRoZSBsaXN0IG9mIGNhdGFsb2cgbW9kaWZ5aW5nIHhhY3Qu IFRoZSB0aGlyZCBjaGVja3BvaW50CisjIGZvbGxvd2VkIGJ5IGdldF9jaGFuZ2VzIGVzdGFibGlz aGVzIGEgcmVzdGFydF9wb2ludCBhdCB0aGUgZmlyc3QgY2hlY2twb2ludCBMU04uCisjIFRoZSBs YXN0IGdldF9jaGFuZ2VzIHdpbGwgc3RhcnQgZGVjb2RpbmcgZnJvbSB0aGUgZmlyc3QgY2hlY2tw b2ludCB3aGljaAorIyByZXN0b3JlcyB0aGUgbGlzdCBvZiBjYXRhbG9nIG1vZGlmeWluZyB4YWN0 cyBhbmQgdGhlbiB3aGlsZSBkZWNvZGluZyB0aGUgc2Vjb25kCisjIGNoZWNrcG9pbnQgcmVjb3Jk IGl0IHBydW5lcyBvbmUgb2YgdGhlIHhhY3RzIGluIHRoYXQgbGlzdCBhbmQgd2hlbiBkZWNvZGlu ZyB0aGUKKyMgbmV4dCBjaGVja3BvaW50LCBpdCB3aWxsIGNvbXBsZXRlbHkgcHJ1bmUgdGhhdCBs aXN0LgorcGVybXV0YXRpb24gInMwX2luaXQiICJzMF9iZWdpbiIgInMwX3RydW5jYXRlIiAiczJf YmVnaW4iICJzMl90cnVuY2F0ZSIgInMxX2NoZWNrcG9pbnQiICJzMV9nZXRfY2hhbmdlcyIgInMw X2NvbW1pdCIgInMwX2JlZ2luIiAiczBfaW5zZXJ0IiAiczFfY2hlY2twb2ludCIgInMxX2dldF9j aGFuZ2VzIiAiczJfY29tbWl0IiAiczFfY2hlY2twb2ludCIgInMxX2dldF9jaGFuZ2VzIiAiczBf Y29tbWl0IiAiczFfZ2V0X2NoYW5nZXMiCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNh dGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC9zbmFwYnVpbGQuYwppbmRleCAxZmYyYzEyLi5iZjcyYWQ0IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3NuYXBidWlsZC5jCisrKyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvc25hcGJ1aWxkLmMKQEAgLTk2OSwyOCArOTY5LDQwIEBAIFNuYXBC dWlsZFB1cmdlT2xkZXJUeG4oU25hcEJ1aWxkICpidWlsZGVyKQogCXBmcmVlKHdvcmtzcGFjZSk7 CiAKIAkvKgotCSAqIEVpdGhlciBhbGwgdGhlIHhhY3RzIGdvdCBwdXJnZWQgb3Igbm9uZS4gSXQg aXMgb25seSBwb3NzaWJsZSB0bwotCSAqIHBhcnRpYWxseSByZW1vdmUgdGhlIHhpZHMgZnJvbSB0 aGlzIGFycmF5IGlmIG9uZSBvciBtb3JlIG9mIHRoZSB4aWRzCi0JICogYXJlIHN0aWxsIHJ1bm5p bmcgYnV0IG5vdCBhbGwuIFRoYXQgY2FuIGhhcHBlbiBpZiB3ZSBzdGFydCBkZWNvZGluZwotCSAq IGZyb20gYSBwb2ludCAoTFNOIHdoZXJlIHRoZSBzbmFwc2hvdCBzdGF0ZSBiZWNhbWUgY29uc2lz dGVudCkgd2hlcmUgYWxsCi0JICogdGhlIHhhY3RzIGluIHRoaXMgd2VyZSBydW5uaW5nIGFuZCB0 aGVuIGF0IGxlYXN0IG9uZSBvZiB0aG9zZSBnb3QKLQkgKiBjb21taXR0ZWQgYW5kIGEgZmV3IGFy ZSBzdGlsbCBydW5uaW5nLiBXZSB3aWxsIG5ldmVyIHN0YXJ0IGZyb20gc3VjaCBhCi0JICogcG9p bnQgYmVjYXVzZSB3ZSB3b24ndCBtb3ZlIHRoZSBzbG90J3MgcmVzdGFydF9sc24gcGFzdCB0aGUg cG9pbnQgd2hlcmUKLQkgKiB0aGUgb2xkZXN0IHJ1bm5pbmcgdHJhbnNhY3Rpb24ncyByZXN0YXJ0 X2RlY29kaW5nX2xzbiBpcy4KKwkgKiBQdXJnZSB4aWRzIGluIC0+Y2F0Y2hhbmdlIGFzIHdlbGwu IFRoZSBwdXJnZWQgYXJyYXkgbXVzdCBhbHNvIGJlIHNvcnRlZAorCSAqIGluIHhpZENvbXBhcmF0 b3Igb3JkZXIuCiAJICovCi0JaWYgKGJ1aWxkZXItPmNhdGNoYW5nZS54Y250ID09IDAgfHwKLQkJ VHJhbnNhY3Rpb25JZEZvbGxvd3NPckVxdWFscyhidWlsZGVyLT5jYXRjaGFuZ2UueGlwWzBdLAot CQkJCQkJCQkJIGJ1aWxkZXItPnhtaW4pKQotCQlyZXR1cm47CisJaWYgKGJ1aWxkZXItPmNhdGNo YW5nZS54Y250ID4gMCkKKwl7CisJCS8qCisJCSAqIFNpbmNlIGNhdGNoYW5nZS54aXAgaXMgc29y dGVkLCB3ZSBmaW5kIHRoZSBsb3dlciBib3VuZCBvZiB4aWRzIHRoYXQKKwkJICogYXJlIHN0aWxs IGludGVyZXN0aW5nLgorCQkgKi8KKwkJZm9yIChvZmYgPSAwOyBvZmYgPCBidWlsZGVyLT5jYXRj aGFuZ2UueGNudDsgb2ZmKyspCisJCXsKKwkJCWlmIChUcmFuc2FjdGlvbklkRm9sbG93c09yRXF1 YWxzKGJ1aWxkZXItPmNhdGNoYW5nZS54aXBbb2ZmXSwKKwkJCQkJCQkJCQkJIGJ1aWxkZXItPnht aW4pKQorCQkJCWJyZWFrOworCQl9CiAKLQlBc3NlcnQoVHJhbnNhY3Rpb25JZEZvbGxvd3MoYnVp bGRlci0+eG1pbiwKLQkJCQkJCQkJYnVpbGRlci0+Y2F0Y2hhbmdlLnhpcFtidWlsZGVyLT5jYXRj aGFuZ2UueGNudCAtIDFdKSk7Ci0JcGZyZWUoYnVpbGRlci0+Y2F0Y2hhbmdlLnhpcCk7Ci0JYnVp bGRlci0+Y2F0Y2hhbmdlLnhpcCA9IE5VTEw7Ci0JYnVpbGRlci0+Y2F0Y2hhbmdlLnhjbnQgPSAw OworCQlzdXJ2aXZpbmdfeGlkcyA9IGJ1aWxkZXItPmNhdGNoYW5nZS54Y250IC0gb2ZmOwogCi0J ZWxvZyhERUJVRzMsICJwdXJnZWQgY2F0YWxvZyBtb2RpZnlpbmcgdHJhbnNhY3Rpb25zLCBvbGRl c3QgcnVubmluZyB4aWQgJXUiLAotCQkgYnVpbGRlci0+eG1pbik7CisJCWlmIChzdXJ2aXZpbmdf eGlkcyA+IDApCisJCXsKKwkJCW1lbW1vdmUoYnVpbGRlci0+Y2F0Y2hhbmdlLnhpcCwgJihidWls ZGVyLT5jYXRjaGFuZ2UueGlwW29mZl0pLAorCQkJCQlzdXJ2aXZpbmdfeGlkcyAqIHNpemVvZihU cmFuc2FjdGlvbklkKSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlwZnJlZShidWlsZGVyLT5jYXRj aGFuZ2UueGlwKTsKKwkJCWJ1aWxkZXItPmNhdGNoYW5nZS54aXAgPSBOVUxMOworCQl9CisKKwkJ ZWxvZyhERUJVRzMsICJwdXJnZWQgY2F0YWxvZyBtb2RpZnlpbmcgdHJhbnNhY3Rpb25zIGZyb20g JXUgdG8gJXUsIHhtaW46ICV1LCB4bWF4OiAldSIsCisJCQkgKHVpbnQzMikgYnVpbGRlci0+Y2F0 Y2hhbmdlLnhjbnQsICh1aW50MzIpIHN1cnZpdmluZ194aWRzLAorCQkJIGJ1aWxkZXItPnhtaW4s IGJ1aWxkZXItPnhtYXgpOworCQlidWlsZGVyLT5jYXRjaGFuZ2UueGNudCA9IHN1cnZpdmluZ194 aWRzOworCX0KIH0KIAogLyoKLS0gCjEuOC4zLjEKCg== --000000000000f719c305e7366f66--