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 1w9gWN-001eEo-2l for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 09:45:28 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w9gWM-007d5q-0n for pgsql-hackers@arkaria.postgresql.org; Mon, 06 Apr 2026 09:45:26 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w9gWL-007d5i-2h for pgsql-hackers@lists.postgresql.org; Mon, 06 Apr 2026 09:45:26 +0000 Received: from mail-pg1-x535.google.com ([2607:f8b0:4864:20::535]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w9gWK-00000000pcy-0Sym for pgsql-hackers@postgresql.org; Mon, 06 Apr 2026 09:45:25 +0000 Received: by mail-pg1-x535.google.com with SMTP id 41be03b00d2f7-c76864f4e58so1389101a12.1 for ; Mon, 06 Apr 2026 02:45:24 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1775468723; cv=none; d=google.com; s=arc-20240605; b=gnxuS5fMogCmsqzJG0EPKIXUA137Qu6IFZ/1SaS7wUPbwj92aZ0qo4Ow0R63oz0wun c/bn8NYEuc1/vQINzbcHnYIQ+B/JNVhfAfoHzN7ZkrcV9Giuikg5QKZMBnPiRB5p6OZW y6G2CwYb3FCQYeLvewec66DiiIWRCkTA4nkUMXmgw/F7qcsu9gkCd3nYCYfcvJH/n2D5 toWydEegjnbsjDRDxJS8/GdV+5P2fAVqlbBtLWbrX8hnQH8Ol97p/Px3ZayZvKkazjRU 23wN3jIMpi1q2GYKy82hgdzaPG2l/lEdpQS/77Yq+b2HI/pA01p045bNnl27QJ8/ArUM SZ1g== 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=elLH/3soq4kWQasNPpZ6T59JbXHAcnZTyq1UsBYohyQ=; fh=/JmEbjSmtJyo5YD90P/JiXKPM3B5swt2+zgCytPMc88=; b=SRuXcya4RIndyEGOb0nITqb9V8b0YveYwMMZfYjvhlZ8pKW5QUP3gjZpNN2TjsstAf Pn4Tmf4IMQF8M0ODlCXiUHyzbnlzbZPTgNZGMYusXsN0vNhOzTHR03p0G2OhFPXaVAhN AWMRCPCw79klEyRJeDyK9P6Ca3ExPY8hsDhnVrsjI86g1V6XtOK54v5xunUNFn7cDV6i 2FfenQNGAKYFCf1YRt+V4Omr7wXpaE0w7HS+I+Aeo3C9cC1ENyIS1er/Zp+oGFhRS7OU 7XlzJ0dOXkHArfcQ6+U0ND4lXgBYqDs9Xh3zxxyd+7PEo6kRFdBbdYcjSaAVLpk8kzQg K7Zg==; darn=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=20251104; t=1775468723; x=1776073523; 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=elLH/3soq4kWQasNPpZ6T59JbXHAcnZTyq1UsBYohyQ=; b=Oy5uo8NIbomxDyI/bCUUImddbU8PKjgox0eQHhiGzPnksCxBiq9/B0IswRIZs3iFHG PsMayliVkWDWvbMLxbyOi7bIQVzV9tzsajOs5v2vvjcis3ASGW6B5GCI7Eiz4kjzGK6H GdPBh1W1frTT6etxc3AzmvJAztUn/orct4GPJQiUXNcmKmN3aLuxQsb20DvJGGWQifzI BU+SL2vmxaC6AfvhMDrrJ7maHIy7dRDF+JvjK6LA5q2NRQqtZsnjj6BMmkxluILlAlyI qKAlOFTHKu7/41SEgnVmJgNqMzlGyb7a6+yavM2O/GHLhD7kUqWYHd2gb5cqorwHh6Ua Wy3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1775468723; x=1776073523; 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=elLH/3soq4kWQasNPpZ6T59JbXHAcnZTyq1UsBYohyQ=; b=ZH35J/Y+nvrE5bBolut7TZWPxwVd+9uu9Wf6EZbsKU353YMVELwtd9ZyIfFj+SE66C aLQ+69YnZ93AeP2IlDHlQe2diWSD8JOdT1nM5xF8r2AOxzUfF2EsI4p8/3+EbB9C0XVL cJno4NYwA30ajiJAqu9psZcyux11JkLk0rENQGWEkGJWS0MKw4jm4vIf9OdbIPP3/FzR BgJsrcK5+4AQ/2flaQnCfYUQXA9wXYE7I8XltpvZsKU7bw6SujNNuPAb1tIHkjv4LUUv IDOrX51d9Fn/HV5U/xjWms9SMhLgoTwkGZRaGAArk+BkrLZfvAnNwIZgLhBcmPl6sI/L rRPQ== X-Forwarded-Encrypted: i=1; AJvYcCWsdVtDOFRG2UB/uOJ11InQOp0yJ20YeJ67B8Arckb1EB8WOnY15IIui+n7vszZ+SbcH7zvW5Vq7SdjyQ2g@postgresql.org X-Gm-Message-State: AOJu0YyPbVZXBFbMb+YzhVnEtFvI/GgxtRazl/ku+wYZVYOk/0QjXjbU GU7PBcWJbFxfgxGr7/i3ze8UWuSWgYMnnNcYTELDjfdLcH7yml9E4DtJWZG7kWJD3wMvTxxZoJZ BA4X6DLBrafqTUaSe1yTH1Gvamy/ek6E= X-Gm-Gg: AeBDiesrzLxd7+pZa0O7T6coOt+dIsUXQl42pvBXpMTT3rfI4LHNDEswxwgSJUG1obf X9W5fCFPjpJu5dPSSfZKnmxKBhBNXgPAXd8oPcjkThohcW40u9NMpScehuVvvOryxj2Ksycp2XZ hPv5dCrAAQGJ6LCzjv7MlH43b15wd3M8p9wO+LFI5bGcaJ46cb3FSrGoFGJ+1tt5yXcpxS2I1G0 zUROLkOjlzA2vqD2ot+ur6/QZk9N/PU/XvruQk9xpkSmRs7+495gy2ppkgOowO80iUIV3PRWmPa Hz6a5JHU X-Received: by 2002:a05:6a20:12c5:b0:398:4bf2:4285 with SMTP id adf61e73a8af0-39f2eff526bmr11826040637.16.1775468723021; Mon, 06 Apr 2026 02:45:23 -0700 (PDT) MIME-Version: 1.0 References: <2BE661BA-D909-4093-BF78-DB9B0C099337@gmail.com> <77FA04FE-1F84-4DA1-8855-8BBFD8CC889A@gmail.com> In-Reply-To: From: Amit Langote Date: Mon, 6 Apr 2026 18:45:05 +0900 X-Gm-Features: AQROBzDcdise4qYMj8-3eHTftkKOOPLfXwiq-iF9anDlsvFx0fJBONWNfYn5_Xw Message-ID: Subject: Re: Eliminating SPI / SQL from some RI triggers - take 3 To: Chao Li Cc: Junwang Zhao , Haibo Yan , Pavel Stehule , PostgreSQL-development , Tomas Vondra Content-Type: multipart/mixed; boundary="0000000000008bc6bb064ec78692" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000008bc6bb064ec78692 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Apr 3, 2026 at 6:39=E2=80=AFPM Amit Langote wrote: > On Fri, Apr 3, 2026 at 5:58=E2=80=AFPM Chao Li w= rote: > > > On Apr 3, 2026, at 13:52, Amit Langote wrot= e: > > > On Thu, Apr 2, 2026 at 5:00=E2=80=AFPM Chao Li wrote: > > >> I plan to spend time testing and tracing this patch tomorrow. But I = don=E2=80=99t want to block your progress, if I find anything, I will repor= t to you. > > > > > > Sure, I didn't want to leave committing this to the weekend or the ne= xt week. > > > > I spent several hours debugging this patch today, and I found a problem= where the batch mode doesn't seem to handle deferred RI triggers, although= the commit message suggests that it should. > > > > I traced this scenario: > > ``` > > CREATE TABLE pk (a int primary key); > > CREATE TABLE fk (a int references pk(a) DEFERRABLE INITIALLY DEFERRED); > > BEGIN; > > INSERT INTO fk VALUES (1); > > INSERT INTO pk VALUES (1); > > COMMIT; > > ``` > > > > When COMMIT is executed, it reaches RI_FKey_check(), where AfterTrigger= IsActive() checks whether afterTriggers.query_depth >=3D 0. But in the defe= rred case, afterTriggers.query_depth is -1. > > > > From the code: > > ``` > > if (ri_fastpath_is_applicable(riinfo)) > > { > > if (AfterTriggerIsActive()) > > { > > /* Batched path: buffer and probe in groups */ > > ri_FastPathBatchAdd(riinfo, fk_rel, newslot); > > } > > else > > { > > /* ALTER TABLE validation: per-row, no cache */ > > ri_FastPathCheck(riinfo, fk_rel, newslot); > > } > > return PointerGetDatum(NULL); > > } > > ``` > > > > So this ends up falling back to the per-row path for deferred RI checks= at COMMIT, even though the intent here seems to be only to bypass the ALTE= R TABLE validation case, where batch callbacks would never fire, and MyTrig= gerDepth is 0. So, maybe we can just check MyTriggerDepth>0 in AfterTrigger= IsActive(). > > > > I tried the attached fix. With it, deferred triggers go through the bat= ch mode, and all existing tests still pass. > > I think you might be right. Thanks for the patch. It looks correct > to me at a glance, but I will need to check it a bit more closely > before committing. Thinking about this some more, your fix is on the right track but needs a bit more work -- MyTriggerDepth > 0 is too broad since it fires for BEFORE triggers too. I have a revised version using a new afterTriggerFiringDepth counter that I'll push shortly. Added an open item for tracking in the meantime: https://wiki.postgresql.org/wiki/PostgreSQL_19_Open_Items#Open_Issues --=20 Thanks, Amit Langote --0000000000008bc6bb064ec78692 Content-Type: application/octet-stream; name="v2-0001-Fix-deferred-FK-check-batching-introduced-by-comm.patch" Content-Disposition: attachment; filename="v2-0001-Fix-deferred-FK-check-batching-introduced-by-comm.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mnn04ydo0 RnJvbSBjMjA4YzdjZjEzYzY5NjhhMTJlNGM5YjMyMWViZWViZWJkOTMxYTQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbWl0IExhbmdvdGUgPGFtaXRsYW5AcG9zdGdyZXNxbC5vcmc+ CkRhdGU6IE1vbiwgNiBBcHIgMjAyNiAxODo0MDowNSArMDkwMApTdWJqZWN0OiBbUEFUQ0ggdjJd IEZpeCBkZWZlcnJlZCBGSyBjaGVjayBiYXRjaGluZyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdAogYjdi MjdlYjQxYTUKClRoYXQgY29tbWl0IGludHJvZHVjZWQgQWZ0ZXJUcmlnZ2VySXNBY3RpdmUoKSB0 byBkZXRlY3Qgd2hldGhlcgp3ZSBhcmUgaW5zaWRlIHRoZSBhZnRlci10cmlnZ2VyIGZpcmluZyBt YWNoaW5lcnksIHNvIHRoYXQgUkkgdHJpZ2dlcgpmdW5jdGlvbnMgY2FuIHRha2UgdGhlIGJhdGNo ZWQgZmFzdCBwYXRoLiAgSXQgd2FzIGltcGxlbWVudGVkIHVzaW5nCnF1ZXJ5X2RlcHRoID49IDAs IHdoaWNoIGNvcnJlY3RseSBpZGVudGlmaWVkIGltbWVkaWF0ZSB0cmlnZ2VyIGZpcmluZwpidXQg bWlzc2VkIHRoZSBkZWZlcnJlZCBjYXNlIHdoZXJlIHF1ZXJ5X2RlcHRoIGlzIC0xIGF0IENPTU1J VCB2aWEKQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVkKCkuICBUaGlzIGNhdXNlZCBkZWZlcnJlZCBG SyBjaGVja3MgdG8gZmFsbApiYWNrIHRvIHRoZSBwZXItcm93IGZhc3QgcGF0aCBpbnN0ZWFkIG9m IHRoZSBiYXRjaGVkIHBhdGguCgpUaGUgY29ycmVjdCBjaGVjayBpcyB3aGV0aGVyIHdlIGFyZSBp bnNpZGUgYW4gYWZ0ZXItdHJpZ2dlciBmaXJpbmcKbG9vcCBzcGVjaWZpY2FsbHkuICBJbnRyb2R1 Y2UgYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGgsIGEgY291bnRlcgppbmNyZW1lbnRlZCBhcm91bmQg dGhlIHRyaWdnZXItZmlyaW5nIGxvb3BzIGluIEFmdGVyVHJpZ2dlckVuZFF1ZXJ5LApBZnRlclRy aWdnZXJGaXJlRGVmZXJyZWQsIGFuZCBBZnRlclRyaWdnZXJTZXRTdGF0ZSwgYW5kIGRlY3JlbWVu dGVkCmFmdGVyIEZpcmVBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrcygpIHJldHVybnMuICBBZnRl clRyaWdnZXJJc0FjdGl2ZSgpCm5vdyByZXR1cm5zIGFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoID4g MC4KClJlcG9ydGVkLWJ5OiBDaGFvIExpIDxsaS5ldmFuLmNoYW9AZ21haWwuY29tPgpBdXRob3I6 IENoYW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+CkNvLWF1dGhvcmVkLWJ5OiBBbWl0IExh bmdvdGUgPGFtaXRsYW5nb3RlMDlAZ21haWwuY29tPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tL0MyMTMzQjQ3LTc5Q0QtNDBGRi1CMDg4LTAyRDIwRDY1NDgwNkBnbWFpbC5jb20KLS0t CiBzcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMgfCAyNiArKysrKysrKysrKysrKysrKysr KysrLS0tLQogMSBmaWxlIGNoYW5nZWQsIDIyIGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jIGIvc3JjL2JhY2tl bmQvY29tbWFuZHMvdHJpZ2dlci5jCmluZGV4IDRkNGU5NmE1MzAyLi41ZmUyNTg1Yzg4ZiAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3RyaWdnZXIuYwpAQCAtMzk0MCw2ICszOTQwLDEzIEBAIHR5cGVkZWYgc3RydWN0 IEFmdGVyVHJpZ2dlckNhbGxiYWNrSXRlbQogCiBzdGF0aWMgQWZ0ZXJUcmlnZ2Vyc0RhdGEgYWZ0 ZXJUcmlnZ2VyczsKIAorLyoKKyAqIEluY3JlbWVudGVkIGJlZm9yZSBpbnZva2luZyBhZnRlclRy aWdnZXJJbnZva2VFdmVudHMoKS4gIFVzZWQgYnkKKyAqIEFmdGVyVHJpZ2dlcklzQWN0aXZlKCkg dG8gZGV0ZXJtaW5lIHdoZXRoZXIgYmF0Y2ggY2FsbGJhY2tzIHdpbGwgZmlyZSwKKyAqIHNvIHRo YXQgUkkgdHJpZ2dlciBmdW5jdGlvbnMgY2FuIHRha2UgdGhlIGJhdGNoZWQgZmFzdCBwYXRoLgor ICovCitzdGF0aWMgaW50IGFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoID0gMDsKKwogc3RhdGljIHZv aWQgQWZ0ZXJUcmlnZ2VyRXhlY3V0ZShFU3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkJQWZ0ZXJUcmln Z2VyRXZlbnQgZXZlbnQsCiAJCQkJCQkJCVJlc3VsdFJlbEluZm8gKnJlbEluZm8sCkBAIC01MTEz LDYgKzUxMjAsNyBAQCBBZnRlclRyaWdnZXJCZWdpblhhY3Qodm9pZCkKIAlBc3NlcnQoYWZ0ZXJU cmlnZ2Vycy5ldmVudHMuaGVhZCA9PSBOVUxMKTsKIAlBc3NlcnQoYWZ0ZXJUcmlnZ2Vycy50cmFu c19zdGFjayA9PSBOVUxMKTsKIAlBc3NlcnQoYWZ0ZXJUcmlnZ2Vycy5tYXh0cmFuc2RlcHRoID09 IDApOworCUFzc2VydChhZnRlclRyaWdnZXJGaXJpbmdEZXB0aCA9PSAwKTsKIH0KIAogCkBAIC01 MTg0LDYgKzUxOTIsNyBAQCBBZnRlclRyaWdnZXJFbmRRdWVyeShFU3RhdGUgKmVzdGF0ZSkKIAkg Ki8KIAlxcyA9ICZhZnRlclRyaWdnZXJzLnF1ZXJ5X3N0YWNrW2FmdGVyVHJpZ2dlcnMucXVlcnlf ZGVwdGhdOwogCisJYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGgrKzsKIAlmb3IgKDs7KQogCXsKIAkJ aWYgKGFmdGVyVHJpZ2dlck1hcmtFdmVudHMoJnFzLT5ldmVudHMsICZhZnRlclRyaWdnZXJzLmV2 ZW50cywgdHJ1ZSkpCkBAIC01MjM0LDYgKzUyNDMsNyBAQCBBZnRlclRyaWdnZXJFbmRRdWVyeShF U3RhdGUgKmVzdGF0ZSkKIAlBZnRlclRyaWdnZXJGcmVlUXVlcnkoJmFmdGVyVHJpZ2dlcnMucXVl cnlfc3RhY2tbYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aF0pOwogCiAJYWZ0ZXJUcmlnZ2Vycy5x dWVyeV9kZXB0aC0tOworCWFmdGVyVHJpZ2dlckZpcmluZ0RlcHRoLS07CiB9CiAKIApAQCAtNTMy OSw2ICs1MzM5LDcgQEAgQWZ0ZXJUcmlnZ2VyRmlyZURlZmVycmVkKHZvaWQpCiAJICogUnVuIGFs bCB0aGUgcmVtYWluaW5nIHRyaWdnZXJzLiAgTG9vcCB1bnRpbCB0aGV5IGFyZSBhbGwgZ29uZSwg aW4gY2FzZQogCSAqIHNvbWUgdHJpZ2dlciBxdWV1ZXMgbW9yZSBmb3IgdXMgdG8gZG8uCiAJICov CisJYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGgrKzsKIAl3aGlsZSAoYWZ0ZXJUcmlnZ2VyTWFya0V2 ZW50cyhldmVudHMsIE5VTEwsIGZhbHNlKSkKIAl7CiAJCUNvbW1hbmRJZAlmaXJpbmdfaWQgPSBh ZnRlclRyaWdnZXJzLmZpcmluZ19jb3VudGVyKys7CkBAIC01MzQwLDYgKzUzNTEsOCBAQCBBZnRl clRyaWdnZXJGaXJlRGVmZXJyZWQodm9pZCkKIAkvKiBGbHVzaCBhbnkgZmFzdC1wYXRoIGJhdGNo ZXMgYWNjdW11bGF0ZWQgYnkgdGhlIHRyaWdnZXJzIGp1c3QgZmlyZWQuICovCiAJRmlyZUFmdGVy VHJpZ2dlckJhdGNoQ2FsbGJhY2tzKCk7CiAKKwlhZnRlclRyaWdnZXJGaXJpbmdEZXB0aC0tOwor CiAJLyoKIAkgKiBXZSBkb24ndCBib3RoZXIgZnJlZWluZyB0aGUgZXZlbnQgbGlzdCwgc2luY2Ug aXQgd2lsbCBnbyBhd2F5IGFueXdheQogCSAqIChhbmQgbW9yZSBlZmZpY2llbnRseSB0aGFuIHZp YSBwZnJlZSkgaW4gQWZ0ZXJUcmlnZ2VyRW5kWGFjdC4KQEAgLTU0MDQsNiArNTQxNyw4IEBAIEFm dGVyVHJpZ2dlckVuZFhhY3QoYm9vbCBpc0NvbW1pdCkKIAogCS8qIE5vIG1vcmUgYWZ0ZXJUcmln Z2VycyBtYW5pcHVsYXRpb24gdW50aWwgbmV4dCB0cmFuc2FjdGlvbiBzdGFydHMuICovCiAJYWZ0 ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0aCA9IC0xOworCisJYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGgg PSAwOwogfQogCiAvKgpAQCAtNjA1Myw2ICs2MDY4LDcgQEAgQWZ0ZXJUcmlnZ2VyU2V0U3RhdGUo Q29uc3RyYWludHNTZXRTdG10ICpzdG10KQogCQlBZnRlclRyaWdnZXJFdmVudExpc3QgKmV2ZW50 cyA9ICZhZnRlclRyaWdnZXJzLmV2ZW50czsKIAkJYm9vbAkJc25hcHNob3Rfc2V0ID0gZmFsc2U7 CiAKKwkJYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGgrKzsKIAkJd2hpbGUgKGFmdGVyVHJpZ2dlck1h cmtFdmVudHMoZXZlbnRzLCBOVUxMLCB0cnVlKSkKIAkJewogCQkJQ29tbWFuZElkCWZpcmluZ19p ZCA9IGFmdGVyVHJpZ2dlcnMuZmlyaW5nX2NvdW50ZXIrKzsKQEAgLTYwODYsNiArNjEwMiw3IEBA IEFmdGVyVHJpZ2dlclNldFN0YXRlKENvbnN0cmFpbnRzU2V0U3RtdCAqc3RtdCkKIAkJICogRmx1 c2ggYW55IGZhc3QtcGF0aCBiYXRjaGVzIGFjY3VtdWxhdGVkIGJ5IHRoZSB0cmlnZ2VycyBqdXN0 IGZpcmVkLgogCQkgKi8KIAkJRmlyZUFmdGVyVHJpZ2dlckJhdGNoQ2FsbGJhY2tzKCk7CisJCWFm dGVyVHJpZ2dlckZpcmluZ0RlcHRoLS07CiAKIAkJaWYgKHNuYXBzaG90X3NldCkKIAkJCVBvcEFj dGl2ZVNuYXBzaG90KCk7CkBAIC02ODA2LDEwICs2ODIzLDEwIEBAIFJlZ2lzdGVyQWZ0ZXJUcmln Z2VyQmF0Y2hDYWxsYmFjayhBZnRlclRyaWdnZXJCYXRjaENhbGxiYWNrIGNhbGxiYWNrLAogCSAq IEFsbG9jYXRlIGluIFRvcFRyYW5zYWN0aW9uQ29udGV4dCBzbyB0aGUgaXRlbSBzdXJ2aXZlcyBm b3IgdGhlIGR1cmF0aW9uCiAJICogb2YgdGhlIGJhdGNoLCB3aGljaCBtYXkgc3BhbiBtdWx0aXBs ZSB0cmlnZ2VyIGludm9jYXRpb25zLgogCSAqCi0JICogTXVzdCBiZSBjYWxsZWQgd2hpbGUgYWZ0 ZXJUcmlnZ2VycyBpcyBhY3RpdmUgKHF1ZXJ5X2RlcHRoID49IDApOwotCSAqIGNhbGxiYWNrcyBy ZWdpc3RlcmVkIG91dHNpZGUgYSB0cmlnZ2VyLWZpcmluZyBjb250ZXh0IHdvdWxkIG5ldmVyIGZp cmUuCisJICogTXVzdCBiZSBjYWxsZWQgd2hpbGUgYWZ0ZXJUcmlnZ2VycyBpcyBhY3RpdmU7IGNh bGxiYWNrcyByZWdpc3RlcmVkCisJICogb3V0c2lkZSBhIHRyaWdnZXItZmlyaW5nIGNvbnRleHQg d291bGQgbmV2ZXIgZmlyZS4KIAkgKi8KLQlBc3NlcnQoYWZ0ZXJUcmlnZ2Vycy5xdWVyeV9kZXB0 aCA+PSAwKTsKKwlBc3NlcnQoYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGggPiAwKTsKIAlvbGRjeHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oVG9wVHJhbnNhY3Rpb25Db250ZXh0KTsKIAlpdGVtID0g cGFsbG9jKHNpemVvZihBZnRlclRyaWdnZXJDYWxsYmFja0l0ZW0pKTsKIAlpdGVtLT5jYWxsYmFj ayA9IGNhbGxiYWNrOwpAQCAtNjgzNiw2ICs2ODUzLDcgQEAgRmlyZUFmdGVyVHJpZ2dlckJhdGNo Q2FsbGJhY2tzKHZvaWQpCiAJaWYgKGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPiAwKQogCQly ZXR1cm47CiAKKwlBc3NlcnQoYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGggPiAwKTsKIAlmb3JlYWNo KGxjLCBhZnRlclRyaWdnZXJzLmJhdGNoX2NhbGxiYWNrcykKIAl7CiAJCUFmdGVyVHJpZ2dlckNh bGxiYWNrSXRlbSAqaXRlbSA9IGxmaXJzdChsYyk7CkBAIC02ODU4LDUgKzY4NzYsNSBAQCBGaXJl QWZ0ZXJUcmlnZ2VyQmF0Y2hDYWxsYmFja3Modm9pZCkKIGJvb2wKIEFmdGVyVHJpZ2dlcklzQWN0 aXZlKHZvaWQpCiB7Ci0JcmV0dXJuIGFmdGVyVHJpZ2dlcnMucXVlcnlfZGVwdGggPj0gMDsKKwly ZXR1cm4gYWZ0ZXJUcmlnZ2VyRmlyaW5nRGVwdGggPiAwOwogfQotLSAKMi40Ny4zCgo= --0000000000008bc6bb064ec78692--