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 1q1Un0-000480-OJ for pgsql-hackers@arkaria.postgresql.org; Tue, 23 May 2023 16:23:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1q1Umz-0006uw-Lq for pgsql-hackers@arkaria.postgresql.org; Tue, 23 May 2023 16:23:09 +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 1q1Umz-0006ul-B8 for pgsql-hackers@lists.postgresql.org; Tue, 23 May 2023 16:23:09 +0000 Received: from mail-ed1-x52a.google.com ([2a00:1450:4864:20::52a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1q1Umu-001gVF-Lp for pgsql-hackers@lists.postgresql.org; Tue, 23 May 2023 16:23:08 +0000 Received: by mail-ed1-x52a.google.com with SMTP id 4fb4d7f45d1cf-510f3db1cd8so92515a12.1 for ; Tue, 23 May 2023 09:23:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1684858983; x=1687450983; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:from:to:cc:subject:date:message-id:reply-to; bh=REUPU3UwBFmAKuqHqf4hjPkl9pEqB1/M8hD/+dC/QvU=; b=KALaZ1h0eMGYiIdBRU34afCEQCa2J+BwMEcvIiabKgEVRCNP//Wuc0idA/m3Wn3udG NnRe8kVs265hXrMbhoBUg1Klz2u11YO60uEKvT3cPVIdjpLcfg1C6HlnCDIAx2dGhNAL oUthgM5uFs+4mAvZECyrn2jqKyKT6jwu/gzvyshBuPoeYTpqMCWbGjJL6DgGXnWTcntl 9yDyBrmqNacyFz2mUpkDigmI3Q9XiqfTS0BwDpK+N32fPaS1vgvCJNHOnBel/TdTqT8d TQNWH6k8HgxwhOcuF0J2E0i6npQy8tEJmfHr4Y9TIYEN9CIfVnzqaLXm0AEneHliAWHA 3RfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1684858983; x=1687450983; h=subject:from:content-language:to:user-agent:mime-version:date :message-id:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=REUPU3UwBFmAKuqHqf4hjPkl9pEqB1/M8hD/+dC/QvU=; b=aBcExhGbs3wRl6dWgiTOcCX02KHcECcm1GP34ogOqQt1HHnh2s12/r74btvmK4230F zu89S7OtkGDZIvz0+oPHQKa7YXMlaepHmM/CKRd5+o3hwQfZdiRy28lArAdVELoVYaH4 8gborsWWLyTJmTy+pIQvauZhLVerabgBQg0drLBTEtao/LTXbIFSD9SwuH2qbs8kcDKp xZrFhQ66QoNjkWVLphqtzpWdGY0xRVASGJU4RlFpFGwxsJ7QGPVzuot1BAnu1E5rXr5l dcis52VmAtWHZpB7mnnP5Z253hDdORm6qshSAg8EXrZ1FcEK1hGXrRUnnnTmk2qMycKA YyIw== X-Gm-Message-State: AC+VfDyTr6T9CCmg4XvfL2pdp/0frkIOdUCZ4lG7VZlDpCP0pfbNLTva pXYAMRQ65xRfXVnMXRvjXJgjp0IGmLL+2DMmyEVMssCm5ZmbAjYfPFNkjOJPBtsbwG5hGqTyVFZ F2/KypehFcWlk7nWz26yuqwWenrl+1wF4Ch7OfXyIFpC1MCwiYAlecSjN0qHLLeqKKPbxbNv9Ox qsf0kCu8FcpDHf6DYlY0dSd3u2dI+tWAzHHM2h5oVLML6OcoR9BtImk+RuC5hPITwTpZrHy+Br7 GJGolsQ+CEiIzxVKZlNedZVVTCyAgGMvCHU3tUv6Hi529XKGkqndR/2Z58= X-Google-Smtp-Source: ACHHUZ7U3CgL9bE1CmUMOE/mVDK8DIwWV4QUtHBK2vCKXPEkIA6bhEZNhT9wP/lc4IeqIwQEeMBtbA== X-Received: by 2002:aa7:df12:0:b0:508:4120:202a with SMTP id c18-20020aa7df12000000b005084120202amr11700707edy.10.1684858982579; Tue, 23 May 2023 09:23:02 -0700 (PDT) Received: from [10.137.0.17] (static-84-42-175-93.bb.vodafone.cz. [84.42.175.93]) by smtp.gmail.com with ESMTPSA id ay16-20020a056402203000b0050bc041d2a8sm4102648edb.15.2023.05.23.09.23.01 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 23 May 2023 09:23:01 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------V1xDijI0HvoXqRpA2g14OWDi" Message-ID: <222a3442-7f7d-246c-ed9b-a76209d19239@enterprisedb.com> Date: Tue, 23 May 2023 18:23:00 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.11.0 To: PostgreSQL Hackers Content-Language: en-US From: Tomas Vondra Subject: memory leak in trigger handling (since PG12) X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------V1xDijI0HvoXqRpA2g14OWDi Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, it seems there's a fairly annoying memory leak in trigger code, introduced by commit fc22b6623b6b3bab3cb057ccd282c2bfad1a0b30 Author: Peter Eisentraut Date: Sat Mar 30 08:13:09 2019 +0100 Generated columns ... which added GetAllUpdatedColumns() and uses it many places instead of the original GetUpdatedColumns(): #define GetUpdatedColumns(relinfo, estate) \ (exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->updatedCols) #define GetAllUpdatedColumns(relinfo, estate) \ (bms_union(exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->updatedCols, \ exec_rt_fetch((relinfo)->ri_RangeTableIndex, estate)->extraUpdatedCols)) Notice this creates a new bitmap on every calls. That's a bit of a problem, because we call this from: - ExecASUpdateTriggers - ExecARUpdateTriggers - ExecBSUpdateTriggers - ExecBRUpdateTriggers - ExecUpdateLockMode This means that for an UPDATE with triggers, we may end up calling this for each row, possibly multiple bitmaps. And those bitmaps are allocated in ExecutorState, so won't be freed until the end of the query :-( The bitmaps are typically fairly small (a couple bytes), but for wider tables it can be a couple dozen bytes. But it's primarily driven by number of updated rows. It's easy to leak gigabytes when updating ~10M rows. I've seen cases with a couple tens of GBs leaked, though, but in that case it seems to be caused by UPDATE ... FROM missing a join condition (so in fact the memory leak is proportional to number of rows in the join result, not the number we end up updating). Attached is a patch, restoring the pre-12 behavior for me. While looking for other places allocating stuff in ExecutorState (for the UPDATE case) and leaving it there, I found two more cases: 1) copy_plpgsql_datums 2) make_expanded_record_from_tupdesc make_expanded_record_from_exprecord All of this is calls from plpgsql_exec_trigger. Fixing the copy_plpgsql_datums case seems fairly simple, the space allocated for local copies can be freed during the cleanup. That's what 0002 does. I'm not sure what to do about the expanded records. My understanding of the expanded record lifecycle is fairly limited, so my (rather naive) attempt to free the memory failed ... I wonder how much we should care about these cases. On the one hand we often leave the cleanup up to the memory context, but the assumption is the context is not unnecessarily long-lived. And ExecutorState is not that. And leaking memory per-row does not seem great either. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------V1xDijI0HvoXqRpA2g14OWDi Content-Type: text/x-patch; charset=UTF-8; name="0001-Free-updatedCols-bitmaps.patch" Content-Disposition: attachment; filename="0001-Free-updatedCols-bitmaps.patch" Content-Transfer-Encoding: base64 RnJvbSA4NTQzOWUyNTg3ZjAzNTA0MGM4MmU3MzAzYjk2Yjg4N2U2NTBiMDFmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogVHVlLCAyMyBNYXkgMjAyMyAxNzo0NTo0NyArMDIwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBGcmVlIHVwZGF0ZWRDb2xzIGJpdG1hcHMKCi0tLQogc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdHJpZ2dlci5jICB8IDIyICsrKysrKysrKysrKysrKysrKysrLS0K IHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgfCAgOSArKysrKysrLS0KIDIgZmls ZXMgY2hhbmdlZCwgMjcgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy90cmlnZ2VyLmMKaW5kZXggNGIyOTVmOGRhNWUuLmZiMTEyMDNjNDczIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy90cmlnZ2VyLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdHJpZ2dlci5jCkBAIC0yOTE2LDYgKzI5MTYsOCBAQCBFeGVjQlNVcGRhdGVU cmlnZ2VycyhFU3RhdGUgKmVzdGF0ZSwgUmVzdWx0UmVsSW5mbyAqcmVsaW5mbykKIAkJCQkJ KGVycmNvZGUoRVJSQ09ERV9FX1JfSV9FX1RSSUdHRVJfUFJPVE9DT0xfVklPTEFURUQpLAog CQkJCQkgZXJybXNnKCJCRUZPUkUgU1RBVEVNRU5UIHRyaWdnZXIgY2Fubm90IHJldHVybiBh IHZhbHVlIikpKTsKIAl9CisKKwlibXNfZnJlZSh1cGRhdGVkQ29scyk7CiB9CiAKIHZvaWQK QEAgLTI5MjgsMTIgKzI5MzAsMTggQEAgRXhlY0FTVXBkYXRlVHJpZ2dlcnMoRVN0YXRlICpl c3RhdGUsIFJlc3VsdFJlbEluZm8gKnJlbGluZm8sCiAJQXNzZXJ0KHJlbGluZm8tPnJpX1Jv b3RSZXN1bHRSZWxJbmZvID09IE5VTEwpOwogCiAJaWYgKHRyaWdkZXNjICYmIHRyaWdkZXNj LT50cmlnX3VwZGF0ZV9hZnRlcl9zdGF0ZW1lbnQpCisJeworCQlCaXRtYXBzZXQgKnVwZGF0 ZWRDb2xzID0gRXhlY0dldEFsbFVwZGF0ZWRDb2xzKHJlbGluZm8sIGVzdGF0ZSk7CisKIAkJ QWZ0ZXJUcmlnZ2VyU2F2ZUV2ZW50KGVzdGF0ZSwgcmVsaW5mbywgTlVMTCwgTlVMTCwKIAkJ CQkJCQkgIFRSSUdHRVJfRVZFTlRfVVBEQVRFLAogCQkJCQkJCSAgZmFsc2UsIE5VTEwsIE5V TEwsIE5JTCwKLQkJCQkJCQkgIEV4ZWNHZXRBbGxVcGRhdGVkQ29scyhyZWxpbmZvLCBlc3Rh dGUpLAorCQkJCQkJCSAgdXBkYXRlZENvbHMsCiAJCQkJCQkJICB0cmFuc2l0aW9uX2NhcHR1 cmUsCiAJCQkJCQkJICBmYWxzZSk7CisKKwkJYm1zX2ZyZWUodXBkYXRlZENvbHMpOworCX0K IH0KIAogYm9vbApAQCAtMzA0Myw2ICszMDUxLDkgQEAgRXhlY0JSVXBkYXRlVHJpZ2dlcnMo RVN0YXRlICplc3RhdGUsIEVQUVN0YXRlICplcHFzdGF0ZSwKIAkJCQloZWFwX2ZyZWV0dXBs ZSh0cmlndHVwbGUpOwogCQkJaWYgKHNob3VsZF9mcmVlX25ldykKIAkJCQloZWFwX2ZyZWV0 dXBsZShvbGR0dXBsZSk7CisKKwkJCWJtc19mcmVlKHVwZGF0ZWRDb2xzKTsKKwogCQkJcmV0 dXJuIGZhbHNlOwkJLyogImRvIG5vdGhpbmciICovCiAJCX0KIAkJZWxzZSBpZiAobmV3dHVw bGUgIT0gb2xkdHVwbGUpCkBAIC0zMDY4LDYgKzMwNzksOCBAQCBFeGVjQlJVcGRhdGVUcmln Z2VycyhFU3RhdGUgKmVzdGF0ZSwgRVBRU3RhdGUgKmVwcXN0YXRlLAogCWlmIChzaG91bGRf ZnJlZV90cmlnKQogCQloZWFwX2ZyZWV0dXBsZSh0cmlndHVwbGUpOwogCisJYm1zX2ZyZWUo dXBkYXRlZENvbHMpOworCiAJcmV0dXJuIHRydWU7CiB9CiAKQEAgLTMxMDcsNiArMzEyMCw3 IEBAIEV4ZWNBUlVwZGF0ZVRyaWdnZXJzKEVTdGF0ZSAqZXN0YXRlLCBSZXN1bHRSZWxJbmZv ICpyZWxpbmZvLAogCQkgKi8KIAkJVHVwbGVUYWJsZVNsb3QgKm9sZHNsb3Q7CiAJCVJlc3Vs dFJlbEluZm8gKnR1cHNyYzsKKwkJQml0bWFwc2V0ICp1cGRhdGVkQ29sczsKIAogCQlBc3Nl cnQoKHNyY19wYXJ0aW5mbyAhPSBOVUxMICYmIGRzdF9wYXJ0aW5mbyAhPSBOVUxMKSB8fAog CQkJICAgIWlzX2Nyb3NzcGFydF91cGRhdGUpOwpAQCAtMzEyOSwxNCArMzE0MywxOCBAQCBF eGVjQVJVcGRhdGVUcmlnZ2VycyhFU3RhdGUgKmVzdGF0ZSwgUmVzdWx0UmVsSW5mbyAqcmVs aW5mbywKIAkJZWxzZQogCQkJRXhlY0NsZWFyVHVwbGUob2xkc2xvdCk7CiAKKwkJdXBkYXRl ZENvbHMgPSBFeGVjR2V0QWxsVXBkYXRlZENvbHMocmVsaW5mbywgZXN0YXRlKTsKKwogCQlB ZnRlclRyaWdnZXJTYXZlRXZlbnQoZXN0YXRlLCByZWxpbmZvLAogCQkJCQkJCSAgc3JjX3Bh cnRpbmZvLCBkc3RfcGFydGluZm8sCiAJCQkJCQkJICBUUklHR0VSX0VWRU5UX1VQREFURSwK IAkJCQkJCQkgIHRydWUsCiAJCQkJCQkJICBvbGRzbG90LCBuZXdzbG90LCByZWNoZWNrSW5k ZXhlcywKLQkJCQkJCQkgIEV4ZWNHZXRBbGxVcGRhdGVkQ29scyhyZWxpbmZvLCBlc3RhdGUp LAorCQkJCQkJCSAgdXBkYXRlZENvbHMsCiAJCQkJCQkJICB0cmFuc2l0aW9uX2NhcHR1cmUs CiAJCQkJCQkJICBpc19jcm9zc3BhcnRfdXBkYXRlKTsKKworCQlibXNfZnJlZSh1cGRhdGVk Q29scyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVj TWFpbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwppbmRleCBjNzZmZGY1 OWVjNC4uOTg1MDJiOTU2YzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNNYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYwpAQCAtMjM2 Nyw2ICsyMzY3LDcgQEAgRXhlY1VwZGF0ZUxvY2tNb2RlKEVTdGF0ZSAqZXN0YXRlLCBSZXN1 bHRSZWxJbmZvICpyZWxpbmZvKQogewogCUJpdG1hcHNldCAgKmtleUNvbHM7CiAJQml0bWFw c2V0ICAqdXBkYXRlZENvbHM7CisJTG9ja1R1cGxlTW9kZQlsb2NrTW9kZTsKIAogCS8qCiAJ ICogQ29tcHV0ZSBsb2NrIG1vZGUgdG8gdXNlLiAgSWYgY29sdW1ucyB0aGF0IGFyZSBwYXJ0 IG9mIHRoZSBrZXkgaGF2ZSBub3QKQEAgLTIzNzgsOSArMjM3OSwxMyBAQCBFeGVjVXBkYXRl TG9ja01vZGUoRVN0YXRlICplc3RhdGUsIFJlc3VsdFJlbEluZm8gKnJlbGluZm8pCiAJCQkJ CQkJCQkJIElOREVYX0FUVFJfQklUTUFQX0tFWSk7CiAKIAlpZiAoYm1zX292ZXJsYXAoa2V5 Q29scywgdXBkYXRlZENvbHMpKQotCQlyZXR1cm4gTG9ja1R1cGxlRXhjbHVzaXZlOworCQls b2NrTW9kZSA9IExvY2tUdXBsZUV4Y2x1c2l2ZTsKKwllbHNlCisJCWxvY2tNb2RlID0gTG9j a1R1cGxlTm9LZXlFeGNsdXNpdmU7CisKKwlibXNfZnJlZSh1cGRhdGVkQ29scyk7CiAKLQly ZXR1cm4gTG9ja1R1cGxlTm9LZXlFeGNsdXNpdmU7CisJcmV0dXJuIGxvY2tNb2RlOwogfQog CiAvKgotLSAKMi40MC4xCgo= --------------V1xDijI0HvoXqRpA2g14OWDi Content-Type: text/x-patch; charset=UTF-8; name="0002-Free-space-allocated-by-copy_plpgsql_datums.patch" Content-Disposition: attachment; filename="0002-Free-space-allocated-by-copy_plpgsql_datums.patch" Content-Transfer-Encoding: base64 RnJvbSAxNmE3MDc1NTY5ZmE1Njk1MTk3MTU5MmIyMzc5MjlmNDllNDE0NzM3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzQDJuZHF1YWRyYW50 LmNvbT4KRGF0ZTogU2F0LCAxMyBNYXkgMjAyMyAxMzoxOTo0OSArMDIwMApTdWJqZWN0OiBb UEFUQ0ggMi8yXSBGcmVlIHNwYWNlIGFsbG9jYXRlZCBieSBjb3B5X3BscGdzcWxfZGF0dW1z CgpEdXJpbmcgUEwvcGdTUUwgZXhlY3V0aW9uLCB3ZSBhbGxvY2F0ZSBhIGxvY2FsIGNvcHkg Zm9yIGNhbGxzLiBXaGVuCmV4ZWN1dGluZyB0cmlnZ2VycywgdGhpcyBnZXRzIGFsbG9jYXRl ZCBpbiBFeGVjdXRvclN0YXRlLCBzbyBpdCdkIGJlCmtlcHQgdW50aWwgcXVlcnkgY29tcGxl dGVzLgoKRnJlZSBpdCBleHBsaWNpdGx5LCBhcyBwYXJ0IG9mIGNsZWFudXAuCi0tLQogc3Jj L3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYyB8IDM5ICsrKysrKysrKysrKysrKysrKysrKysr KysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDM0IGluc2VydGlvbnMoKyksIDUgZGVs ZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYyBi L3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMKaW5kZXggNGI3NmY3Njk5YTYuLjk5Mjgz ZDM1NGY0IDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCisrKyBi L3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMKQEAgLTI2NCw2ICsyNjQsOCBAQCBzdGF0 aWMgdm9pZCBjb2VyY2VfZnVuY3Rpb25fcmVzdWx0X3R1cGxlKFBMcGdTUUxfZXhlY3N0YXRl ICplc3RhdGUsCiBzdGF0aWMgdm9pZCBwbHBnc3FsX2V4ZWNfZXJyb3JfY2FsbGJhY2sodm9p ZCAqYXJnKTsKIHN0YXRpYyB2b2lkIGNvcHlfcGxwZ3NxbF9kYXR1bXMoUExwZ1NRTF9leGVj c3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkJUExwZ1NRTF9mdW5jdGlvbiAqZnVuYyk7CitzdGF0 aWMgdm9pZCBmcmVlX3BscGdzcWxfZGF0dW1zKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUs CisJCQkJCQkJCVBMcGdTUUxfZnVuY3Rpb24gKmZ1bmMpOwogc3RhdGljIHZvaWQgcGxwZ3Nx bF9mdWxmaWxsX3Byb21pc2UoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJCQkJ CVBMcGdTUUxfdmFyICp2YXIpOwogc3RhdGljIE1lbW9yeUNvbnRleHQgZ2V0X3N0bXRfbWNv bnRleHQoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSk7CkBAIC03ODgsNiArNzkwLDggQEAg cGxwZ3NxbF9leGVjX2Z1bmN0aW9uKFBMcGdTUUxfZnVuY3Rpb24gKmZ1bmMsIEZ1bmN0aW9u Q2FsbEluZm8gZmNpbmZvLAogCWV4ZWNfZXZhbF9jbGVhbnVwKCZlc3RhdGUpOwogCS8qIHN0 bXRfbWNvbnRleHQgd2lsbCBiZSBkZXN0cm95ZWQgd2hlbiBmdW5jdGlvbidzIG1haW4gY29u dGV4dCBpcyAqLwogCisJZnJlZV9wbHBnc3FsX2RhdHVtcygmZXN0YXRlLCBmdW5jKTsKKwog CS8qCiAJICogUG9wIHRoZSBlcnJvciBjb250ZXh0IHN0YWNrCiAJICovCkBAIC0xMTQyLDYg KzExNDYsOCBAQCBwbHBnc3FsX2V4ZWNfdHJpZ2dlcihQTHBnU1FMX2Z1bmN0aW9uICpmdW5j LAogCWV4ZWNfZXZhbF9jbGVhbnVwKCZlc3RhdGUpOwogCS8qIHN0bXRfbWNvbnRleHQgd2ls bCBiZSBkZXN0cm95ZWQgd2hlbiBmdW5jdGlvbidzIG1haW4gY29udGV4dCBpcyAqLwogCisJ ZnJlZV9wbHBnc3FsX2RhdHVtcygmZXN0YXRlLCBmdW5jKTsKKwogCS8qCiAJICogUG9wIHRo ZSBlcnJvciBjb250ZXh0IHN0YWNrCiAJICovCkBAIC0xMjE3LDYgKzEyMjMsOCBAQCBwbHBn c3FsX2V4ZWNfZXZlbnRfdHJpZ2dlcihQTHBnU1FMX2Z1bmN0aW9uICpmdW5jLCBFdmVudFRy aWdnZXJEYXRhICp0cmlnZGF0YSkKIAlleGVjX2V2YWxfY2xlYW51cCgmZXN0YXRlKTsKIAkv KiBzdG10X21jb250ZXh0IHdpbGwgYmUgZGVzdHJveWVkIHdoZW4gZnVuY3Rpb24ncyBtYWlu IGNvbnRleHQgaXMgKi8KIAorCWZyZWVfcGxwZ3NxbF9kYXR1bXMoJmVzdGF0ZSwgZnVuYyk7 CisKIAkvKgogCSAqIFBvcCB0aGUgZXJyb3IgY29udGV4dCBzdGFjawogCSAqLwpAQCAtMTMw NCwxNSArMTMxMiwyMCBAQCBjb3B5X3BscGdzcWxfZGF0dW1zKFBMcGdTUUxfZXhlY3N0YXRl ICplc3RhdGUsCiAJY2hhcgkgICAqd3NfbmV4dDsKIAlpbnQJCQlpOwogCi0JLyogQWxsb2Nh dGUgbG9jYWwgZGF0dW0tcG9pbnRlciBhcnJheSAqLwotCWVzdGF0ZS0+ZGF0dW1zID0gKFBM cGdTUUxfZGF0dW0gKiopCi0JCXBhbGxvYyhzaXplb2YoUExwZ1NRTF9kYXR1bSAqKSAqIG5k YXR1bXMpOwotCiAJLyoKKwkgKiBBbGxvY2F0ZSBsb2NhbCBkYXR1bS1wb2ludGVyIGFycmF5 LCBmb2xsb3dlZCBieSBzcGFjZSBmb3IgdGhlIHZhbHVlcy4KKwkgKgogCSAqIFRvIHJlZHVj ZSBwYWxsb2Mgb3ZlcmhlYWQsIHdlIG1ha2UgYSBzaW5nbGUgcGFsbG9jIHJlcXVlc3QgZm9y IGFsbCB0aGUKIAkgKiBzcGFjZSBuZWVkZWQgZm9yIGxvY2FsbHktaW5zdGFudGlhdGVkIGRh dHVtcy4KIAkgKi8KLQl3b3Jrc3BhY2UgPSBwYWxsb2MoZnVuYy0+Y29waWFibGVfc2l6ZSk7 CisJZXN0YXRlLT5kYXR1bXMgPSAoUExwZ1NRTF9kYXR1bSAqKikKKwkJcGFsbG9jKE1BWEFM SUdOKHNpemVvZihQTHBnU1FMX2RhdHVtICopICogbmRhdHVtcykgKyBmdW5jLT5jb3BpYWJs ZV9zaXplKTsKKworCS8qCisJICogU3BhY2UgZm9yIHZhbHVlcyBzdGFydHMgYWZ0ZXIgdGhl IGRhdHVtLXBvaW50ZXIgYXJyYXksIGJ1dCB3ZSBuZWVkIHRvIG1ha2UKKwkgKiBzdXJlIGl0 J3MgYWxpZ25lZCBwcm9wZXJseS4KKwkgKi8KKwl3b3Jrc3BhY2UgPSAoY2hhciAqKSBlc3Rh dGUtPmRhdHVtcyArIE1BWEFMSUdOKHNpemVvZihQTHBnU1FMX2RhdHVtICopICogbmRhdHVt cyk7CiAJd3NfbmV4dCA9IHdvcmtzcGFjZTsKIAogCS8qIEZpbGwgZGF0dW0tcG9pbnRlciBh cnJheSwgY29weWluZyBkYXR1bXMgaW50byB3b3Jrc3BhY2UgYXMgbmVlZGVkICovCkBAIC0x MzYyLDYgKzEzNzUsMjIgQEAgY29weV9wbHBnc3FsX2RhdHVtcyhQTHBnU1FMX2V4ZWNzdGF0 ZSAqZXN0YXRlLAogCUFzc2VydCh3c19uZXh0ID09IHdvcmtzcGFjZSArIGZ1bmMtPmNvcGlh YmxlX3NpemUpOwogfQogCisvKgorICogRnJlZSB0aGUgbG9jYWwgZXhlY3V0aW9uIHZhcmlh Ymxlcy4gV2UndmUgYWxsb2NhdGVkIGFsbCBvZiB0aGUgc3BhY2UgYXQgb25jZQorICogc28g d2UgY2FuIHNpbXBseSBmcmVlIHRoZSBtYWluIHBvaW50ZXIuCisgKi8KK3N0YXRpYyB2b2lk CitmcmVlX3BscGdzcWxfZGF0dW1zKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCisJCQkJ CVBMcGdTUUxfZnVuY3Rpb24gKmZ1bmMpCit7CisJaWYgKGVzdGF0ZS0+ZGF0dW1zICE9IE5V TEwpCisJeworCQlwZnJlZShlc3RhdGUtPmRhdHVtcyk7CisJCWVzdGF0ZS0+ZGF0dW1zID0g TlVMTDsKKwl9CisKK30KKwogLyoKICAqIElmIHRoZSB2YXJpYWJsZSBoYXMgYW4gYXJtZWQg InByb21pc2UiLCBjb21wdXRlIHRoZSBwcm9taXNlZCB2YWx1ZQogICogYW5kIGFzc2lnbiBp dCB0byB0aGUgdmFyaWFibGUuCi0tIAoyLjQwLjEKCg== --------------V1xDijI0HvoXqRpA2g14OWDi--