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 1w2uyX-000jEj-0n for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 17:46:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w2uyW-00D360-0W for pgsql-hackers@arkaria.postgresql.org; Wed, 18 Mar 2026 17:46:32 +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 1w2uyV-00D35r-28 for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 17:46:31 +0000 Received: from mail-ed1-x533.google.com ([2a00:1450:4864:20::533]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w2uyS-00000000yR9-3s5r for pgsql-hackers@lists.postgresql.org; Wed, 18 Mar 2026 17:46:31 +0000 Received: by mail-ed1-x533.google.com with SMTP id 4fb4d7f45d1cf-667acaeae82so275214a12.3 for ; Wed, 18 Mar 2026 10:46:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773855987; cv=none; d=google.com; s=arc-20240605; b=NwNz7UcNwgIyeFBdenNLkvm+K3YeX/5Iw7XTYAFjM4FMnibmWszdYzpXQErltA1BTT DdRZV/7FgtT6237uhheLfU97uV19h2d8+oTEPK5oNSwXzNUPRts7N4yjOVKDRlNjgMHE T8AIek28u2Kvytf+nu6jTCGIpD8UdLYbQN7OYQe3FdJt05R/ttQhCjb5mJ/zH4/lqbUD 8NHFMQX+tOR6pT8nzwAQbECqJus30lC4odwuUGVQmLefkzFErd0nEFIKY5+4zMwAwa1C dPuNvNBA2VPIeUVW2eTrEazC6Ycz/hzGhaP6VhFXbiM8T7OMIpLv/X/ufHgTpGrT1FYO mwAw== 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=kSmzJRqjqbbyVhRvmONIX1QViStsKQxjEpv68PPUykg=; fh=CD1LV5odxGKpMs4i9X+JFBrXDLfs07G5LJ51yQy2ZP4=; b=TYtWNrj6u72L9zWcVfOHeLg6aK+sc8bh1Lb0+cqlbnAePloiMTDLFBjwESDkpDGpfT o6j01nzfWClf+vrIqeILrj5RlsN9Gz/h+bf1qhXCyVLlnzQ3DbFrQj7YrkfaK6p5SkAF H69f4g0b7JDV+HGojOmI3MWjOJlXTNPnEYH5TBQNEfkhCfky2S5MNwmutzeucKtOIj61 7MIuee8Tm6FOmOahAJIN0z6V+rDd8uv7s9m1XoZ/9rnzhmwULiGZEPhfBiMC+qGxal59 BxtCKc/Q7IW2uHn+jZ7gQ8lAFXFnRmbZPNFOAMa3IzpSj56cDfUFrE6ZTul4pHeFOiP9 5xeg==; 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=1773855987; x=1774460787; 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=kSmzJRqjqbbyVhRvmONIX1QViStsKQxjEpv68PPUykg=; b=j2pD7NHQWzsxVJOS5CLPGTh6cHBSs4KHf/Y1Ezn4/L8fG6HN4e+tgYTpDk+OJ0IU8F 0P4k80YRUaTRnxSTWwFSjyn2qzUL1U/rPogZ8sqzljnl0rGt8V9Jx8xAPR4jBr9XBEf8 3qqNar0HOswXXY04ErkAg4YlEGVKcvCakfxMRugtgvrY1wb2Qai1RdVUHL10jspn6H48 uQ8FVv0GdJyBhJp5TjebSxkwvtRqgRTaNWNt0MEhfJa39vaP9YmTnXs31h/L5jcDqpVz 7n2pqf/j1Lj3kXAe5JOxWhaS02AJRIwPSPEFgK0eCz/fiypWgAWDwzxSWx26MgZow0IR uE7A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773855987; x=1774460787; 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=kSmzJRqjqbbyVhRvmONIX1QViStsKQxjEpv68PPUykg=; b=XcOERYvF8IsRqUmTkE2Fz20r9xJD7D3uBNqTVRKUzOzN2qNxzbpPMTIs5uocHipzW5 rtpfjpy4kH81JJK5+9gmB+Tb7h+DBrZsZLUBDGpszE2jski25IFslDNnp8R5Z1dUXP6p u25scRsFHgt+xkC7D4EzMpwQdu0UWre74PoBJQvxhu9IGDHSf8oD4BpoYp36ZKkyQNJI 1hduMYtICfMpT3MMPoDnJ2prp+wwa7m+6SIexsqzZUxq/deGhn0wgxc3C8ApiqQNTotI ZnxGvHXAQ5cVabfuOL1WM77t/uyrikjZ5tWOZCeCrtDsq9hh2IH/4pp5QSCBDF7XYicW sIZg== X-Gm-Message-State: AOJu0YwIh7R4J3W7k7irtC/Yn/2rUe8McVqRGNDFEIFtkirzZxC52Aj+ Cw61+RXo/DEFXdo6N9KMDfBQE/8u6klfD6FmQpojjn4sDB1/g7m702cQUI8ENATh7HHIS4zPomJ hTz5rhASH2p4ZIYqRFqntM39YQgXq3FE= X-Gm-Gg: ATEYQzyWzFDdjMH/LHfKcKVGHwkn4Yh5nTORGH09TcG30kJJ7lTU5Kb/D3025qwHlOy xiOgNmxxuYWZySLmlQ9uEv9CoT97iPHJxV+JWpl58AGyTMqqX4DZ6SlKWervzpDuk75HBFLquIK BxgW4IvbyLdPfl/qnAH6f3qGszN1ZtSNo0UTIcuw9Fz3u0NUaMUu9W4g4OxKpDlJL9Pl5BHYlS5 jZQjjX3s2ewdy6waUS9B7kVcBldSuRktCYO9w+paKA69yOcsluI/ZvgkgAjRSi+piBWxBLEodO6 IKX9tDy38PwRsG827gOVeSxg8XEusps2DAYrPl4= X-Received: by 2002:a17:906:518a:20b0:b96:edf8:5baa with SMTP id a640c23a62f3a-b97f4a61b54mr187259366b.32.1773855987118; Wed, 18 Mar 2026 10:46:27 -0700 (PDT) MIME-Version: 1.0 References: <11E4DBC2-7DE2-4CD9-8D64-EA30B2937193@gmail.com> In-Reply-To: <11E4DBC2-7DE2-4CD9-8D64-EA30B2937193@gmail.com> From: Robert Haas Date: Wed, 18 Mar 2026 13:46:14 -0400 X-Gm-Features: AaiRm52hPkQdqYuSTwT-zwbsLPeC47h8_9kPIxYh02AdJhkvrv-7hpAmnbGX-mo Message-ID: Subject: Re: dshash_find_or_insert vs. OOM To: Chao Li Cc: PostgreSQL Hackers , Andres Freund , Thomas Munro Content-Type: multipart/mixed; boundary="000000000000ff018f064d5007ea" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ff018f064d5007ea Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 17, 2026 at 9:34=E2=80=AFPM Chao Li wr= ote: > When OOM happens, Assert((flags & DSHASH_INSERT_NO_OOM) !=3D 0); makes se= nse. But for resize(), the assert is inside resize(), while for insert_into= _bucket(), the assert is in the caller. That feels a bit inconsistent to me= , and I think it hurts readability a little. A reader might wonder why ther= e is no corresponding assert after resize() unless they go read the functio= n body. Adjusted. > Making this a nested block does have the benefit of keeping dsa_flags clo= se to where it is used. But from my impression, this style is still fairly = uncommon in the codebase. I worry it may implicitly signal to other hackers= that this is an acceptable pattern. So unless we intentionally want to enc= ourage that style, I would lean toward avoiding it here. Yeah, that was dumb. Fixed. Thanks for the review; here's v2. --=20 Robert Haas EDB: http://www.enterprisedb.com --000000000000ff018f064d5007ea Content-Type: application/octet-stream; name="v2-0001-dshash-Make-it-possible-to-suppress-out-of-memory.patch" Content-Disposition: attachment; filename="v2-0001-dshash-Make-it-possible-to-suppress-out-of-memory.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmwc1fj70 RnJvbSBlYTFjMDM3ZGZhOTM2ZGZlNDM2YjQ0OTk5ODVlN2FhOTljYmZiNTBiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBSb2JlcnQgSGFhcyA8cmhhYXNAcG9zdGdyZXNxbC5vcmc+CkRh dGU6IFdlZCwgMTggTWFyIDIwMjYgMTM6Mzk6NDcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYyXSBk c2hhc2g6IE1ha2UgaXQgcG9zc2libGUgdG8gc3VwcHJlc3Mgb3V0IG9mIG1lbW9yeSBlcnJvcnMK CkludHJvZHVjZSBkc2hhc2hfZmluZF9vcl9pbnNlcnRfZXh0ZW5kZWQsIHdoaWNoIGlzIGp1c3Qg bGlrZQpkc2hhc2hfZmluZF9vcl9pbnNlcnQgZXhjZXB0IHRoYXQgaXQgdGFrZXMgYSBmbGFncyBh cmd1bWVudC4KQ3VycmVudGx5LCB0aGUgb25seSBzdXBwb3J0ZWQgZmxhZyBpcyBEU0hBU0hfSU5T RVJUX05PX09PTSwgYnV0CkkgaGF2ZSBjaG9zZW4gdG8gdXNlIGFuIGludGVnZXIgcmF0aGVyIHRo YW4gYSBib29sZWFuIGluIGNhc2Ugd2UKZW5kIHVwIHdpdGggbW9yZSBmbGFncyBpbiB0aGUgZnV0 dXJlLgoKUmV2aWV3ZWQtYnk6IENoYW8gTGkgPGxpLmV2YW4uY2hhb0BnbWFpbC5jb20+ClJldmll d2VkLWJ5OiBTYW1pIEltc2VpaCA8c2FtaW1zZWloQGdtYWlsLmNvbT4KLS0tCiBzcmMvYmFja2Vu ZC9saWIvZHNoYXNoLmMgfCA5NCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0t LS0tCiBzcmMvaW5jbHVkZS9saWIvZHNoYXNoLmggfCAxMiArKysrLQogMiBmaWxlcyBjaGFuZ2Vk LCA3OSBpbnNlcnRpb25zKCspLCAyNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9saWIvZHNoYXNoLmMgYi9zcmMvYmFja2VuZC9saWIvZHNoYXNoLmMKaW5kZXggMTNjZWY3 Yjg5NGUuLjE5OTk5ODljMTRmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9saWIvZHNoYXNoLmMK KysrIGIvc3JjL2JhY2tlbmQvbGliL2RzaGFzaC5jCkBAIC0xNjcsNyArMTY3LDggQEAgc3RydWN0 IGRzaGFzaF90YWJsZQogCiBzdGF0aWMgdm9pZCBkZWxldGVfaXRlbShkc2hhc2hfdGFibGUgKmhh c2hfdGFibGUsCiAJCQkJCQlkc2hhc2hfdGFibGVfaXRlbSAqaXRlbSk7Ci1zdGF0aWMgdm9pZCBy ZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXplX3QgbmV3X3NpemVfbG9nMik7Citz dGF0aWMgYm9vbCByZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXplX3QgbmV3X3Np emVfbG9nMiwKKwkJCQkgICBpbnQgZmxhZ3MpOwogc3RhdGljIGlubGluZSB2b2lkIGVuc3VyZV92 YWxpZF9idWNrZXRfcG9pbnRlcnMoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlKTsKIHN0YXRpYyBp bmxpbmUgZHNoYXNoX3RhYmxlX2l0ZW0gKmZpbmRfaW5fYnVja2V0KGRzaGFzaF90YWJsZSAqaGFz aF90YWJsZSwKIAkJCQkJCQkJCQkJCWNvbnN0IHZvaWQgKmtleSwKQEAgLTE3OCw3ICsxNzksOCBA QCBzdGF0aWMgdm9pZCBpbnNlcnRfaXRlbV9pbnRvX2J1Y2tldChkc2hhc2hfdGFibGUgKmhhc2hf dGFibGUsCiAJCQkJCQkJCQlkc2FfcG9pbnRlciAqYnVja2V0KTsKIHN0YXRpYyBkc2hhc2hfdGFi bGVfaXRlbSAqaW5zZXJ0X2ludG9fYnVja2V0KGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKIAkJ CQkJCQkJCQkJIGNvbnN0IHZvaWQgKmtleSwKLQkJCQkJCQkJCQkJIGRzYV9wb2ludGVyICpidWNr ZXQpOworCQkJCQkJCQkJCQkgZHNhX3BvaW50ZXIgKmJ1Y2tldCwKKwkJCQkJCQkJCQkJIGludCBm bGFncyk7CiBzdGF0aWMgYm9vbCBkZWxldGVfa2V5X2Zyb21fYnVja2V0KGRzaGFzaF90YWJsZSAq aGFzaF90YWJsZSwKIAkJCQkJCQkJICAgY29uc3Qgdm9pZCAqa2V5LAogCQkJCQkJCQkgICBkc2Ff cG9pbnRlciAqYnVja2V0X2hlYWQpOwpAQCAtNDIyLDE5ICs0MjQsMjUgQEAgZHNoYXNoX2ZpbmQo ZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBjb25zdCB2b2lkICprZXksIGJvb2wgZXhjbHVzaXZl KQogfQogCiAvKgotICogUmV0dXJucyBhIHBvaW50ZXIgdG8gYW4gZXhjbHVzaXZlbHkgbG9ja2Vk IGl0ZW0gd2hpY2ggbXVzdCBiZSByZWxlYXNlZCB3aXRoCi0gKiBkc2hhc2hfcmVsZWFzZV9sb2Nr LiAgSWYgdGhlIGtleSBpcyBmb3VuZCBpbiB0aGUgaGFzaCB0YWJsZSwgJ2ZvdW5kJyBpcyBzZXQK LSAqIHRvIHRydWUgYW5kIGEgcG9pbnRlciB0byB0aGUgZXhpc3RpbmcgZW50cnkgaXMgcmV0dXJu ZWQuICBJZiB0aGUga2V5IGlzIG5vdAotICogZm91bmQsICdmb3VuZCcgaXMgc2V0IHRvIGZhbHNl LCBhbmQgYSBwb2ludGVyIHRvIGEgbmV3bHkgY3JlYXRlZCBlbnRyeSBpcwotICogcmV0dXJuZWQu CisgKiBGaW5kIGFuIGV4aXN0aW5nIGVudHJ5IGluIGEgZHNoYXNoX3RhYmxlLCBvciBpbnNlcnQg YSBuZXcgb25lLgorICoKKyAqIERTSEFTSF9JTlNFUlRfTk9fT09NIGNhdXNlcyB0aGlzIGZ1bmN0 aW9uIHRvIHJldHVybiBOVUxMIHdoZW4gbm8gbWVtb3J5IGlzCisgKiBhdmFpbGFibGUgZm9yIHRo ZSBuZXcgZW50cnkuIE90aGVyd2lzZSwgc3VjaCBhbGxvY2F0aW9ucyB3aWxsIHJlc3VsdCBpbgor ICogYW4gRVJST1IuCisgKgorICogQW55IGVudHJ5IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24g aXMgZXhjbHVzaXZlbHkgbG9ja2VkLCBhbmQgdGhlIGNhbGxlcgorICogbXVzdCByZWxlYXNlIHRo YXQgbG9jayB1c2luZyBkc2hhc2hfcmVsZWFzZV9sb2NrLiBOb3RlcyBhYm92ZSBkc2hhc2hfZmlu ZCgpCisgKiByZWdhcmRpbmcgbG9ja2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgZXF1YWxseSBhcHBs eSBoZXJlLgorICoKKyAqIE9uIHJldHVybiwgKmZvdW5kIGlzIHNldCB0byB0cnVlIGlmIGFuIGV4 aXN0aW5nIGVudHJ5IHdhcyBmb3VuZCBpbiB0aGUKKyAqIGhhc2ggdGFibGUsIGFuZCBvdGhlcndp c2UgZmFsc2UuCiAgKgotICogTm90ZXMgYWJvdmUgZHNoYXNoX2ZpbmQoKSByZWdhcmRpbmcgbG9j a2luZyBhbmQgZXJyb3IgaGFuZGxpbmcgZXF1YWxseQotICogYXBwbHkgaGVyZS4KICAqLwogdm9p ZCAqCi1kc2hhc2hfZmluZF9vcl9pbnNlcnQoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLAotCQkJ CQkgIGNvbnN0IHZvaWQgKmtleSwKLQkJCQkJICBib29sICpmb3VuZCkKK2RzaGFzaF9maW5kX29y X2luc2VydF9leHRlbmRlZChkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUsCisJCQkJCQkJICAgY29u c3Qgdm9pZCAqa2V5LAorCQkJCQkJCSAgIGJvb2wgKmZvdW5kLAorCQkJCQkJCSAgIGludCBmbGFn cykKIHsKIAlkc2hhc2hfaGFzaCBoYXNoOwogCXNpemVfdAkJcGFydGl0aW9uX2luZGV4OwpAQCAt NDc3LDE0ICs0ODUsMjUgQEAgcmVzdGFydDoKIAkJCSAqIHJlYWNxdWlyZSBhbGwgdGhlIGxvY2tz IGluIHRoZSByaWdodCBvcmRlciB0byBhdm9pZCBkZWFkbG9ja3MuCiAJCQkgKi8KIAkJCUxXTG9j a1JlbGVhc2UoUEFSVElUSU9OX0xPQ0soaGFzaF90YWJsZSwgcGFydGl0aW9uX2luZGV4KSk7Ci0J CQlyZXNpemUoaGFzaF90YWJsZSwgaGFzaF90YWJsZS0+c2l6ZV9sb2cyICsgMSk7CisJCQlpZiAo IXJlc2l6ZShoYXNoX3RhYmxlLCBoYXNoX3RhYmxlLT5zaXplX2xvZzIgKyAxLCBmbGFncykpCisJ CQl7CisJCQkJQXNzZXJ0KChmbGFncyAmIERTSEFTSF9JTlNFUlRfTk9fT09NKSAhPSAwKTsKKwkJ CQlyZXR1cm4gTlVMTDsKKwkJCX0KIAogCQkJZ290byByZXN0YXJ0OwogCQl9CiAKIAkJLyogRmlu YWxseSB3ZSBjYW4gdHJ5IHRvIGluc2VydCB0aGUgbmV3IGl0ZW0uICovCiAJCWl0ZW0gPSBpbnNl cnRfaW50b19idWNrZXQoaGFzaF90YWJsZSwga2V5LAotCQkJCQkJCQkgICZCVUNLRVRfRk9SX0hB U0goaGFzaF90YWJsZSwgaGFzaCkpOworCQkJCQkJCQkgICZCVUNLRVRfRk9SX0hBU0goaGFzaF90 YWJsZSwgaGFzaCksCisJCQkJCQkJCSAgZmxhZ3MpOworCQlpZiAoaXRlbSA9PSBOVUxMKQorCQl7 CisJCQlBc3NlcnQoKGZsYWdzICYgRFNIQVNIX0lOU0VSVF9OT19PT00pICE9IDApOworCQkJTFdM b2NrUmVsZWFzZShQQVJUSVRJT05fTE9DSyhoYXNoX3RhYmxlLCBwYXJ0aXRpb25faW5kZXgpKTsK KwkJCXJldHVybiBOVUxMOworCQl9CiAJCWl0ZW0tPmhhc2ggPSBoYXNoOwogCQkvKiBBZGp1c3Qg cGVyLWxvY2stcGFydGl0aW9uIGNvdW50ZXIgZm9yIGxvYWQgZmFjdG9yIGtub3dsZWRnZS4gKi8K IAkJKytwYXJ0aXRpb24tPmNvdW50OwpAQCAtODU0LDEwICs4NzMsMTQgQEAgZGVsZXRlX2l0ZW0o ZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBkc2hhc2hfdGFibGVfaXRlbSAqaXRlbSkKICAqIEdy b3cgdGhlIGhhc2ggdGFibGUgaWYgbmVjZXNzYXJ5IHRvIHRoZSByZXF1ZXN0ZWQgbnVtYmVyIG9m IGJ1Y2tldHMuICBUaGUKICAqIHJlcXVlc3RlZCBzaXplIG11c3QgYmUgZG91YmxlIHNvbWUgcHJl dmlvdXNseSBvYnNlcnZlZCBzaXplLgogICoKKyAqIElmIGFuIG91dC1vZi1tZW1vcnkgY29uZGl0 aW9uIGlzIG9ic2VydmVkLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgZmFsc2UgaWYKKyAqIGZsYWdz IGluY2x1ZGVzIERTSEFTSF9JTlNFUlRfTk9fT09NLCBhbmQgb3RoZXJ3aXNlIHRocm93cyBhbiBF UlJPUi4gSW4gYWxsCisgKiBvdGhlciBjYXNlcywgaXQgcmV0dXJucyB0cnVlLgorICoKICAqIE11 c3QgYmUgY2FsbGVkIHdpdGhvdXQgYW55IHBhcnRpdGlvbiBsb2NrIGhlbGQuCiAgKi8KLXN0YXRp YyB2b2lkCi1yZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXplX3QgbmV3X3NpemVf bG9nMikKK3N0YXRpYyBib29sCityZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXpl X3QgbmV3X3NpemVfbG9nMiwgaW50IGZsYWdzKQogewogCWRzYV9wb2ludGVyIG9sZF9idWNrZXRz OwogCWRzYV9wb2ludGVyIG5ld19idWNrZXRzX3NoYXJlZDsKQEAgLTg2NSw2ICs4ODgsNyBAQCBy ZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxlLCBzaXplX3QgbmV3X3NpemVfbG9nMikKIAlz aXplX3QJCXNpemU7CiAJc2l6ZV90CQluZXdfc2l6ZSA9ICgoc2l6ZV90KSAxKSA8PCBuZXdfc2l6 ZV9sb2cyOwogCXNpemVfdAkJaTsKKwlpbnQJCQlkc2FfZmxhZ3MgPSBEU0FfQUxMT0NfSFVHRSB8 IERTQV9BTExPQ19aRVJPOwogCiAJLyoKIAkgKiBBY3F1aXJlIHRoZSBsb2NrcyBmb3IgYWxsIGxv Y2sgcGFydGl0aW9ucy4gIFRoaXMgaXMgZXhwZW5zaXZlLCBidXQgd2UKQEAgLTg4MiwyMyArOTA2 LDM0IEBAIHJlc2l6ZShkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUsIHNpemVfdCBuZXdfc2l6ZV9s b2cyKQogCQkJICogb2J0YWluaW5nIGFsbCB0aGUgbG9ja3MgYW5kIHJldHVybiBlYXJseS4KIAkJ CSAqLwogCQkJTFdMb2NrUmVsZWFzZShQQVJUSVRJT05fTE9DSyhoYXNoX3RhYmxlLCAwKSk7Ci0J CQlyZXR1cm47CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCX0KIAogCUFzc2VydChuZXdfc2l6ZV9s b2cyID09IGhhc2hfdGFibGUtPmNvbnRyb2wtPnNpemVfbG9nMiArIDEpOwogCiAJLyogQWxsb2Nh dGUgdGhlIHNwYWNlIGZvciB0aGUgbmV3IHRhYmxlLiAqLworCWlmIChmbGFncyAmIERTSEFTSF9J TlNFUlRfTk9fT09NKQorCQlkc2FfZmxhZ3MgfD0gRFNBX0FMTE9DX05PX09PTTsKIAluZXdfYnVj a2V0c19zaGFyZWQgPQogCQlkc2FfYWxsb2NhdGVfZXh0ZW5kZWQoaGFzaF90YWJsZS0+YXJlYSwK IAkJCQkJCQkgIHNpemVvZihkc2FfcG9pbnRlcikgKiBuZXdfc2l6ZSwKLQkJCQkJCQkgIERTQV9B TExPQ19IVUdFIHwgRFNBX0FMTE9DX1pFUk8pOwotCW5ld19idWNrZXRzID0gZHNhX2dldF9hZGRy ZXNzKGhhc2hfdGFibGUtPmFyZWEsIG5ld19idWNrZXRzX3NoYXJlZCk7CisJCQkJCQkJICBkc2Ff ZmxhZ3MpOworCisJLyogSWYgRFNIQVNIX0lOU0VSVF9OT19PT00gd2FzIHNwZWNpZmllZCwgYWxs b2NhdGlvbiBtYXkgaGF2ZSBmYWlsZWQuICovCisJaWYgKCFEc2FQb2ludGVySXNWYWxpZChuZXdf YnVja2V0c19zaGFyZWQpKQorCXsKKwkJLyogUmVsZWFzZSBhbGwgdGhlIGxvY2tzIGFuZCByZXR1 cm4gd2l0aG91dCByZXNpemluZy4gKi8KKwkJZm9yIChpID0gMDsgaSA8IERTSEFTSF9OVU1fUEFS VElUSU9OUzsgKytpKQorCQkJTFdMb2NrUmVsZWFzZShQQVJUSVRJT05fTE9DSyhoYXNoX3RhYmxl LCBpKSk7CisJCXJldHVybiBmYWxzZTsKKwl9CiAKIAkvKgogCSAqIFdlJ3ZlIGFsbG9jYXRlZCB0 aGUgbmV3IGJ1Y2tldCBhcnJheTsgYWxsIHRoYXQgcmVtYWlucyB0byBkbyBub3cgaXMgdG8KIAkg KiByZWluc2VydCBhbGwgaXRlbXMsIHdoaWNoIGFtb3VudHMgdG8gYWRqdXN0aW5nIGFsbCB0aGUg cG9pbnRlcnMuCiAJICovCisJbmV3X2J1Y2tldHMgPSBkc2FfZ2V0X2FkZHJlc3MoaGFzaF90YWJs ZS0+YXJlYSwgbmV3X2J1Y2tldHNfc2hhcmVkKTsKIAlzaXplID0gKChzaXplX3QpIDEpIDw8IGhh c2hfdGFibGUtPmNvbnRyb2wtPnNpemVfbG9nMjsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytp KQogCXsKQEAgLTkyOCw2ICs5NjMsOCBAQCByZXNpemUoZHNoYXNoX3RhYmxlICpoYXNoX3RhYmxl LCBzaXplX3QgbmV3X3NpemVfbG9nMikKIAkvKiBSZWxlYXNlIGFsbCB0aGUgbG9ja3MuICovCiAJ Zm9yIChpID0gMDsgaSA8IERTSEFTSF9OVU1fUEFSVElUSU9OUzsgKytpKQogCQlMV0xvY2tSZWxl YXNlKFBBUlRJVElPTl9MT0NLKGhhc2hfdGFibGUsIGkpKTsKKworCXJldHVybiB0cnVlOwogfQog CiAvKgpAQCAtOTgyLDE5ICsxMDE5LDI2IEBAIGluc2VydF9pdGVtX2ludG9fYnVja2V0KGRzaGFz aF90YWJsZSAqaGFzaF90YWJsZSwKIAogLyoKICAqIEFsbG9jYXRlIHNwYWNlIGZvciBhbiBlbnRy eSB3aXRoIHRoZSBnaXZlbiBrZXkgYW5kIGluc2VydCBpdCBpbnRvIHRoZQotICogcHJvdmlkZWQg YnVja2V0LgorICogcHJvdmlkZWQgYnVja2V0LiAgUmV0dXJucyBOVUxMIGlmIG91dCBvZiBtZW1v cnkgYW5kIERTSEFTSF9JTlNFUlRfTk9fT09NCisgKiB3YXMgc3BlY2lmaWVkIGluIGZsYWdzLgog ICovCiBzdGF0aWMgZHNoYXNoX3RhYmxlX2l0ZW0gKgogaW5zZXJ0X2ludG9fYnVja2V0KGRzaGFz aF90YWJsZSAqaGFzaF90YWJsZSwKIAkJCQkgICBjb25zdCB2b2lkICprZXksCi0JCQkJICAgZHNh X3BvaW50ZXIgKmJ1Y2tldCkKKwkJCQkgICBkc2FfcG9pbnRlciAqYnVja2V0LAorCQkJCSAgIGlu dCBmbGFncykKIHsKIAlkc2FfcG9pbnRlciBpdGVtX3BvaW50ZXI7CiAJZHNoYXNoX3RhYmxlX2l0 ZW0gKml0ZW07Ci0KLQlpdGVtX3BvaW50ZXIgPSBkc2FfYWxsb2NhdGUoaGFzaF90YWJsZS0+YXJl YSwKLQkJCQkJCQkJaGFzaF90YWJsZS0+cGFyYW1zLmVudHJ5X3NpemUgKwotCQkJCQkJCQlNQVhB TElHTihzaXplb2YoZHNoYXNoX3RhYmxlX2l0ZW0pKSk7CisJaW50CQkJZHNhX2ZsYWdzOworCisJ ZHNhX2ZsYWdzID0gKGZsYWdzICYgRFNIQVNIX0lOU0VSVF9OT19PT00pID8gRFNBX0FMTE9DX05P X09PTSA6IDA7CisJaXRlbV9wb2ludGVyID0gZHNhX2FsbG9jYXRlX2V4dGVuZGVkKGhhc2hfdGFi bGUtPmFyZWEsCisJCQkJCQkJCQkJIGhhc2hfdGFibGUtPnBhcmFtcy5lbnRyeV9zaXplICsKKwkJ CQkJCQkJCQkgTUFYQUxJR04oc2l6ZW9mKGRzaGFzaF90YWJsZV9pdGVtKSksCisJCQkJCQkJCQkJ IGRzYV9mbGFncyk7CisJaWYgKCFEc2FQb2ludGVySXNWYWxpZChpdGVtX3BvaW50ZXIpKQorCQly ZXR1cm4gTlVMTDsKIAlpdGVtID0gZHNhX2dldF9hZGRyZXNzKGhhc2hfdGFibGUtPmFyZWEsIGl0 ZW1fcG9pbnRlcik7CiAJY29weV9rZXkoaGFzaF90YWJsZSwgRU5UUllfRlJPTV9JVEVNKGl0ZW0p LCBrZXkpOwogCWluc2VydF9pdGVtX2ludG9fYnVja2V0KGhhc2hfdGFibGUsIGl0ZW1fcG9pbnRl ciwgaXRlbSwgYnVja2V0KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2xpYi9kc2hhc2guaCBi L3NyYy9pbmNsdWRlL2xpYi9kc2hhc2guaAppbmRleCA0NmEzY2E3ODg0Zi4uNjRiNzU4YjM4MWIg MTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2xpYi9kc2hhc2guaAorKysgYi9zcmMvaW5jbHVkZS9s aWIvZHNoYXNoLmgKQEAgLTkyLDE1ICs5MiwyMyBAQCBleHRlcm4gdm9pZCBkc2hhc2hfZGV0YWNo KGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSk7CiBleHRlcm4gZHNoYXNoX3RhYmxlX2hhbmRsZSBk c2hhc2hfZ2V0X2hhc2hfdGFibGVfaGFuZGxlKGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSk7CiBl eHRlcm4gdm9pZCBkc2hhc2hfZGVzdHJveShkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUpOwogCisv KiBGbGFncyBmb3IgZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X2V4dGVuZGVkLiAqLworI2RlZmluZSBE U0hBU0hfSU5TRVJUX05PX09PTQkweDAxCS8qIG5vIGZhaWx1cmUgaWYgb3V0LW9mLW1lbW9yeSAq LworCiAvKiBGaW5kaW5nLCBjcmVhdGluZywgZGVsZXRpbmcgZW50cmllcy4gKi8KIGV4dGVybiB2 b2lkICpkc2hhc2hfZmluZChkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUsCiAJCQkJCQkgY29uc3Qg dm9pZCAqa2V5LCBib29sIGV4Y2x1c2l2ZSk7Ci1leHRlcm4gdm9pZCAqZHNoYXNoX2ZpbmRfb3Jf aW5zZXJ0KGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKLQkJCQkJCQkJICAgY29uc3Qgdm9pZCAq a2V5LCBib29sICpmb3VuZCk7CitleHRlcm4gdm9pZCAqZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X2V4 dGVuZGVkKGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwKKwkJCQkJCQkJCQkJY29uc3Qgdm9pZCAq a2V5LCBib29sICpmb3VuZCwKKwkJCQkJCQkJCQkJaW50IGZsYWdzKTsKIGV4dGVybiBib29sIGRz aGFzaF9kZWxldGVfa2V5KGRzaGFzaF90YWJsZSAqaGFzaF90YWJsZSwgY29uc3Qgdm9pZCAqa2V5 KTsKIGV4dGVybiB2b2lkIGRzaGFzaF9kZWxldGVfZW50cnkoZHNoYXNoX3RhYmxlICpoYXNoX3Rh YmxlLCB2b2lkICplbnRyeSk7CiBleHRlcm4gdm9pZCBkc2hhc2hfcmVsZWFzZV9sb2NrKGRzaGFz aF90YWJsZSAqaGFzaF90YWJsZSwgdm9pZCAqZW50cnkpOwogCisvKiBGaW5kIG9yIGluc2VydCB3 aXRoIGVycm9yIG9uIG91dC1vZi1tZW1vcnkuICovCisjZGVmaW5lIGRzaGFzaF9maW5kX29yX2lu c2VydChoYXNoX3RhYmxlLCBrZXksIGZvdW5kKSBcCisJZHNoYXNoX2ZpbmRfb3JfaW5zZXJ0X2V4 dGVuZGVkKGhhc2hfdGFibGUsIGtleSwgZm91bmQsIDApCisKIC8qIHNlcSBzY2FuIHN1cHBvcnQg Ki8KIGV4dGVybiB2b2lkIGRzaGFzaF9zZXFfaW5pdChkc2hhc2hfc2VxX3N0YXR1cyAqc3RhdHVz LCBkc2hhc2hfdGFibGUgKmhhc2hfdGFibGUsCiAJCQkJCQkJYm9vbCBleGNsdXNpdmUpOwotLSAK Mi41MS4wCgo= --000000000000ff018f064d5007ea--