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 1w0SF4-001v6f-1K for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 22:41:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0SF2-00CNBl-2j for pgsql-hackers@arkaria.postgresql.org; Wed, 11 Mar 2026 22:41:25 +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 1w0SF2-00CNBS-12 for pgsql-hackers@lists.postgresql.org; Wed, 11 Mar 2026 22:41:25 +0000 Received: from mail-oo1-xc34.google.com ([2607:f8b0:4864:20::c34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0SF0-00000001gG1-42W0 for pgsql-hackers@postgresql.org; Wed, 11 Mar 2026 22:41:23 +0000 Received: by mail-oo1-xc34.google.com with SMTP id 006d021491bc7-67bb87f866bso291238eaf.2 for ; Wed, 11 Mar 2026 15:41:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773268882; cv=none; d=google.com; s=arc-20240605; b=E3XJsTGOFfN5c+PGGMyGOMeu8YLY//filJriw4IhchGXYXHh5jTHaNaJ0+tJC4DPIr jRaVSd05fjd7pwAt6YgBhEa8P5hHrhoc8libQGm+chktxF5W/1cc/qdRZLpfi5iWa81V 5NOrattZnh8Bs/u6bVpm9zs1s0uxyoHZF80VOqjaVvVjldgKS9bhvjZGfE0uYCAPfL6d wlSom3gTFuCQSUOzzNeWGFasnyH1KHw3jytk8Dl11EFy3yMFfjGk1kTd4US52iqHIVnS KKLRfxdyuF+FqAbU6lzWN24wyJn6IBF6kssMIJ7tDfw+VEs+BWa3imnnNuW+kMoorf/I c/xw== 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=guhsF5NhKV2KSTNX7n308P7QPb52t2afwy8TBxxyVk4=; fh=MyMrO38nkuc8I39qpVjxIZT2aEKuXXDdvS0ivPOUIM8=; b=BmyqCkya5FBIuZnkHFLQzVc5LUwo64olrrsy9KLYSdgiiNG6FMeGs+DaQp6+XH6aFt pYRvCYxRi7oGI2Sz7iWM4IwDt/aPfzgkTCSrrGP7UEDoPkFd8N5wWe34mp/pyDc6CS8H PM+dvURM4bsgSeSOSJizt+nC+VSZSODLdnB7hpr+Mjwfh6taUPsh1pzGXrDjO7D7qx4T asQ3+VHm1m9QiLqX6ylM+QyHGxOAQQrDS04pUn1wt2g5A+oubzu0z1LcmONnVZMSQydX ZtrSuSaIooZC28uUltnvBUdE3DeUPtqbMwuQPouhwr62vMPvRfC6SqDuTY6/BFADuqIq Y8TQ==; 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=20230601; t=1773268882; x=1773873682; 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=guhsF5NhKV2KSTNX7n308P7QPb52t2afwy8TBxxyVk4=; b=bsvkKXl7iPTHQi29BKQgihV97BqsRfX8WVp/rNeq+aVfK+tV68v5BcyT6V8c9QtSHH X8nj2nEUGJltzxcjkpO4wwqzdpHEqPTBivDYh52HjAZtpfjhXtmalrSkNA++7SWXiAPj jhTaGN/AoGAR0Vc7DpnkpMXE5aTkiLpr/4ZYhIYXRJWuKqlZ/fa9F69ntveG0HXbHyDL 9xeISynxI87J+T16jHr+r7JMWX9DEoQLYdOGmc/QrQ3RW65WneD5+AiquviKTsv/kvxZ isZcV+NWBPn2QI1cfq9YuXSDL154lmdgf94wOzX3DkYIxQxKcHHhzKoMFDYNV27xSW2I QFYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773268882; x=1773873682; 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=guhsF5NhKV2KSTNX7n308P7QPb52t2afwy8TBxxyVk4=; b=JmRSMwZFkt1Ps2oEewLTTGaPkuRcuJMdioESoAzSW2QJudGJFE+2qjQUf0LBrqDw/h m3m5ix3pEEDVmGFp631RKVwVl3DpefS8jcxhpcA6wzeYm+zBUbE1AWYdxikAb18DzoHP kdAMdHPGZr23DUQghZK8lSR7AMj89Icnv6gIIktYR+c6BD7yC9kzVVpOGYMCytzjEisu 9jTlBnQgXAmz41gGExwX9phSgm8DhfehEQpNAME6bzcVJ9QIYPz6XTtebdhSJfPlrjWp MpD9hne/Kj/WyGAYcn7GqQxQoE93oh8H/1xvkKfoha5F7veF6bZpvH1ziIpZ47AIXgWs XFJg== X-Forwarded-Encrypted: i=1; AJvYcCW68U2Eo5ydbEYD33ruddaoEtP7B/fR0UHMYnisXx6o8pRcwvqBmZ71mycGfham9ScuMSJxkJj+qDSdHTtl@postgresql.org X-Gm-Message-State: AOJu0YziqaZbllsLvUgpdUVmsj/y29f/QqauclOCdu/Ch1unLndXSCc5 RhXK6GaQ+94JiV7qNBhpz9OyAo0FL6kjwoY4pvSygkhG4x8pB/wixHqJGGl4pfECBz3oelBqwkk ucIR5D0G1TTDg7dtYo/EOtyzRmjoogayW9Bzv X-Gm-Gg: ATEYQzxhmhHtdfXeeBS5nYuroPQ85F2i/Q0eRcdd2zkmYMDgaCzCAn6ii9DD16bma5w ViQfTO546pNVENOf4OZ6ATf7LzBbgAgoIf0LtIx2+OGzfnAwm5eUe1YdIzbggf8Kip+zBN42wTS LGgY1Mu/bMJKR5iJGChJhdA1UDJMuPxOsMbbf0ftbeHzlieskcJjyWsHw3JYRjbVLHHhU4jPFHt 0jfRemjZ+CQpWC615Ow38Y4FCPr65YGKAH9WpXaJMJDKbioYpHWUNykkdMRdaEiODKsVenYaMPN Nrp/lUMd9BGWzT9E7gqeW7iSeN/24j9ngk6/her37itFjldf2vwIliTo7LMrSUB9MfLG5nDjS5k 1s5qg+0Uy0cjWSwFX6URdrAAgjfdtgxDhbdPdjps32rcy4HWx3A== X-Received: by 2002:a05:6820:290e:b0:67b:c122:d296 with SMTP id 006d021491bc7-67bc8a4e6f8mr3561675eaf.54.1773268882314; Wed, 11 Mar 2026 15:41:22 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Alexander Korotkov Date: Thu, 12 Mar 2026 00:41:10 +0200 X-Gm-Features: AaiRm53XC11NuKAY82JROpS6wcfWEhE_6qsbjXlLWlb7s6JNtA4_3270P-3tDJ0 Message-ID: Subject: Re: Odd code around ginScanToDelete To: Pavel Borisov Cc: Andres Freund , pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000d277dd064cc7554e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000d277dd064cc7554e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, Pavel! Thank you for your review! On Fri, Mar 6, 2026 at 4:45=E2=80=AFPM Pavel Borisov wrote: > Some thoughts: > > Is it worth/possible in recursive calls of ginScanToDelete() to free > allocated myStackItem->child after processing all children of the > current level, when they are not needed anymore? > Previously to this patch, palloc-ed "me" variable also was't freed at > recursion levels. > > Could limiting the maximum recursion level be useful? > > In the comment to myStackItem before ginScanToDelete(), it might be > worth adding that after processing all pages on the current level, > myStackItem is not needed anymore. Already answered in this thread. > > > Yes, it's not possible to have meDelete set for root, because > > > me->leftBuffer is always InvalidBuffer for the root. So the branch > > > handling meDelete case should better do Assert(!isRoot). > Looks like this additional Assert is not in patch v1. > > In the root call of ginScanToDelete(gvs, &root); we can add Assert > checking that its return result is false: > - ginScanToDelete(gvs, &root); > + deleted =3D ginScanToDelete(gvs, &root); > +. Assert(!deleted); /* Root page is never deleted */ Done. > Additionally, it could be good to rename all vacuum functions related > to posting tree pages only, to include "Posting" (e.g., ginDeletePage > -> ginDeletePostingPage). The same is for the functions only for the > entry tree. It is already named this way in many places (e.g. > ginVacuumPostingTreeLeaves). It could be good to extend this to all > relevant functions. Renamed as you proposed. > Several small proposals on wording: > "rightmost non-deleted page to its left" -> "closest non-deleted > sibling page to its left" I renamed that to just "left sibling". Deleted pages are not in the tree already. And "the rightmost page to its left" is just left sibling. > "each entry tracks the buffer of the page" -> "each entry tracks the > buffers of the page" (as two buffers are mentioned) I prefer to just use word "buffer" twice to make it more explicit. > "must already be pinned" -> "must already have been pinned" Done. ------ Regards, Alexander Korotkov Supabase --000000000000d277dd064cc7554e Content-Type: application/octet-stream; name="v2-0001-Rework-ginScanToDelete-to-pass-Buffers-instead-of.patch" Content-Disposition: attachment; filename="v2-0001-Rework-ginScanToDelete-to-pass-Buffers-instead-of.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmmmhw1k0 RnJvbSA4MDEyODZlMTU5NmM1OWY3MjY3YTA1ZmJmNzk1MDc3MzljMWZkMGYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbGV4YW5kZXIgS29yb3Rrb3YgPGFrb3JvdGtvdkBwb3N0Z3Jl c3FsLm9yZz4KRGF0ZTogU2F0LCAyMSBGZWIgMjAyNiAxMTowODowOCArMDIwMApTdWJqZWN0OiBb UEFUQ0ggdjJdIFJld29yayBnaW5TY2FuVG9EZWxldGUoKSB0byBwYXNzIEJ1ZmZlcnMgaW5zdGVh ZCBvZgogQmxvY2tOdW1iZXJzLgoKUHJldmlvdXNseSwgZ2luU2NhblRvRGVsZXRlKCkgYW5kIGdp bkRlbGV0ZVBhZ2UoKSBwYXNzZWQgQmxvY2tOdW1iZXJzIGFuZApyZS1yZWFkIHBhZ2VzIHRoYXQg d2VyZSBhbHJlYWR5IHBpbm5lZCBhbmQgbG9ja2VkIGR1cmluZyB0aGUgdHJlZSB3YWxrLiAgVGhl CmNhbGxlciBnaW5WYWN1dW1Qb3N0aW5nVHJlZSgpKSBoZWxkIGEgY2xlYW51cC1sb2NrZWQgcm9v dCBidWZmZXIsIHlldApnaW5TY2FuVG9EZWxldGUoKSByZS1yZWFkIGl0IGJ5IGJsb2NrIG51bWJl ciB3aXRoIHNwZWNpYWwtY2FzZSBjb2RlIHRvIHNraXAKcmUtbG9ja2luZy4KClJld29yayBib3Ro IGZ1bmN0aW9ucyB0byBwYXNzIEJ1ZmZlcnMgZGlyZWN0bHkuICBEYXRhUGFnZURlbGV0ZVN0YWNr IG5vdwpjYXJyaWVzIGJ1ZmZlciwgbXlvZmYgKGRvd25saW5rIG9mZnNldCBpbiBwYXJlbnQpLCBh bmQgaXNSb290IHBlciBsZXZlbCwKc28gZ2luU2NhblRvRGVsZXRlKCkgdGFrZXMgb25seSBHaW5W YWN1dW1TdGF0ZSBhbmQgRGF0YVBhZ2VEZWxldGVTdGFjawpwb2ludGVycy4gIEFsc28sIGdpbkRl bGV0ZVBhZ2UoKSByZWNlaXZlcyB0aGUgdGhyZWUgQnVmZmVycyBkaXJlY3RseSwgYW5kCm5vIGxv bmdlciByZWFkcyBvciByZWxlYXNlcyB0aGVtIGl0c2VsZi4gIFRoZSBjYWxsZXIgcmVhZHMgYW5k IGxvY2tzIGNoaWxkCnBhZ2VzIGJlZm9yZSByZWN1cnNpbmcsIGFuZCBtYW5hZ2VzIGJ1ZmZlciBs aWZlY3ljbGUgYWZ0ZXJ3YXJkLgoKVGhpcyBlbGltaW5hdGVzIHRoZSBjb25mdXNpbmcgaXNSb290 IHNwZWNpYWwgY2FzZXMgaW4gYnVmZmVyIG1hbmFnZW1lbnQsCmluY2x1ZGluZyB0aGUgYXBwYXJl bnQgKGJ1dCB1bnJlYWNoYWJsZSkgZG91YmxlIHJlbGVhc2Ugb2YgdGhlIHJvb3QKYnVmZmVyIGlk ZW50aWZpZWQgYnkgQW5kcmVzIEZyZXVuZC4KCkFkZCBjb21tZW50cyBleHBsYWluaW5nIHRoZSBs b2NraW5nIHByb3RvY29sIGFuZCB0aGUgRGF0YVBhZ2VEZWxldGVTdGFjawpzdHJ1Y3R1cmUuCgpS ZXBvcnRlZC1ieTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL3V0cmx4aWo0M2ZiZ3V6dzRrbGR0ZTJzcGM0YnRvbGRpenV0 Y3F5cmZha3FuYnJwM2lyQHBoM3NwaHBqNGFzegotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4v Z2ludmFjdXVtLmMgfCAxOTAgKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0KIDEgZmlsZSBj aGFuZ2VkLCAxMTMgaW5zZXJ0aW9ucygrKSwgNzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW52YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9n aW4vZ2ludmFjdXVtLmMKaW5kZXggYzlmMTQzZjZjMzEuLjE3Njc0ZDdlMDNkIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9naW4vZ2ludmFjdXVtLmMKQEAgLTExMCwzMSArMTEwLDUxIEBAIHhsb2dWYWN1dW1QYWdl KFJlbGF0aW9uIGluZGV4LCBCdWZmZXIgYnVmZmVyKQogfQogCiAKKy8qCisgKiBTdGFjayBlbnRy eSB1c2VkIGR1cmluZyBwb3N0aW5nIHRyZWUgZW1wdHktcGFnZSBkZWxldGlvbiBzY2FuLgorICoK KyAqIE9uZSBEYXRhUGFnZURlbGV0ZVN0YWNrIGVudHJ5IGlzIGFsbG9jYXRlZCBwZXIgdHJlZSBs ZXZlbC4gIEFzCisgKiBnaW5TY2FuVG9EZWxldGUoKSByZWN1cnNlcyBkb3duIHRoZSB0cmVlLCBl YWNoIGVudHJ5IHRyYWNrcyB0aGUgYnVmZmVyCisgKiBvZiB0aGUgcGFnZSBjdXJyZW50bHkgYmVp bmcgdmlzaXRlZCBhdCB0aGF0IGxldmVsICgnYnVmZmVyJyksIGFuZCB0aGUKKyAqIGJ1ZmZlciBv ZiBpdHMgbGVmdCBzaWJsaW5nICgnbGVmdEJ1ZmZlcicpLiAgVGhlIGxlZnQgcGFnZSBpcyBrZXB0 IHBpbm5lZAorICogYW5kIGV4Y2x1c2l2ZWx5IGxvY2tlZCBiZWNhdXNlIGdpbkRlbGV0ZVBhZ2Uo KSBuZWVkcyBpdCB0byB1cGRhdGUgdGhlCisgKiBzaWJsaW5nIGNoYWluOyBhY3F1aXJpbmcgaXQg bGF0ZXIgY291bGQgZGVhZGxvY2sgd2l0aCBnaW5TdGVwUmlnaHQoKSwKKyAqIHdoaWNoIGxvY2tz IHBhZ2VzIGxlZnQtdG8tcmlnaHQuCisgKi8KIHR5cGVkZWYgc3RydWN0IERhdGFQYWdlRGVsZXRl U3RhY2sKIHsKIAlzdHJ1Y3QgRGF0YVBhZ2VEZWxldGVTdGFjayAqY2hpbGQ7CiAJc3RydWN0IERh dGFQYWdlRGVsZXRlU3RhY2sgKnBhcmVudDsKIAotCUJsb2NrTnVtYmVyIGJsa25vOwkJCS8qIGN1 cnJlbnQgYmxvY2sgbnVtYmVyICovCi0JQnVmZmVyCQlsZWZ0QnVmZmVyOwkJLyogcGlubmVkIGFu ZCBsb2NrZWQgcmlnaHRlc3Qgbm9uLWRlbGV0ZWQgcGFnZQotCQkJCQkJCQkgKiBvbiBsZWZ0ICov CisJQnVmZmVyCQlidWZmZXI7CQkJLyogYnVmZmVyIGZvciB0aGUgcGFnZSBiZWluZyB2aXNpdGVk IGF0IHRoaXMKKwkJCQkJCQkJICogdHJlZSBsZXZlbCAqLworCUJ1ZmZlcgkJbGVmdEJ1ZmZlcjsJ CS8qIHBpbm5lZCBhbmQgbG9ja2VkIHJpZ2h0bW9zdCBub24tZGVsZXRlZAorCQkJCQkJCQkgKiBz aWJsaW5nIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJyZW50IHBhZ2UgKi8KKwlPZmZzZXROdW1iZXIg bXlvZmY7CQkJLyogb2Zmc2V0IG9mIHRoaXMgcGFnZSdzIGRvd25saW5rIGluIHRoZQorCQkJCQkJ CQkgKiBwYXJlbnQgKi8KIAlib29sCQlpc1Jvb3Q7CiB9IERhdGFQYWdlRGVsZXRlU3RhY2s7CiAK IAogLyoKICAqIERlbGV0ZSBhIHBvc3RpbmcgdHJlZSBwYWdlLgorICoKKyAqIFJlbW92ZXMgdGhl IHBhZ2UgaWRlbnRpZmllZCBieSBkQnVmZmVyIGZyb20gdGhlIHBvc3RpbmcgdHJlZSBieSB1cGRh dGluZworICogdGhlIGxlZnQgc2libGluZydzIHJpZ2h0bGluayAoaW4gbEJ1ZmZlcikgdG8gc2tp cCBvdmVyIHRoZSBkZWxldGVkIHBhZ2UsCisgKiBhbmQgcmVtb3ZpbmcgdGhlIGRvd25saW5rIGZy b20gdGhlIHBhcmVudCBwYWdlIChpbiBwQnVmZmVyKS4gIEFsbCB0aHJlZQorICogYnVmZmVycyBt dXN0IGFscmVhZHkgaGF2ZSBiZWVuIHBpbm5lZCBhbmQgZXhjbHVzaXZlbHkgbG9ja2VkIGJ5IHRo ZSBjYWxsZXIuCisgKgorICogVGhlIGJ1ZmZlcnMgYXJlIE5PVCByZWxlYXNlZCBub3IgdW5sb2Nr ZWQgaGVyZTsgdGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQorICogZm9yIHRoaXMuCiAgKi8KIHN0 YXRpYyB2b2lkCi1naW5EZWxldGVQYWdlKEdpblZhY3V1bVN0YXRlICpndnMsIEJsb2NrTnVtYmVy IGRlbGV0ZUJsa25vLCBCbG9ja051bWJlciBsZWZ0Qmxrbm8sCi0JCQkgIEJsb2NrTnVtYmVyIHBh cmVudEJsa25vLCBPZmZzZXROdW1iZXIgbXlvZmYsIGJvb2wgaXNQYXJlbnRSb290KQorZ2luRGVs ZXRlUG9zdGluZ1BhZ2UoR2luVmFjdXVtU3RhdGUgKmd2cywgQnVmZmVyIGRCdWZmZXIsIEJ1ZmZl ciBsQnVmZmVyLAorCQkJCQkgQnVmZmVyIHBCdWZmZXIsIE9mZnNldE51bWJlciBteW9mZiwgYm9v bCBpc1BhcmVudFJvb3QpCiB7Ci0JQnVmZmVyCQlkQnVmZmVyOwotCUJ1ZmZlcgkJbEJ1ZmZlcjsK LQlCdWZmZXIJCXBCdWZmZXI7CiAJUGFnZQkJcGFnZSwKIAkJCQlwYXJlbnRQYWdlOwogCUJsb2Nr TnVtYmVyIHJpZ2h0bGluazsKKwlCbG9ja051bWJlciBkZWxldGVCbGtubyA9IEJ1ZmZlckdldEJs b2NrTnVtYmVyKGRCdWZmZXIpOwogCiAJLyoKIAkgKiBUaGlzIGZ1bmN0aW9uIE1VU1QgYmUgY2Fs bGVkIG9ubHkgaWYgc29tZW9uZSBvZiBwYXJlbnQgcGFnZXMgaG9sZApAQCAtMTQyLDEyICsxNjIs NiBAQCBnaW5EZWxldGVQYWdlKEdpblZhY3V1bVN0YXRlICpndnMsIEJsb2NrTnVtYmVyIGRlbGV0 ZUJsa25vLCBCbG9ja051bWJlciBsZWZ0QmxrbgogCSAqIGhhcHBlbiBpbiB0aGlzIHN1YnRyZWUu IENhbGxlciBhbHNvIGFjcXVpcmVzIEV4Y2x1c2l2ZSBsb2NrcyBvbgogCSAqIGRlbGV0YWJsZSwg cGFyZW50IGFuZCBsZWZ0IHBhZ2VzLgogCSAqLwotCWxCdWZmZXIgPSBSZWFkQnVmZmVyRXh0ZW5k ZWQoZ3ZzLT5pbmRleCwgTUFJTl9GT1JLTlVNLCBsZWZ0Qmxrbm8sCi0JCQkJCQkJCSBSQk1fTk9S TUFMLCBndnMtPnN0cmF0ZWd5KTsKLQlkQnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGd2cy0+ aW5kZXgsIE1BSU5fRk9SS05VTSwgZGVsZXRlQmxrbm8sCi0JCQkJCQkJCSBSQk1fTk9STUFMLCBn dnMtPnN0cmF0ZWd5KTsKLQlwQnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGd2cy0+aW5kZXgs IE1BSU5fRk9SS05VTSwgcGFyZW50Qmxrbm8sCi0JCQkJCQkJCSBSQk1fTk9STUFMLCBndnMtPnN0 cmF0ZWd5KTsKIAogCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGRCdWZmZXIpOwogCXJpZ2h0bGluayA9 IEdpblBhZ2VHZXRPcGFxdWUocGFnZSktPnJpZ2h0bGluazsKQEAgLTIyNiw1NSArMjQwLDM3IEBA IGdpbkRlbGV0ZVBhZ2UoR2luVmFjdXVtU3RhdGUgKmd2cywgQmxvY2tOdW1iZXIgZGVsZXRlQmxr bm8sIEJsb2NrTnVtYmVyIGxlZnRCbGtuCiAKIAlFTkRfQ1JJVF9TRUNUSU9OKCk7CiAKLQlSZWxl YXNlQnVmZmVyKHBCdWZmZXIpOwotCVJlbGVhc2VCdWZmZXIobEJ1ZmZlcik7Ci0JUmVsZWFzZUJ1 ZmZlcihkQnVmZmVyKTsKLQogCWd2cy0+cmVzdWx0LT5wYWdlc19uZXdseV9kZWxldGVkKys7CiAJ Z3ZzLT5yZXN1bHQtPnBhZ2VzX2RlbGV0ZWQrKzsKIH0KIAogCiAvKgotICogU2NhbnMgcG9zdGlu ZyB0cmVlIGFuZCBkZWxldGVzIGVtcHR5IHBhZ2VzLiAgQ2FsbGVyIG11c3QgbG9jayByb290IHBh Z2UgZm9yCi0gKiBjbGVhbnVwLiAgRHVyaW5nIHNjYW4gcGF0aCBmcm9tIHJvb3QgdG8gY3VycmVu dCBwYWdlIGlzIGtlcHQgZXhjbHVzaXZlbHkKLSAqIGxvY2tlZC4gIEFsc28ga2VlcCBsZWZ0IHBh Z2UgZXhjbHVzaXZlbHkgbG9ja2VkLCBiZWNhdXNlIGdpbkRlbGV0ZVBhZ2UoKQotICogbmVlZHMg aXQuICBJZiB3ZSB0cnkgdG8gcmVsb2NrIGxlZnQgcGFnZSBsYXRlciwgaXQgY291bGQgZGVhZGxv Y2sgd2l0aAotICogZ2luU3RlcFJpZ2h0KCkuCisgKiBTY2FucyBhIHBvc3RpbmcgdHJlZSBhbmQg ZGVsZXRlcyBlbXB0eSBwYWdlcy4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBhIGNsZWFu dXAgbG9jayBvbiB0aGUgcm9vdCBwYWdlIHRvIHByZXZlbnQgY29uY3VycmVudAorICogaW5zZXJ0 cy4gIFRoZSBlbnRpcmUgcGF0aCBmcm9tIHRoZSByb290IGRvd24gdG8gdGhlIGN1cnJlbnQgcGFn ZSBpcyBrZXB0CisgKiBleGNsdXNpdmVseSBsb2NrZWQgdGhyb3VnaG91dCB0aGUgc2Nhbi4gIFRo ZSBsZWZ0IHNpYmxpbmcgYXQgZWFjaCBsZXZlbCBpcworICogYWxzbyBrZXB0IGxvY2tlZCwgYmVj YXVzZSBnaW5EZWxldGVQYWdlKCkgbmVlZHMgaXQgdG8gdXBkYXRlIHRoZSByaWdodGxpbmsKKyAq IG9mIHRoZSBsZWZ0IHNpYmxpbmc7IHJlLWFjcXVpcmluZyB0aGUgbGVmdCBzaWJsaW5nIGxvY2sg bGF0ZXIgY291bGQKKyAqIGRlYWRsb2NrIHdpdGggZ2luU3RlcFJpZ2h0KCksIHdoaWNoIGFjcXVp cmVzIHBhZ2UgbG9ja3MgbGVmdC10by1yaWdodC4KKyAqCisgKiBBbGwgcGVyLWxldmVsIHN0YXRl IGlzIGNhcnJpZWQgaW4gJ215U3RhY2tJdGVtJzogdGhlIGJ1ZmZlciB0byBwcm9jZXNzCisgKiAo bXVzdCBhbHJlYWR5IGJlIHBpbm5lZCBhbmQgZXhjbHVzaXZlbHkgbG9ja2VkKSwgdGhlIGxlZnQg c2libGluZyBidWZmZXIsCisgKiBhbmQgdGhpcyBwYWdlJ3Mgb2Zmc2V0IGluIHRoZSBwYXJlbnQn cyBkb3dubGluayBhcnJheS4gIFRoZSByb290IGVudHJ5IGlzCisgKiBzZXQgdXAgYnkgZ2luVmFj dXVtUG9zdGluZ1RyZWUoKTsgY2hpbGQgZW50cmllcyBhcmUgcG9wdWxhdGVkIGhlcmUgYmVmb3Jl CisgKiByZWN1cnNpbmcuCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBwYWdlIHdhcyBkZWxl dGVkLCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBib29sCi1naW5TY2FuVG9EZWxldGUo R2luVmFjdXVtU3RhdGUgKmd2cywgQmxvY2tOdW1iZXIgYmxrbm8sIGJvb2wgaXNSb290LAotCQkJ CURhdGFQYWdlRGVsZXRlU3RhY2sgKnBhcmVudCwgT2Zmc2V0TnVtYmVyIG15b2ZmKQorZ2luU2Nh blBvc3RpbmdUcmVlVG9EZWxldGUoR2luVmFjdXVtU3RhdGUgKmd2cywgRGF0YVBhZ2VEZWxldGVT dGFjayAqbXlTdGFja0l0ZW0pCiB7Ci0JRGF0YVBhZ2VEZWxldGVTdGFjayAqbWU7Ci0JQnVmZmVy CQlidWZmZXI7CisJQnVmZmVyCQlidWZmZXIgPSBteVN0YWNrSXRlbS0+YnVmZmVyOwogCVBhZ2UJ CXBhZ2U7Ci0JYm9vbAkJbWVEZWxldGUgPSBmYWxzZTsKKwlib29sCQlwYWdlV2FzRGVsZXRlZCA9 IGZhbHNlOwogCWJvb2wJCWlzZW1wdHk7CiAKLQlpZiAoaXNSb290KQotCXsKLQkJbWUgPSBwYXJl bnQ7Ci0JfQotCWVsc2UKLQl7Ci0JCWlmICghcGFyZW50LT5jaGlsZCkKLQkJewotCQkJbWUgPSBw YWxsb2MwX29iamVjdChEYXRhUGFnZURlbGV0ZVN0YWNrKTsKLQkJCW1lLT5wYXJlbnQgPSBwYXJl bnQ7Ci0JCQlwYXJlbnQtPmNoaWxkID0gbWU7Ci0JCQltZS0+bGVmdEJ1ZmZlciA9IEludmFsaWRC dWZmZXI7Ci0JCX0KLQkJZWxzZQotCQkJbWUgPSBwYXJlbnQtPmNoaWxkOwotCX0KLQotCWJ1ZmZl ciA9IFJlYWRCdWZmZXJFeHRlbmRlZChndnMtPmluZGV4LCBNQUlOX0ZPUktOVU0sIGJsa25vLAot CQkJCQkJCQlSQk1fTk9STUFMLCBndnMtPnN0cmF0ZWd5KTsKLQotCWlmICghaXNSb290KQotCQlM b2NrQnVmZmVyKGJ1ZmZlciwgR0lOX0VYQ0xVU0lWRSk7Ci0KIAlwYWdlID0gQnVmZmVyR2V0UGFn ZShidWZmZXIpOwogCiAJQXNzZXJ0KEdpblBhZ2VJc0RhdGEocGFnZSkpOwpAQCAtMjgzLDE5ICsy NzksNDggQEAgZ2luU2NhblRvRGVsZXRlKEdpblZhY3V1bVN0YXRlICpndnMsIEJsb2NrTnVtYmVy IGJsa25vLCBib29sIGlzUm9vdCwKIAl7CiAJCU9mZnNldE51bWJlciBpOwogCi0JCW1lLT5ibGtu byA9IGJsa25vOwotCQlmb3IgKGkgPSBGaXJzdE9mZnNldE51bWJlcjsgaSA8PSBHaW5QYWdlR2V0 T3BhcXVlKHBhZ2UpLT5tYXhvZmY7IGkrKykKKwkJZm9yIChpID0gRmlyc3RPZmZzZXROdW1iZXI7 IGkgPD0gR2luUGFnZUdldE9wYXF1ZShwYWdlKS0+bWF4b2ZmOykKIAkJewogCQkJUG9zdGluZ0l0 ZW0gKnBpdGVtID0gR2luRGF0YVBhZ2VHZXRQb3N0aW5nSXRlbShwYWdlLCBpKTsKKwkJCUJ1ZmZl cgkJY2hpbGRCdWZmZXI7CisKKwkJCWNoaWxkQnVmZmVyID0gUmVhZEJ1ZmZlckV4dGVuZGVkKGd2 cy0+aW5kZXgsCisJCQkJCQkJCQkJCSBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkJCSBQb3N0aW5n SXRlbUdldEJsb2NrTnVtYmVyKHBpdGVtKSwKKwkJCQkJCQkJCQkJIFJCTV9OT1JNQUwsIGd2cy0+ c3RyYXRlZ3kpOworCQkJTG9ja0J1ZmZlcihjaGlsZEJ1ZmZlciwgR0lOX0VYQ0xVU0lWRSk7CisK KwkJCS8qIEFsbG9jYXRlIGEgY2hpbGQgc3RhY2sgZW50cnkgb24gZmlyc3QgdXNlOyByZXVzZSB0 aGVyZWFmdGVyICovCisJCQlpZiAoIW15U3RhY2tJdGVtLT5jaGlsZCkKKwkJCXsKKwkJCQlteVN0 YWNrSXRlbS0+Y2hpbGQgPSBwYWxsb2MwX29iamVjdChEYXRhUGFnZURlbGV0ZVN0YWNrKTsKKwkJ CQlteVN0YWNrSXRlbS0+Y2hpbGQtPnBhcmVudCA9IG15U3RhY2tJdGVtOworCQkJCW15U3RhY2tJ dGVtLT5jaGlsZC0+bGVmdEJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJCQl9CiAKLQkJCWlmIChn aW5TY2FuVG9EZWxldGUoZ3ZzLCBQb3N0aW5nSXRlbUdldEJsb2NrTnVtYmVyKHBpdGVtKSwgZmFs c2UsIG1lLCBpKSkKLQkJCQlpLS07CisJCQlteVN0YWNrSXRlbS0+Y2hpbGQtPmJ1ZmZlciA9IGNo aWxkQnVmZmVyOworCQkJbXlTdGFja0l0ZW0tPmNoaWxkLT5pc1Jvb3QgPSBmYWxzZTsKKwkJCW15 U3RhY2tJdGVtLT5jaGlsZC0+bXlvZmYgPSBpOworCisJCQkvKgorCQkJICogUmVjdXJzZSBpbnRv IGNoaWxkLiAgSWYgdGhlIGNoaWxkIHBhZ2Ugd2FzIGRlbGV0ZWQsIGl0cworCQkJICogZG93bmxp bmsgd2FzIHJlbW92ZWQgZnJvbSBvdXIgcGFnZSwgc28gcmUtZXhhbWluZSB0aGUgc2FtZQorCQkJ ICogb2Zmc2V0OyBvdGhlcndpc2UgYWR2YW5jZSB0byB0aGUgbmV4dCBkb3dubGluay4KKwkJCSAq LworCQkJaWYgKCFnaW5TY2FuUG9zdGluZ1RyZWVUb0RlbGV0ZShndnMsIG15U3RhY2tJdGVtLT5j aGlsZCkpCisJCQkJaSsrOwogCQl9CisJCW15U3RhY2tJdGVtLT5idWZmZXIgPSBJbnZhbGlkQnVm ZmVyOwogCi0JCWlmIChHaW5QYWdlUmlnaHRNb3N0KHBhZ2UpICYmIEJ1ZmZlcklzVmFsaWQobWUt PmNoaWxkLT5sZWZ0QnVmZmVyKSkKKwkJLyoKKwkJICogQWZ0ZXIgcHJvY2Vzc2luZyBhbGwgY2hp bGRyZW4gYXQgdGhpcyBsZXZlbCwgcmVsZWFzZSB0aGUgY2hpbGQKKwkJICogbGV2ZWwncyBsZWZ0 QnVmZmVyIGlmIHdlJ3JlIGF0IHRoZSByaWdodG1vc3QgcGFnZS4gIFRoZXJlIGlzIG5vCisJCSAq IHJpZ2h0IHNpYmxpbmcgdGhhdCBjb3VsZCBuZWVkIGl0IGZvciBkZWxldGlvbi4KKwkJICovCisJ CWlmIChHaW5QYWdlUmlnaHRNb3N0KHBhZ2UpICYmIEJ1ZmZlcklzVmFsaWQobXlTdGFja0l0ZW0t PmNoaWxkLT5sZWZ0QnVmZmVyKSkKIAkJewotCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihtZS0+Y2hp bGQtPmxlZnRCdWZmZXIpOwotCQkJbWUtPmNoaWxkLT5sZWZ0QnVmZmVyID0gSW52YWxpZEJ1ZmZl cjsKKwkJCVVubG9ja1JlbGVhc2VCdWZmZXIobXlTdGFja0l0ZW0tPmNoaWxkLT5sZWZ0QnVmZmVy KTsKKwkJCW15U3RhY2tJdGVtLT5jaGlsZC0+bGVmdEJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CiAJ CX0KIAl9CiAKQEAgLTMwNiwzNCArMzMxLDQxIEBAIGdpblNjYW5Ub0RlbGV0ZShHaW5WYWN1dW1T dGF0ZSAqZ3ZzLCBCbG9ja051bWJlciBibGtubywgYm9vbCBpc1Jvb3QsCiAKIAlpZiAoaXNlbXB0 eSkKIAl7Ci0JCS8qIHdlIG5ldmVyIGRlbGV0ZSB0aGUgbGVmdC0gb3IgcmlnaHRtb3N0IGJyYW5j aCAqLwotCQlpZiAoQnVmZmVySXNWYWxpZChtZS0+bGVmdEJ1ZmZlcikgJiYgIUdpblBhZ2VSaWdo dE1vc3QocGFnZSkpCisJCS8qCisJCSAqIFByb2NlZWQgdG8gdGhlIGdpbkRlbGV0ZVBhZ2UoKSBp ZiB0aGF0J3Mgbm90IHRoZSBsZWZ0bW9zdCBvciB0aGUKKwkJICogcmlnaHRtb3N0IHBhZ2UuCisJ CSAqLworCQlpZiAoQnVmZmVySXNWYWxpZChteVN0YWNrSXRlbS0+bGVmdEJ1ZmZlcikgJiYgIUdp blBhZ2VSaWdodE1vc3QocGFnZSkpCiAJCXsKLQkJCUFzc2VydCghaXNSb290KTsKLQkJCWdpbkRl bGV0ZVBhZ2UoZ3ZzLCBibGtubywgQnVmZmVyR2V0QmxvY2tOdW1iZXIobWUtPmxlZnRCdWZmZXIp LAotCQkJCQkJICBtZS0+cGFyZW50LT5ibGtubywgbXlvZmYsIG1lLT5wYXJlbnQtPmlzUm9vdCk7 Ci0JCQltZURlbGV0ZSA9IHRydWU7CisJCQlBc3NlcnQoIW15U3RhY2tJdGVtLT5pc1Jvb3QpOwor CQkJZ2luRGVsZXRlUG9zdGluZ1BhZ2UoZ3ZzLCBidWZmZXIsIG15U3RhY2tJdGVtLT5sZWZ0QnVm ZmVyLAorCQkJCQkJCQkgbXlTdGFja0l0ZW0tPnBhcmVudC0+YnVmZmVyLAorCQkJCQkJCQkgbXlT dGFja0l0ZW0tPm15b2ZmLAorCQkJCQkJCQkgbXlTdGFja0l0ZW0tPnBhcmVudC0+aXNSb290KTsK KwkJCXBhZ2VXYXNEZWxldGVkID0gdHJ1ZTsKIAkJfQogCX0KIAotCWlmICghbWVEZWxldGUpCisJ aWYgKCFwYWdlV2FzRGVsZXRlZCkKIAl7Ci0JCWlmIChCdWZmZXJJc1ZhbGlkKG1lLT5sZWZ0QnVm ZmVyKSkKLQkJCVVubG9ja1JlbGVhc2VCdWZmZXIobWUtPmxlZnRCdWZmZXIpOwotCQltZS0+bGVm dEJ1ZmZlciA9IGJ1ZmZlcjsKKwkJLyoKKwkJICogS2VlcCB0aGlzIHBhZ2UgYXMgdGhlIG5ldyBs ZWZ0QnVmZmVyIGZvciB0aGlzIGxldmVsOiB0aGUgbmV4dAorCQkgKiBzaWJsaW5nIHRvIHRoZSBy aWdodCBtaWdodCBuZWVkIGl0IGZvciBkZWxldGlvbi4gIFJlbGVhc2UgYW55CisJCSAqIHByZXZp b3VzbHkgaGVsZCBsZWZ0IHBhZ2UgZmlyc3QuCisJCSAqLworCQlpZiAoQnVmZmVySXNWYWxpZCht eVN0YWNrSXRlbS0+bGVmdEJ1ZmZlcikpCisJCQlVbmxvY2tSZWxlYXNlQnVmZmVyKG15U3RhY2tJ dGVtLT5sZWZ0QnVmZmVyKTsKKwkJbXlTdGFja0l0ZW0tPmxlZnRCdWZmZXIgPSBidWZmZXI7CiAJ fQogCWVsc2UKIAl7Ci0JCWlmICghaXNSb290KQotCQkJTG9ja0J1ZmZlcihidWZmZXIsIEdJTl9V TkxPQ0spOwotCi0JCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKKwkJLyoKKwkJICogUGFnZSB3YXMg ZGVsZXRlZDsgcmVsZWFzZSB0aGUgYnVmZmVyLiAgbGVmdEJ1ZmZlciByZW1haW5zIHRoZSBzYW1l LgorCQkgKi8KKwkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWZmZXIpOwogCX0KIAotCWlmIChpc1Jv b3QpCi0JCVJlbGVhc2VCdWZmZXIoYnVmZmVyKTsKLQotCXJldHVybiBtZURlbGV0ZTsKKwlyZXR1 cm4gcGFnZVdhc0RlbGV0ZWQ7CiB9CiAKIApAQCAtNDE3LDYgKzQ0OSw3IEBAIGdpblZhY3V1bVBv c3RpbmdUcmVlKEdpblZhY3V1bVN0YXRlICpndnMsIEJsb2NrTnVtYmVyIHJvb3RCbGtubykKIAkJ RGF0YVBhZ2VEZWxldGVTdGFjayByb290LAogCQkJCSAgICpwdHIsCiAJCQkJICAgKnRtcDsKKwkJ Ym9vbAkJZGVsZXRlZCBQR19VU0VEX0ZPUl9BU1NFUlRTX09OTFk7CiAKIAkJYnVmZmVyID0gUmVh ZEJ1ZmZlckV4dGVuZGVkKGd2cy0+aW5kZXgsIE1BSU5fRk9SS05VTSwgcm9vdEJsa25vLAogCQkJ CQkJCQkJUkJNX05PUk1BTCwgZ3ZzLT5zdHJhdGVneSk7CkBAIC00MjgsMTAgKzQ2MSwxMyBAQCBn aW5WYWN1dW1Qb3N0aW5nVHJlZShHaW5WYWN1dW1TdGF0ZSAqZ3ZzLCBCbG9ja051bWJlciByb290 Qmxrbm8pCiAJCUxvY2tCdWZmZXJGb3JDbGVhbnVwKGJ1ZmZlcik7CiAKIAkJbWVtc2V0KCZyb290 LCAwLCBzaXplb2YoRGF0YVBhZ2VEZWxldGVTdGFjaykpOworCQlyb290LmJ1ZmZlciA9IGJ1ZmZl cjsKIAkJcm9vdC5sZWZ0QnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwkJcm9vdC5teW9mZiA9IElu dmFsaWRPZmZzZXROdW1iZXI7CiAJCXJvb3QuaXNSb290ID0gdHJ1ZTsKIAotCQlnaW5TY2FuVG9E ZWxldGUoZ3ZzLCByb290Qmxrbm8sIHRydWUsICZyb290LCBJbnZhbGlkT2Zmc2V0TnVtYmVyKTsK KwkJZGVsZXRlZCA9IGdpblNjYW5Qb3N0aW5nVHJlZVRvRGVsZXRlKGd2cywgJnJvb3QpOworCQlB c3NlcnQoIWRlbGV0ZWQpOwogCiAJCXB0ciA9IHJvb3QuY2hpbGQ7CiAKLS0gCjIuMzkuNSAoQXBw bGUgR2l0LTE1NCkKCg== --000000000000d277dd064cc7554e--