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 1k8CCu-00021m-Au for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Aug 2020 00:44:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1k8CCs-000772-WF for pgsql-hackers@arkaria.postgresql.org; Wed, 19 Aug 2020 00:43:59 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1k8CCs-00076v-Fr for pgsql-hackers@lists.postgresql.org; Wed, 19 Aug 2020 00:43:58 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1k8CCp-0007WJ-7T for pgsql-hackers@postgresql.org; Wed, 19 Aug 2020 00:43:57 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 5D0256015F; Wed, 19 Aug 2020 09:43:50 +0900 (JST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.102.3 at oss.nttdata.com MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_fc4d3362403a28835222dabf2fe560ff" Date: Wed, 19 Aug 2020 09:43:50 +0900 From: torikoshia To: Fujii Masao Cc: PostgreSQL-development , Robert Haas , Kasahara Tatsuhito , Andres Freund , Michael Paquier Subject: Re: Creating a function for exposing memory usage of backend process In-Reply-To: <34517933-7e90-f644-f606-86d7132b240b@oss.nttdata.com> References: <805313b5f7dc2e6c19b209ff930a7a61@oss.nttdata.com> <9ee242b1-9e70-18f5-0033-6a086e71164d@oss.nttdata.com> <3548926512ddfaedfb5eaf967bf2f196@oss.nttdata.com> <20200708170348.rsqry4b4k5mrsu7y@alap3.anarazel.de> <24ea05d7bbdb652feef50caee6fcfbf8@oss.nttdata.com> <20200808014409.GA1600@paquier.xyz> <66c9d45297ad820cd092b125aa91ce2c@oss.nttdata.com> <98e53274-253f-6bd1-b542-489ecbda8753@oss.nttdata.com> <083781e2-339e-9844-a02c-53a0ee3beb82@oss.nttdata.com> <34517933-7e90-f644-f606-86d7132b240b@oss.nttdata.com> Message-ID: <0b339b06646e2c56a3aa081699322346@oss.nttdata.com> X-Sender: torikoshia@oss.nttdata.com User-Agent: Roundcube Webmail/1.1.9 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk --=_fc4d3362403a28835222dabf2fe560ff Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8; format=flowed On 2020-08-18 22:54, Fujii Masao wrote: > On 2020/08/18 18:41, torikoshia wrote: >> On 2020-08-17 21:19, Fujii Masao wrote: >>> On 2020/08/17 21:14, Fujii Masao wrote: >>>>> On 2020-08-07 16:38, Kasahara Tatsuhito wrote: >>>>>> The following review has been posted through the commitfest >>>>>> application: >>>>>> make installcheck-world:  tested, passed >>>>>> Implements feature:       tested, passed >>>>>> Spec compliant:           not tested >>>>>> Documentation:            tested, passed >>>>>> >>>>>> I tested the latest >>>>>> patch(0007-Adding-a-function-exposing-memory-usage-of-local-backend.patch) >>>>>> with the latest PG-version >>>>>> (199cec9779504c08aaa8159c6308283156547409) >>>>>> and test was passed. >>>>>> It looks good to me. >>>>>> >>>>>> The new status of this patch is: Ready for Committer >>>>> >>>>> Thanks for your testing! >>>> >>>> Thanks for updating the patch! Here are the review comments. >> >> Thanks for reviewing! >> >>>> >>>> +     >>>> +      >>> linkend="view-pg-backend-memory-contexts">pg_backend_memory_contexts >>>> +      backend memory contexts >>>> +     >>>> >>>> The above is located just after pg_matviews entry. But it should be >>>> located >>>> just after pg_available_extension_versions entry. Because the rows >>>> in the table >>>> "System Views" should be located in alphabetical order. >>>> >>>> >>>> + >>>> +  >>>> <structname>pg_backend_memory_contexts</structname> >>>> >>>> Same as above. >> >> Modified both. >> >>>> >>>> >>>> +   The view pg_backend_memory_contexts >>>> displays all >>>> +   the local backend memory contexts. >>>> >>>> This description seems a bit confusing because maybe we can >>>> interpret this >>>> as "... displays the memory contexts of all the local backends" >>>> wrongly. Thought? >>>> What about the following description, instead? >> >>>>      The view pg_backend_memory_contexts >>>> displays all >>>>      the memory contexts of the server process attached to the >>>> current session. >> >> Thanks! it seems better. >> >>>> +    const char *name = context->name; >>>> +    const char *ident = context->ident; >>>> + >>>> +    if (context == NULL) >>>> +        return; >>>> >>>> The above check "context == NULL" is useless? If "context" is >>>> actually NULL, >>>> "context->name" would cause segmentation fault, so ISTM that the >>>> check >>>> will never be performed. >>>> >>>> If "context" can be NULL, the check should be performed before >>>> accessing >>>> to "contect". OTOH, if "context" must not be NULL per the >>>> specification of >>>> PutMemoryContextStatsTupleStore(), assertion test checking >>>> "context != NULL" should be used here, instead? >> >> Yeah, "context" cannot be NULL because "context" must be >> TopMemoryContext >> or it is already checked as not NULL as follows(child != NULL). >> >> I added the assertion check. > > Isn't it better to add AssertArg(MemoryContextIsValid(context)), > instead? Thanks, that's better. >> >> | for (child = context->firstchild; child != NULL; child = >> child->nextchild) >> | { >> |  ... >> |         PutMemoryContextsStatsTupleStore(tupstore, tupdesc, >> |                                                           child, >> parentname, level + 1); >> | } >> >>> Here is another comment. >>> >>> +     if (parent == NULL) >>> +             nulls[2] = true; >>> +     else >>> +             /* >>> +              * We labeled dynahash contexts with just the hash >>> table name. >>> +              * To make it possible to identify its parent, we also >>> display >>> +              * parent's ident here. >>> +              */ >>> +             if (parent->ident && strcmp(parent->name, "dynahash") >>> == 0) >>> +                     values[2] = CStringGetTextDatum(parent->ident); >>> +             else >>> +                     values[2] = CStringGetTextDatum(parent->name); >>> >>> PutMemoryContextsStatsTupleStore() doesn't need "parent" memory >>> context, >>> but uses only the name of "parent" memory context. So isn't it better >>> to use >>> "const char *parent" instead of "MemoryContext parent", as the >>> argument of >>> the function? If we do that, we can simplify the above code. >> >> Thanks, the attached patch adopted the advice. >> >> However, since PutMemoryContextsStatsTupleStore() used not only the >> name >> but also the ident of the "parent", I could not help but adding >> similar >> codes before calling the function. >> The total amount of codes and complexity seem not to change so much. >> >> Any thoughts? Am I misunderstanding something? > > I was thinking that we can simplify the code as follows. > That is, we can just pass "name" as the argument of > PutMemoryContextsStatsTupleStore() > since "name" indicates context->name or ident (if name is "dynahash"). > > for (child = context->firstchild; child != NULL; child = > child->nextchild) > { > - const char *parentname; > - > - /* > - * We labeled dynahash contexts with just the hash table name. > - * To make it possible to identify its parent, we also use > - * the hash table as its context name. > - */ > - if (context->ident && strcmp(context->name, "dynahash") == 0) > - parentname = context->ident; > - else > - parentname = context->name; > - > PutMemoryContextsStatsTupleStore(tupstore, tupdesc, > - child, parentname, level + 1); > + child, name, level + 1); I got it, thanks for the clarification! Attached a revised patch. Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_fc4d3362403a28835222dabf2fe560ff Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0009-Adding-a-function-exposing-memory-usage-of-local-backend.patch Content-Disposition: attachment; filename*0*=UTF-8''0009-Adding-a-function-exposing-memory-usage-of-local-; filename*1*=backend.patch; size=12452 RnJvbSAwNTVhZjkwM2EzZGJmMTQ2ZDk3ZGQzZmIwMWE2YTdkM2QzYmQyYWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IFR1ZSwgMTkgQXVnIDIwMjAgMDk6MjA6MDEgKzA5MDAKU3ViamVjdDog W1BBVENIXSBUaGlzIHBhdGNoIGltcGxlbWVudHMgYSBuZXcgU1FMLWNhbGxhYmxlIGZ1bmN0aW9u CiBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgd2hpY2ggZXhwb3NlcyBtZW1vcnkgdXNh Z2Ugb2YgdGhlIGxvY2FsCiBiYWNrZW5kLiBJdCBhbHNvIGFkZHMgYSBuZXcgdmlldyBwZ19iYWNr ZW5kX21lbW9yeV9jb250ZXh0cyBmb3IgZXhwb3NpbmcKIGxvY2FsIGJhY2tlbmQgbWVtb3J5IGNv bnRleHRzLgoKLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAgfCAxMjIg KysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3 cy5zcWwgfCAgIDMgKwogc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgICAgICAgIHwgMTM1 ICsrKysrKysrKysrKysrKysrKysrKysrKysrKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9j LmRhdCAgICAgIHwgICA5ICsrCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3J1bGVzLm91dCAg fCAgMTAgKysKIDUgZmlsZXMgY2hhbmdlZCwgMjc5IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQg YS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21s CmluZGV4IGZjMzI5YzVjZmYuLjEyMzJiMjRlNzQgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC05MjI2LDYg KzkyMjYsMTEgQEAgU0NSQU0tU0hBLTI1NiQ8cmVwbGFjZWFibGU+Jmx0O2l0ZXJhdGlvbiBjb3Vu dCZndDs8L3JlcGxhY2VhYmxlPjo8cmVwbGFjZWFibGU+JmwKICAgICAgIDxlbnRyeT5hdmFpbGFi bGUgdmVyc2lvbnMgb2YgZXh0ZW5zaW9uczwvZW50cnk+CiAgICAgIDwvcm93PgogCisgICAgIDxy b3c+CisgICAgICA8ZW50cnk+PGxpbmsgbGlua2VuZD0idmlldy1wZy1iYWNrZW5kLW1lbW9yeS1j b250ZXh0cyI+PHN0cnVjdG5hbWU+cGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L3N0cnVjdG5h bWU+PC9saW5rPjwvZW50cnk+CisgICAgICA8ZW50cnk+YmFja2VuZCBtZW1vcnkgY29udGV4dHM8 L2VudHJ5PgorICAgICA8L3Jvdz4KKwogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaW5rIGxp bmtlbmQ9InZpZXctcGctY29uZmlnIj48c3RydWN0bmFtZT5wZ19jb25maWc8L3N0cnVjdG5hbWU+ PC9saW5rPjwvZW50cnk+CiAgICAgICA8ZW50cnk+Y29tcGlsZS10aW1lIGNvbmZpZ3VyYXRpb24g cGFyYW1ldGVyczwvZW50cnk+CkBAIC05NTc3LDYgKzk1ODIsMTIzIEBAIFNDUkFNLVNIQS0yNTYk PHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRpb24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxh Y2VhYmxlPiZsCiAgIDwvcGFyYT4KICA8L3NlY3QxPgogCisgPHNlY3QxIGlkPSJ2aWV3LXBnLWJh Y2tlbmQtbWVtb3J5LWNvbnRleHRzIj4KKyAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzPC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CisKKyAgPGluZGV4dGVybSB6b25l PSJ2aWV3LXBnLWJhY2tlbmQtbWVtb3J5LWNvbnRleHRzIj4KKyAgIDxwcmltYXJ5PnBnX2JhY2tl bmRfbWVtb3J5X2NvbnRleHRzPC9wcmltYXJ5PgorICA8L2luZGV4dGVybT4KKworICA8cGFyYT4K KyAgIFRoZSB2aWV3IDxzdHJ1Y3RuYW1lPnBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzPC9zdHJ1 Y3RuYW1lPiBkaXNwbGF5cyBhbGwKKyAgIHRoZSBtZW1vcnkgY29udGV4dHMgb2YgdGhlIHNlcnZl ciBwcm9jZXNzIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IHNlc3Npb24uCisgIDwvcGFyYT4KKyAg PHBhcmE+CisgICA8c3RydWN0bmFtZT5wZ19iYWNrZW5kX21lbW9yeV9jb250ZXh0czwvc3RydWN0 bmFtZT4gY29udGFpbnMgb25lIHJvdworICAgZm9yIGVhY2ggbWVtb3J5IGNvbnRleHQuCisgIDwv cGFyYT4KKworICA8dGFibGU+CisgICA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfYmFja2VuZF9tZW1v cnlfY29udGV4dHM8L3N0cnVjdG5hbWU+IENvbHVtbnM8L3RpdGxlPgorICAgPHRncm91cCBjb2xz PSIxIj4KKyAgICA8dGhlYWQ+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxv Z190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIENv bHVtbiBUeXBlCisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBEZXNjcmlwdGlv bgorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGhlYWQ+CisKKyAg ICA8dGJvZHk+CisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9l bnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVs ZD5uYW1lPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwYXJhPgorICAgICAgIE5hbWUgb2YgdGhlIG1lbW9yeSBjb250ZXh0CisgICAgICA8L3Bh cmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xl PSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+Cisg ICAgICAgPHN0cnVjdGZpZWxkPmlkZW50PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlwZT4K KyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIElkZW50aWZpY2F0aW9uIGluZm9y bWF0aW9uIG9mIHRoZSBtZW1vcnkgY29udGV4dC4gVGhpcyBmaWVsZCBpcyB0cnVuY2F0ZWQgYXQg MTAyNCBieXRlcworICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5wYXJlbnQ8L3N0cnVjdGZp ZWxkPiA8dHlwZT50ZXh0PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAg ICAgTmFtZSBvZiB0aGUgcGFyZW50IG9mIHRoaXMgbWVtb3J5IGNvbnRleHQKKyAgICAgIDwvcGFy YT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9 ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAg ICAgICA8c3RydWN0ZmllbGQ+bGV2ZWw8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQ0PC90eXBlPgor ICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgRGlzdGFuY2UgZnJvbSBUb3BNZW1v cnlDb250ZXh0IGluIGNvbnRleHQgdHJlZQorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwv cm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRy eSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD50 b3RhbF9ieXRlczwvc3RydWN0ZmllbGQ+IDx0eXBlPmludDg8L3R5cGU+CisgICAgICA8L3BhcmE+ CisgICAgICA8cGFyYT4KKyAgICAgICBUb3RhbCBieXRlcyBhbGxvY2F0ZWQgZm9yIHRoaXMgbWVt b3J5IGNvbnRleHQKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAgICA8 cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9 ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+dG90YWxfbmJsb2Nrczwv c3RydWN0ZmllbGQ+IDx0eXBlPmludDg8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFy YT4KKyAgICAgICBUb3RhbCBudW1iZXIgb2YgYmxvY2tzIGFsbG9jYXRlZCBmb3IgdGhpcyBtZW1v cnkgY29udGV4dAorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxy b3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0i Y29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5mcmVlX2J5dGVzPC9zdHJ1 Y3RmaWVsZD4gPHR5cGU+aW50ODwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgor ICAgICAgIEZyZWUgc3BhY2UgaW4gYnl0ZXMKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8 L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ ZnJlZV9jaHVua3M8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQ4PC90eXBlPgorICAgICAgPC9wYXJh PgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgICAg ICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRy eSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlv biI+CisgICAgICAgPHN0cnVjdGZpZWxkPnVzZWRfYnl0ZXM8L3N0cnVjdGZpZWxkPiA8dHlwZT5p bnQ4PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVXNlZCBzcGFj ZSBpbiBieXRlcworICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorICAgIDwvdGJv ZHk+CisgICA8L3Rncm91cD4KKyAgPC90YWJsZT4KKworIDwvc2VjdDE+CisKICA8c2VjdDEgaWQ9 InZpZXctcGctY29uZmlnIj4KICAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX2NvbmZpZzwvc3RydWN0 bmFtZT48L3RpdGxlPgogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92 aWV3cy5zcWwgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3N5c3RlbV92aWV3cy5zcWwKaW5kZXggODYy NWNiZWFiNi4uYmE1YTIzYWMyNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0 ZW1fdmlld3Muc3FsCisrKyBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApA QCAtNTU0LDYgKzU1NCw5IEBAIENSRUFURSBWSUVXIHBnX3NobWVtX2FsbG9jYXRpb25zIEFTCiBS RVZPS0UgQUxMIE9OIHBnX3NobWVtX2FsbG9jYXRpb25zIEZST00gUFVCTElDOwogUkVWT0tFIEVY RUNVVEUgT04gRlVOQ1RJT04gcGdfZ2V0X3NobWVtX2FsbG9jYXRpb25zKCkgRlJPTSBQVUJMSUM7 CiAKK0NSRUFURSBWSUVXIHBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIEFTCisgICAgU0VMRUNU ICogRlJPTSBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMoKTsKKwogLS0gU3RhdGlzdGlj cyB2aWV3cwogCiBDUkVBVEUgVklFVyBwZ19zdGF0X2FsbF90YWJsZXMgQVMKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3V0aWxzL21tZ3IvbWN4dC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9t Y3h0LmMKaW5kZXggYWJkYTIyZmE1Ny4uYzVmYjVkNWRhYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvbW1nci9tY3h0LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMK QEAgLTIxLDggKzIxLDEwIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAi ZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWlu LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9tZW1kZWJ1 Zy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKQEAgLTY3LDYgKzY5LDEyIEBAIHN0 YXRpYyB2b2lkIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KE1lbW9yeUNvbnRleHQgY29udGV4dCwg dm9pZCAqcGFzc3RocnUsCiAjZGVmaW5lIEFzc2VydE5vdEluQ3JpdGljYWxTZWN0aW9uKGNvbnRl eHQpIFwKIAlBc3NlcnQoQ3JpdFNlY3Rpb25Db3VudCA9PSAwIHx8IChjb250ZXh0KS0+YWxsb3dJ bkNyaXRTZWN0aW9uKQogCisvKiAtLS0tLS0tLS0tCisgKiBUaGUgbWF4IGJ5dGVzIGZvciBzaG93 aW5nIGlkZW50aWZpZXJzIG9mIE1lbW9yeUNvbnRleHQuCisgKiAtLS0tLS0tLS0tCisgKi8KKyNk ZWZpbmUgTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpFCTEwMjQKKwogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKgkgIEVYUE9SVEVEIFJPVVRJTkVTCQkJCQkJCQkJCQkJCQkgKgogICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLwpAQCAtMTIyMCwzICsxMjI4LDEzMCBAQCBwY2hvbXAoY29uc3Qg Y2hhciAqaW4pCiAJCW4tLTsKIAlyZXR1cm4gcG5zdHJkdXAoaW4sIG4pOwogfQorCisvKgorICog UHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUKKyAqCQlPbmUgcmVjdXJzaW9uIGxldmVs IGZvciBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuCisgKi8KK3N0YXRpYyB2b2lkCitQ dXRNZW1vcnlDb250ZXh0c1N0YXRzVHVwbGVTdG9yZShUdXBsZXN0b3Jlc3RhdGUgKnR1cHN0b3Jl LAorCQkJCQkJCQlUdXBsZURlc2MgdHVwZGVzYywgTWVtb3J5Q29udGV4dCBjb250ZXh0LAorCQkJ CQkJCQljb25zdCBjaGFyICpwYXJlbnQsIGludCBsZXZlbCkKK3sKKyNkZWZpbmUgUEdfR0VUX0JB Q0tFTkRfTUVNT1JZX0NPTlRFWFRTX0NPTFMJOQorCisJRGF0dW0JCXZhbHVlc1tQR19HRVRfQkFD S0VORF9NRU1PUllfQ09OVEVYVFNfQ09MU107CisJYm9vbAkJbnVsbHNbUEdfR0VUX0JBQ0tFTkRf TUVNT1JZX0NPTlRFWFRTX0NPTFNdOworCU1lbW9yeUNvbnRleHRDb3VudGVycyBzdGF0OworCU1l bW9yeUNvbnRleHQgY2hpbGQ7CisJY29uc3QgY2hhciAqbmFtZTsKKwljb25zdCBjaGFyICppZGVu dDsKKworCUFzc2VydEFyZyhNZW1vcnlDb250ZXh0SXNWYWxpZChjb250ZXh0KSk7CisKKwluYW1l ID0gY29udGV4dC0+bmFtZTsKKwlpZGVudCA9IGNvbnRleHQtPmlkZW50OworCisJLyoKKwkgKiBU byBiZSBjb25zaXN0ZW50IHdpdGggbG9nZ2luZyBvdXRwdXQsIHdlIGxhYmVsIGR5bmFoYXNoIGNv bnRleHRzCisJICogd2l0aCBqdXN0IHRoZSBoYXNoIHRhYmxlIG5hbWUgYXMgd2l0aCBNZW1vcnlD b250ZXh0U3RhdHNQcmludCgpLgorCSAqLworCWlmIChpZGVudCAmJiBzdHJjbXAobmFtZSwgImR5 bmFoYXNoIikgPT0gMCkKKwl7CisJCW5hbWUgPSBpZGVudDsKKwkJaWRlbnQgPSBOVUxMOworCX0K KworCS8qIEV4YW1pbmUgdGhlIGNvbnRleHQgaXRzZWxmICovCisJbWVtc2V0KCZzdGF0LCAwLCBz aXplb2Yoc3RhdCkpOworCSgqY29udGV4dC0+bWV0aG9kcy0+c3RhdHMpIChjb250ZXh0LCBOVUxM LCAodm9pZCAqKSAmbGV2ZWwsICZzdGF0KTsKKworCW1lbXNldCh2YWx1ZXMsIDAsIHNpemVvZih2 YWx1ZXMpKTsKKwltZW1zZXQobnVsbHMsIDAsIHNpemVvZihudWxscykpOworCisJdmFsdWVzWzBd ID0gQ1N0cmluZ0dldFRleHREYXR1bShuYW1lKTsKKworCWlmIChpZGVudCkKKwl7CisJCWludAkJ aWRsZW4gPSBzdHJsZW4oaWRlbnQpOworCQljaGFyCQljbGlwcGVkX2lkZW50W01FTU9SWV9DT05U RVhUX0lERU5UX0RJU1BMQVlfU0laRV07CisKKwkJLyoKKwkJICogU29tZSBpZGVudGlmaWVycyBz dWNoIGFzIFNRTCBxdWVyeSBzdHJpbmcgY2FuIGJlIHZlcnkgbG9uZywKKwkJICogdHJ1bmNhdGUg b3ZlcnNpemUgaWRlbnRpZmllcnMuCisJCSAqLworCQlpZiAoaWRsZW4gPj0gTUVNT1JZX0NPTlRF WFRfSURFTlRfRElTUExBWV9TSVpFKQorCQkJaWRsZW4gPSBwZ19tYmNsaXBsZW4oaWRlbnQsIGlk bGVuLCBNRU1PUllfQ09OVEVYVF9JREVOVF9ESVNQTEFZX1NJWkUgLSAxKTsKKworCQltZW1jcHko Y2xpcHBlZF9pZGVudCwgaWRlbnQsIGlkbGVuKTsKKwkJY2xpcHBlZF9pZGVudFtpZGxlbl0gPSAn XDAnOworCQl2YWx1ZXNbMV0gPSBDU3RyaW5nR2V0VGV4dERhdHVtKGNsaXBwZWRfaWRlbnQpOwor CX0KKwllbHNlCisJCW51bGxzWzFdID0gdHJ1ZTsKKworCWlmIChwYXJlbnQgPT0gTlVMTCkKKwkJ bnVsbHNbMl0gPSB0cnVlOworCWVsc2UKKwkJdmFsdWVzWzJdID0gQ1N0cmluZ0dldFRleHREYXR1 bShwYXJlbnQpOworCisJdmFsdWVzWzNdID0gSW50MzJHZXREYXR1bShsZXZlbCk7CisJdmFsdWVz WzRdID0gSW50NjRHZXREYXR1bShzdGF0LnRvdGFsc3BhY2UpOworCXZhbHVlc1s1XSA9IEludDY0 R2V0RGF0dW0oc3RhdC5uYmxvY2tzKTsKKwl2YWx1ZXNbNl0gPSBJbnQ2NEdldERhdHVtKHN0YXQu ZnJlZXNwYWNlKTsKKwl2YWx1ZXNbN10gPSBJbnQ2NEdldERhdHVtKHN0YXQuZnJlZWNodW5rcyk7 CisJdmFsdWVzWzhdID0gSW50NjRHZXREYXR1bShzdGF0LnRvdGFsc3BhY2UgLSBzdGF0LmZyZWVz cGFjZSk7CisJdHVwbGVzdG9yZV9wdXR2YWx1ZXModHVwc3RvcmUsIHR1cGRlc2MsIHZhbHVlcywg bnVsbHMpOworCisJZm9yIChjaGlsZCA9IGNvbnRleHQtPmZpcnN0Y2hpbGQ7IGNoaWxkICE9IE5V TEw7IGNoaWxkID0gY2hpbGQtPm5leHRjaGlsZCkKKwl7CisJCVB1dE1lbW9yeUNvbnRleHRzU3Rh dHNUdXBsZVN0b3JlKHR1cHN0b3JlLCB0dXBkZXNjLAorCQkJCQkJCQkgIGNoaWxkLCBuYW1lLCBs ZXZlbCArIDEpOworCX0KK30KKworLyoKKyAqIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0 cworICoJCVNRTCBTUkYgc2hvd2luZyBiYWNrZW5kIG1lbW9yeSBjb250ZXh0LgorICovCitEYXR1 bQorcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJ UmV0dXJuU2V0SW5mbyAqcnNpbmZvID0gKFJldHVyblNldEluZm8gKikgZmNpbmZvLT5yZXN1bHRp bmZvOworCVR1cGxlRGVzYwl0dXBkZXNjOworCVR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmU7CisJ TWVtb3J5Q29udGV4dCBwZXJfcXVlcnlfY3R4OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KworCS8qIGNoZWNrIHRvIHNlZSBpZiBjYWxsZXIgc3VwcG9ydHMgdXMgcmV0dXJuaW5nIGEgdHVw bGVzdG9yZSAqLworCWlmIChyc2luZm8gPT0gTlVMTCB8fCAhSXNBKHJzaW5mbywgUmV0dXJuU2V0 SW5mbykpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05P VF9TVVBQT1JURUQpLAorCQkJCSBlcnJtc2coInNldC12YWx1ZWQgZnVuY3Rpb24gY2FsbGVkIGlu IGNvbnRleHQgdGhhdCBjYW5ub3QgYWNjZXB0IGEgc2V0IikpKTsKKwlpZiAoIShyc2luZm8tPmFs bG93ZWRNb2RlcyAmIFNGUk1fTWF0ZXJpYWxpemUpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShl cnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkgZXJybXNnKCJtYXRl cmlhbGl6ZSBtb2RlIHJlcXVpcmVkLCBidXQgaXQgaXMgbm90IGFsbG93ZWQgaW4gdGhpcyBjb250 ZXh0IikpKTsKKworCS8qIEJ1aWxkIGEgdHVwbGUgZGVzY3JpcHRvciBmb3Igb3VyIHJlc3VsdCB0 eXBlICovCisJaWYgKGdldF9jYWxsX3Jlc3VsdF90eXBlKGZjaW5mbywgTlVMTCwgJnR1cGRlc2Mp ICE9IFRZUEVGVU5DX0NPTVBPU0lURSkKKwkJZWxvZyhFUlJPUiwgInJldHVybiB0eXBlIG11c3Qg YmUgYSByb3cgdHlwZSIpOworCisJcGVyX3F1ZXJ5X2N0eCA9IHJzaW5mby0+ZWNvbnRleHQtPmVj eHRfcGVyX3F1ZXJ5X21lbW9yeTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KHBlcl9xdWVyeV9jdHgpOworCisJdHVwc3RvcmUgPSB0dXBsZXN0b3JlX2JlZ2luX2hlYXAodHJ1 ZSwgZmFsc2UsIHdvcmtfbWVtKTsKKwlyc2luZm8tPnJldHVybk1vZGUgPSBTRlJNX01hdGVyaWFs aXplOworCXJzaW5mby0+c2V0UmVzdWx0ID0gdHVwc3RvcmU7CisJcnNpbmZvLT5zZXREZXNjID0g dHVwZGVzYzsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKworCVB1dE1l bW9yeUNvbnRleHRzU3RhdHNUdXBsZVN0b3JlKHR1cHN0b3JlLCB0dXBkZXNjLAorCQkJCQkJCQlU b3BNZW1vcnlDb250ZXh0LCBOVUxMLCAwKTsKKworCS8qIGNsZWFuIHVwIGFuZCByZXR1cm4gdGhl IHR1cGxlc3RvcmUgKi8KKwl0dXBsZXN0b3JlX2RvbmVzdG9yaW5nKHR1cHN0b3JlKTsKKworCXJl dHVybiAoRGF0dW0pIDA7Cit9CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3By b2MuZGF0IGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCAwODJhMTFmMjcw Li4yNzk4OTk3MWRiIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKQEAgLTc4MDcsNiArNzgwNywx NSBAQAogICBwcm9hcmduYW1lcyA9PiAne25hbWUsb2ZmLHNpemUsYWxsb2NhdGVkX3NpemV9JywK ICAgcHJvc3JjID0+ICdwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMnIH0sCiAKKyMgbWVtb3J5IGNv bnRleHQgb2YgbG9jYWwgYmFja2VuZAoreyBvaWQgPT4gJzIyODInLCBkZXNjciA9PiAnaW5mb3Jt YXRpb24gYWJvdXQgYWxsIG1lbW9yeSBjb250ZXh0cyBvZiBsb2NhbCBiYWNrZW5kJywKKyAgcHJv bmFtZSA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJywgcHJvcm93cyA9PiAnMTAw JywgcHJvcmV0c2V0ID0+ICd0JywKKyAgcHJvdm9sYXRpbGUgPT4gJ3YnLCBwcm9wYXJhbGxlbCA9 PiAncicsIHByb3JldHR5cGUgPT4gJ3JlY29yZCcsIHByb2FyZ3R5cGVzID0+ICcnLAorICBwcm9h bGxhcmd0eXBlcyA9PiAne3RleHQsdGV4dCx0ZXh0LGludDQsaW50OCxpbnQ4LGludDgsaW50OCxp bnQ4fScsCisgIHByb2FyZ21vZGVzID0+ICd7byxvLG8sbyxvLG8sbyxvLG99JywKKyAgcHJvYXJn bmFtZXMgPT4gJ3tuYW1lLCBpZGVudCwgcGFyZW50LCBsZXZlbCwgdG90YWxfYnl0ZXMsIHRvdGFs X25ibG9ja3MsIGZyZWVfYnl0ZXMsIGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCisgIHByb3Ny YyA9PiAncGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzJyB9LAorCiAjIG5vbi1wZXJzaXN0 ZW50IHNlcmllcyBnZW5lcmF0b3IKIHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25vbi1wZXJz aXN0ZW50IHNlcmllcyBnZW5lcmF0b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9zZXJpZXMn LCBwcm9yb3dzID0+ICcxMDAwJywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcnVsZXMub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXgg NjAxNzM0YTZmMS4uMmExOGRjNDIzZSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ydWxlcy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQK QEAgLTEzMjQsNiArMTMyNCwxNiBAQCBwZ19hdmFpbGFibGVfZXh0ZW5zaW9uc3wgU0VMRUNUIGUu bmFtZSwKICAgICBlLmNvbW1lbnQKICAgIEZST00gKHBnX2F2YWlsYWJsZV9leHRlbnNpb25zKCkg ZShuYW1lLCBkZWZhdWx0X3ZlcnNpb24sIGNvbW1lbnQpCiAgICAgIExFRlQgSk9JTiBwZ19leHRl bnNpb24geCBPTiAoKGUubmFtZSA9IHguZXh0bmFtZSkpKTsKK3BnX2JhY2tlbmRfbWVtb3J5X2Nv bnRleHRzfCBTRUxFQ1QgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLm5hbWUsCisgICAg cGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLmlkZW50LAorICAgIHBnX2dldF9iYWNrZW5k X21lbW9yeV9jb250ZXh0cy5wYXJlbnQsCisgICAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRl eHRzLmxldmVsLAorICAgIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cy50b3RhbF9ieXRl cywKKyAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMudG90YWxfbmJsb2NrcywKKyAg ICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMuZnJlZV9ieXRlcywKKyAgICBwZ19nZXRf YmFja2VuZF9tZW1vcnlfY29udGV4dHMuZnJlZV9jaHVua3MsCisgICAgcGdfZ2V0X2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzLnVzZWRfYnl0ZXMKKyAgIEZST00gcGdfZ2V0X2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzKCkgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzKG5hbWUsIGlkZW50LCBw YXJlbnQsIGxldmVsLCB0b3RhbF9ieXRlcywgdG90YWxfbmJsb2NrcywgZnJlZV9ieXRlcywgZnJl ZV9jaHVua3MsIHVzZWRfYnl0ZXMpOwogcGdfY29uZmlnfCBTRUxFQ1QgcGdfY29uZmlnLm5hbWUs CiAgICAgcGdfY29uZmlnLnNldHRpbmcKICAgIEZST00gcGdfY29uZmlnKCkgcGdfY29uZmlnKG5h bWUsIHNldHRpbmcpOwotLSAKMi4xOC4xCgo= --=_fc4d3362403a28835222dabf2fe560ff--