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 1jtoSP-0004cg-He for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2020 08:32:33 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1jtoSO-0005zo-En for pgsql-hackers@arkaria.postgresql.org; Fri, 10 Jul 2020 08:32:32 +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 1jtoSO-0005zh-4y for pgsql-hackers@lists.postgresql.org; Fri, 10 Jul 2020 08:32:32 +0000 Received: from oss.nttdata.com ([49.212.34.109]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1jtoSJ-0006XO-V9 for pgsql-hackers@postgresql.org; Fri, 10 Jul 2020 08:32:31 +0000 Received: from oss.nttdata.com (localhost [127.0.0.1]) by oss.nttdata.com (Postfix) with ESMTP id 86C5F605E6; Fri, 10 Jul 2020 17:32:23 +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="=_23bd1611b5b99300b2f8af54986a156d" Date: Fri, 10 Jul 2020 17:32:23 +0900 From: torikoshia To: Andres Freund Cc: Fujii Masao , pgsql-hackers@postgresql.org Subject: Re: Creating a function for exposing memory usage of backend process In-Reply-To: <20200708170348.rsqry4b4k5mrsu7y@alap3.anarazel.de> References: <78268b5f-53ed-4645-1abb-23c1030cce0a@oss.nttdata.com> <6c828f3a1d44dba81999fc7990b8f1c5@oss.nttdata.com> <062bab2db5645812fae12e3a965de463@oss.nttdata.com> <5cbed0cc-79fc-3b98-120a-20e07848d10a@oss.nttdata.com> <805313b5f7dc2e6c19b209ff930a7a61@oss.nttdata.com> <9ee242b1-9e70-18f5-0033-6a086e71164d@oss.nttdata.com> <3548926512ddfaedfb5eaf967bf2f196@oss.nttdata.com> <20200708170348.rsqry4b4k5mrsu7y@alap3.anarazel.de> Message-ID: <24ea05d7bbdb652feef50caee6fcfbf8@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 --=_23bd1611b5b99300b2f8af54986a156d Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=US-ASCII; format=flowed On 2020-07-09 02:03, Andres Freund wrote: > Hi, > > I think this is an incredibly useful feature. Thanks for your kind comments and suggestion! > On 2020-07-07 22:02:10 +0900, torikoshia wrote: >> > There can be multiple memory contexts with the same name. So I'm afraid >> > that it's difficult to identify the actual parent memory context from >> > this >> > "parent" column. This is ok when logging memory contexts by calling >> > MemoryContextStats() via gdb. Because child memory contexts are printed >> > just under their parent, with indents. But this doesn't work in the >> > view. >> > To identify the actual parent memory or calculate the memory contexts >> > tree >> > from the view, we might need to assign unique ID to each memory context >> > and display it. But IMO this is overkill. So I'm fine with current >> > "parent" >> > column. Thought? Do you have any better idea? >> >> Indeed. >> I also feel it's not usual to assign a unique ID, which >> can vary every time the view displayed. > > Hm. I wonder if we just could include the address of the context > itself. There might be reasons not to do so (e.g. security concerns > about leaked pointers making attacks easier), but I think it's worth > considering. I tried exposing addresses of each context and their parent. Attached a poc patch. =# SELECT name, address, parent_address, total_bytes FROM pg_backend_memory_contexts ; name | address | parent_address | total_bytes --------------------------+-----------+----------------+------------- TopMemoryContext | 0x1280da0 | | 80800 TopTransactionContext | 0x1309040 | 0x1280da0 | 8192 Prepared Queries | 0x138a480 | 0x1280da0 | 16384 Type information cache | 0x134b8c0 | 0x1280da0 | 24624 ... CacheMemoryContext | 0x12cb390 | 0x1280da0 | 1048576 CachedPlanSource | 0x13c47f0 | 0x12cb390 | 4096 CachedPlanQuery | 0x13c9ae0 | 0x13c47f0 | 4096 CachedPlanSource | 0x13c7310 | 0x12cb390 | 4096 CachedPlanQuery | 0x13c1230 | 0x13c7310 | 4096 ... Now it's possible to identify the actual parent memory context even when there are multiple memory contexts with the same name. I'm not sure, but I'm also worrying about this might incur some security related problems.. I'd like to hear more opinions about: - whether information for identifying parent-child relation is necessary or it's an overkill - if this information is necessary, memory address is suitable or other means like assigning unique numbers are required >> +/* >> + * PutMemoryContextsStatsTupleStore >> + * One recursion level for pg_get_backend_memory_contexts. >> + */ >> +static void >> +PutMemoryContextsStatsTupleStore(Tuplestorestate *tupstore, >> + TupleDesc tupdesc, MemoryContext context, >> + MemoryContext parent, int level) >> +{ >> +#define PG_GET_BACKEND_MEMORY_CONTEXTS_COLS 9 >> + Datum values[PG_GET_BACKEND_MEMORY_CONTEXTS_COLS]; >> + bool nulls[PG_GET_BACKEND_MEMORY_CONTEXTS_COLS]; >> + MemoryContextCounters stat; >> + MemoryContext child; >> + const char *name = context->name; >> + const char *ident = context->ident; >> + >> + if (context == NULL) >> + return; >> + >> + /* >> + * To be consistent with logging output, we label dynahash contexts >> + * with just the hash table name as with MemoryContextStatsPrint(). >> + */ >> + if (ident && strcmp(name, "dynahash") == 0) >> + { >> + name = ident; >> + ident = NULL; >> + } >> + >> + /* Examine the context itself */ >> + memset(&stat, 0, sizeof(stat)); >> + (*context->methods->stats) (context, NULL, (void *) &level, &stat); >> + >> + memset(values, 0, sizeof(values)); >> + memset(nulls, 0, sizeof(nulls)); >> + >> + values[0] = CStringGetTextDatum(name); >> + >> + if (ident) >> + { >> + int idlen = strlen(ident); >> + char clipped_ident[MEMORY_CONTEXT_IDENT_DISPLAY_SIZE]; >> + >> + /* >> + * Some identifiers such as SQL query string can be very long, >> + * truncate oversize identifiers. >> + */ >> + if (idlen >= MEMORY_CONTEXT_IDENT_DISPLAY_SIZE) >> + idlen = pg_mbcliplen(ident, idlen, >> MEMORY_CONTEXT_IDENT_DISPLAY_SIZE - 1); >> + > > Why? As described below[1], too long messages caused problems in the past and now MemoryContextStatsPrint() truncates ident, so I decided to truncate it also here. Do you think it's not necessary here? [1] https://www.postgresql.org/message-id/12319.1521999065@sss.pgh.pa.us Regards, -- Atsushi Torikoshi NTT DATA CORPORATION --=_23bd1611b5b99300b2f8af54986a156d Content-Transfer-Encoding: base64 Content-Type: text/x-diff; name=0006-Adding-a-function-exposing-memory-usage-of-local-backend.patch Content-Disposition: attachment; filename*0*=UTF-8''0006-Adding-a-function-exposing-memory-usage-of-local-; filename*1*=backend.patch; size=13078 RnJvbSAwNTVhZjkwM2EzZGJmMTQ2ZDk3ZGQzZmIwMWE2YTdkM2QzYmQyYWUwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBdHN1c2hpIFRvcmlrb3NoaSA8dG9yaWtvc2hpYUBvc3MubnR0 ZGF0YS5jb20+CkRhdGU6IEZyaSwgMTAgSnVsIDIwMjAgMTc6MDE6MDEgKzA5MDAKU3ViamVjdDog W1BBVENIXSBBZGQgYSBmdW5jdGlvbiBleHBvc2luZyBtZW1vcnkgdXNhZ2Ugb2YgbG9jYWwgYmFj a2VuZC4KClRoaXMgcGF0Y2ggaW1wbGVtZW50cyBhIG5ldyBTUUwtY2FsbGFibGUgZnVuY3Rpb24K cGdfZ2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzIHdoaWNoIGV4cG9zZXMgbWVtb3J5IHVzYWdl IG9mIHRoZQpsb2NhbCBiYWNrZW5kLgpJdCBhbHNvIGFkZHMgYSBuZXcgdmlldyBwZ19iYWNrZW5k X21lbW9yeV9jb250ZXh0cyBmb3IgZXhwb3NpbmcKbG9jYWwgYmFja2VuZCBtZW1vcnkgY29udGV4 dHMuCi0tLQogZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwgICAgICAgICAgIHwgMTMxICsrKysr KysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNx bCB8ICAgMyArCiBzcmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYyAgICAgICAgfCAxNDEgKysr KysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0 ICAgICAgfCAgIDkgKysKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0ICB8ICAx MCArKwogNSBmaWxlcyBjaGFuZ2VkLCAyOTMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoK ZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sIGIvZG9jL3NyYy9zZ21sL2Nh dGFsb2dzLnNnbWwKaW5kZXggZTljZGZmNDg2NC4uYjg0YTA2ZWU3ZCAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL2NhdGFsb2dzLnNnbWwK QEAgLTkyNDksNiArOTI0OSwxMSBAQCBTQ1JBTS1TSEEtMjU2JDxyZXBsYWNlYWJsZT4mbHQ7aXRl cmF0aW9uIGNvdW50Jmd0OzwvcmVwbGFjZWFibGU+OjxyZXBsYWNlYWJsZT4mbAogICAgICAgPGVu dHJ5Pm1hdGVyaWFsaXplZCB2aWV3czwvZW50cnk+CiAgICAgIDwvcm93PgogCisgICAgIDxyb3c+ CisgICAgICA8ZW50cnk+PGxpbmsgbGlua2VuZD0idmlldy1wZy1iYWNrZW5kLW1lbW9yeS1jb250 ZXh0cyI+PHN0cnVjdG5hbWU+cGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L3N0cnVjdG5hbWU+ PC9saW5rPjwvZW50cnk+CisgICAgICA8ZW50cnk+YmFja2VuZCBtZW1vcnkgY29udGV4dHM8L2Vu dHJ5PgorICAgICA8L3Jvdz4KKwogICAgICA8cm93PgogICAgICAgPGVudHJ5PjxsaW5rIGxpbmtl bmQ9InZpZXctcGctcG9saWNpZXMiPjxzdHJ1Y3RuYW1lPnBnX3BvbGljaWVzPC9zdHJ1Y3RuYW1l PjwvbGluaz48L2VudHJ5PgogICAgICAgPGVudHJ5PnBvbGljaWVzPC9lbnRyeT4KQEAgLTEwNTI3 LDYgKzEwNTMyLDEzMiBAQCBTRUxFQ1QgKiBGUk9NIHBnX2xvY2tzIHBsIExFRlQgSk9JTiBwZ19w cmVwYXJlZF94YWN0cyBwcHgKIAogIDwvc2VjdDE+CiAKKyA8c2VjdDEgaWQ9InZpZXctcGctYmFj a2VuZC1tZW1vcnktY29udGV4dHMiPgorICA8dGl0bGU+PHN0cnVjdG5hbWU+cGdfYmFja2VuZF9t ZW1vcnlfY29udGV4dHM8L3N0cnVjdG5hbWU+PC90aXRsZT4KKworICA8aW5kZXh0ZXJtIHpvbmU9 InZpZXctcGctYmFja2VuZC1tZW1vcnktY29udGV4dHMiPgorICAgPHByaW1hcnk+cGdfYmFja2Vu ZF9tZW1vcnlfY29udGV4dHM8L3ByaW1hcnk+CisgIDwvaW5kZXh0ZXJtPgorCisgIDxwYXJhPgor ICAgVGhlIHZpZXcgPHN0cnVjdG5hbWU+cGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHM8L3N0cnVj dG5hbWU+IGRpc3BsYXlzIGFsbAorICAgdGhlIGxvY2FsIGJhY2tlbmQgbWVtb3J5IGNvbnRleHRz LgorICA8L3BhcmE+CisgIDxwYXJhPgorICAgPHN0cnVjdG5hbWU+cGdfYmFja2VuZF9tZW1vcnlf Y29udGV4dHM8L3N0cnVjdG5hbWU+IGNvbnRhaW5zIG9uZSByb3cKKyAgIGZvciBlYWNoIG1lbW9y eSBjb250ZXh0LgorICA8L3BhcmE+CisKKyAgPHRhYmxlPgorICAgPHRpdGxlPjxzdHJ1Y3RuYW1l PnBnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzPC9zdHJ1Y3RuYW1lPiBDb2x1bW5zPC90aXRsZT4K KyAgIDx0Z3JvdXAgY29scz0iMSI+CisgICAgPHRoZWFkPgorICAgICA8cm93PgorICAgICAgPGVu dHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0 aW9uIj4KKyAgICAgICBDb2x1bW4gVHlwZQorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+Cisg ICAgICAgRGVzY3JpcHRpb24KKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAg ICA8L3RoZWFkPgorCisgICAgPHRib2R5PgorICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9 ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAg ICAgICA8c3RydWN0ZmllbGQ+bmFtZTwvc3RydWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5cGU+Cisg ICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBOYW1lIG9mIHRoZSBtZW1vcnkgY29u dGV4dAorICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+Cisg ICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1u X2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD5pZGVudDwvc3RydWN0ZmllbGQ+IDx0 eXBlPnRleHQ8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBJZGVu dGlmaWNhdGlvbiBpbmZvcm1hdGlvbiBvZiB0aGUgbWVtb3J5IGNvbnRleHQuIFRoaXMgZmllbGQg aXMgdHJ1bmNhdGVkIGF0IDEwMjQgYnl0ZXMKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8 L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50 cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ cGFyZW50PC9zdHJ1Y3RmaWVsZD4gPHR5cGU+dGV4dDwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAg ICAgIDxwYXJhPgorICAgICAgIE5hbWUgb2YgdGhlIHBhcmVudCBvZiB0aGlzIG1lbW9yeSBjb250 ZXh0CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAg ICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5f ZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPmFkZHJlc3M8L3N0cnVjdGZpZWxkPiA8 dHlwZT50ZXh0PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAgPHBhcmE+CisgICAgICAgTWVt b3J5IGFkZHJlc3Mgb2YgdGhpcyBtZW1vcnkgY29udGV4dAorICAgICAgPC9wYXJhPjwvZW50cnk+ CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8ZW50cnkgcm9sZT0iY2F0YWxvZ190 YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmluaXRpb24iPgorICAgICAgIDxzdHJ1 Y3RmaWVsZD5wYXJlbnRfYWRkcmVzczwvc3RydWN0ZmllbGQ+IDx0eXBlPnRleHQ8L3R5cGU+Cisg ICAgICA8L3BhcmE+CisgICAgICA8cGFyYT4KKyAgICAgICBNZW1vcnkgYWRkcmVzcyBvZiB0aGUg cGFyZW50IG9mIHRoaXMgbWVtb3J5IGNvbnRleHQKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAg ICA8L3Jvdz4KKworICAgICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVf ZW50cnkiPjxwYXJhIHJvbGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0Zmll bGQ+dG90YWxfYnl0ZXM8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQ4PC90eXBlPgorICAgICAgPC9w YXJhPgorICAgICAgPHBhcmE+CisgICAgICAgVG90YWwgYnl0ZXMgYWxsb2NhdGVkIGZvciB0aGlz IG1lbW9yeSBjb250ZXh0CisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAgICAgPC9yb3c+CisKKyAg ICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSBy b2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZpZWxkPnRvdGFsX25ibG9j a3M8L3N0cnVjdGZpZWxkPiA8dHlwZT5pbnQ4PC90eXBlPgorICAgICAgPC9wYXJhPgorICAgICAg PHBhcmE+CisgICAgICAgVG90YWwgbnVtYmVyIG9mIGJsb2NrcyBhbGxvY2F0ZWQgZm9yIHRoaXMg bWVtb3J5IGNvbnRleHQKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKworICAg ICA8cm93PgorICAgICAgPGVudHJ5IHJvbGU9ImNhdGFsb2dfdGFibGVfZW50cnkiPjxwYXJhIHJv bGU9ImNvbHVtbl9kZWZpbml0aW9uIj4KKyAgICAgICA8c3RydWN0ZmllbGQ+ZnJlZV9ieXRlczwv c3RydWN0ZmllbGQ+IDx0eXBlPmludDg8L3R5cGU+CisgICAgICA8L3BhcmE+CisgICAgICA8cGFy YT4KKyAgICAgICBGcmVlIHNwYWNlIGluIGJ5dGVzCisgICAgICA8L3BhcmE+PC9lbnRyeT4KKyAg ICAgPC9yb3c+CisKKyAgICAgPHJvdz4KKyAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxl X2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1bW5fZGVmaW5pdGlvbiI+CisgICAgICAgPHN0cnVjdGZp ZWxkPmZyZWVfY2h1bmtzPC9zdHJ1Y3RmaWVsZD4gPHR5cGU+aW50ODwvdHlwZT4KKyAgICAgIDwv cGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFRvdGFsIG51bWJlciBvZiBmcmVlIGNodW5rcwor ICAgICAgPC9wYXJhPjwvZW50cnk+CisgICAgIDwvcm93PgorCisgICAgIDxyb3c+CisgICAgICA8 ZW50cnkgcm9sZT0iY2F0YWxvZ190YWJsZV9lbnRyeSI+PHBhcmEgcm9sZT0iY29sdW1uX2RlZmlu aXRpb24iPgorICAgICAgIDxzdHJ1Y3RmaWVsZD51c2VkX2J5dGVzPC9zdHJ1Y3RmaWVsZD4gPHR5 cGU+aW50ODwvdHlwZT4KKyAgICAgIDwvcGFyYT4KKyAgICAgIDxwYXJhPgorICAgICAgIFVzZWQg c3BhY2UgaW4gYnl0ZXMKKyAgICAgIDwvcGFyYT48L2VudHJ5PgorICAgICA8L3Jvdz4KKyAgICA8 L3Rib2R5PgorICAgPC90Z3JvdXA+CisgIDwvdGFibGU+CisKKyA8L3NlY3QxPgorCiAgPHNlY3Qx IGlkPSJ2aWV3LXBnLW1hdHZpZXdzIj4KICAgPHRpdGxlPjxzdHJ1Y3RuYW1lPnBnX21hdHZpZXdz PC9zdHJ1Y3RuYW1lPjwvdGl0bGU+CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv c3lzdGVtX3ZpZXdzLnNxbCBiL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3lzdGVtX3ZpZXdzLnNxbApp bmRleCA3MzY3NmQwNGNmLi5mMzkxODllMTlkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jYXRh bG9nL3N5c3RlbV92aWV3cy5zcWwKKysrIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9zeXN0ZW1fdmll d3Muc3FsCkBAIC01NTQsNiArNTU0LDkgQEAgQ1JFQVRFIFZJRVcgcGdfc2htZW1fYWxsb2NhdGlv bnMgQVMKIFJFVk9LRSBBTEwgT04gcGdfc2htZW1fYWxsb2NhdGlvbnMgRlJPTSBQVUJMSUM7CiBS RVZPS0UgRVhFQ1VURSBPTiBGVU5DVElPTiBwZ19nZXRfc2htZW1fYWxsb2NhdGlvbnMoKSBGUk9N IFBVQkxJQzsKIAorQ1JFQVRFIFZJRVcgcGdfYmFja2VuZF9tZW1vcnlfY29udGV4dHMgQVMKKyAg ICBTRUxFQ1QgKiBGUk9NIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygpOworCiAtLSBT dGF0aXN0aWNzIHZpZXdzCiAKIENSRUFURSBWSUVXIHBnX3N0YXRfYWxsX3RhYmxlcyBBUwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvbW1nci9tY3h0LmMgYi9zcmMvYmFja2VuZC91dGls cy9tbWdyL21jeHQuYwppbmRleCBhYmRhMjJmYTU3Li44NTBhZDE4OGE3IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC91dGlscy9tbWdyL21jeHQuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9tbWdy L21jeHQuYwpAQCAtMjEsMTIgKzIxLDEzIEBACiAKICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisj aW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAi bWlzY2FkbWluLmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGls cy9tZW1kZWJ1Zy5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKLQogLyoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqCiAgKgkgIEdMT0JBTCBNRU1PUlkJCQkJCQkJCQkJCQkJCQkgKgogICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLwpAQCAtNjcsNiArNjgsMTIgQEAgc3RhdGljIHZvaWQgTWVtb3J5Q29u dGV4dFN0YXRzUHJpbnQoTWVtb3J5Q29udGV4dCBjb250ZXh0LCB2b2lkICpwYXNzdGhydSwKICNk ZWZpbmUgQXNzZXJ0Tm90SW5Dcml0aWNhbFNlY3Rpb24oY29udGV4dCkgXAogCUFzc2VydChDcml0 U2VjdGlvbkNvdW50ID09IDAgfHwgKGNvbnRleHQpLT5hbGxvd0luQ3JpdFNlY3Rpb24pCiAKKy8q IC0tLS0tLS0tLS0KKyAqIFRoZSBtYXggYnl0ZXMgZm9yIHNob3dpbmcgaWRlbnRpZmllcnMgb2Yg TWVtb3J5Q29udGV4dC4KKyAqIC0tLS0tLS0tLS0KKyAqLworI2RlZmluZSBNRU1PUllfQ09OVEVY VF9JREVOVF9ESVNQTEFZX1NJWkUJMTAyNAorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCSAg RVhQT1JURUQgUk9VVElORVMJCQkJCQkJCQkJCQkJCSAqCiAgKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiov CkBAIC0xMjIwLDMgKzEyMjcsMTM1IEBAIHBjaG9tcChjb25zdCBjaGFyICppbikKIAkJbi0tOwog CXJldHVybiBwbnN0cmR1cChpbiwgbik7CiB9CisKKy8qCisgKiBQdXRNZW1vcnlDb250ZXh0c1N0 YXRzVHVwbGVTdG9yZQorICoJCU9uZSByZWN1cnNpb24gbGV2ZWwgZm9yIHBnX2dldF9iYWNrZW5k X21lbW9yeV9jb250ZXh0cy4KKyAqLworc3RhdGljIHZvaWQKK1B1dE1lbW9yeUNvbnRleHRzU3Rh dHNUdXBsZVN0b3JlKFR1cGxlc3RvcmVzdGF0ZSAqdHVwc3RvcmUsCisJCQkJCQkJCVR1cGxlRGVz YyB0dXBkZXNjLCBNZW1vcnlDb250ZXh0IGNvbnRleHQsCisJCQkJCQkJCU1lbW9yeUNvbnRleHQg cGFyZW50LCBpbnQgbGV2ZWwpCit7CisjZGVmaW5lIFBHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05U RVhUU19DT0xTCTkKKwlEYXR1bQkJdmFsdWVzW1BHX0dFVF9CQUNLRU5EX01FTU9SWV9DT05URVhU U19DT0xTXTsKKwlib29sCQludWxsc1tQR19HRVRfQkFDS0VORF9NRU1PUllfQ09OVEVYVFNfQ09M U107CisJTWVtb3J5Q29udGV4dENvdW50ZXJzIHN0YXQ7CisJTWVtb3J5Q29udGV4dCBjaGlsZDsK Kwljb25zdCBjaGFyICpuYW1lID0gY29udGV4dC0+bmFtZTsKKwljb25zdCBjaGFyICppZGVudCA9 IGNvbnRleHQtPmlkZW50OworCWNoYXIJCWNvbnRleHRfYWRkcls2NF07CisKKwlpZiAoY29udGV4 dCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKgorCSAqIFRvIGJlIGNvbnNpc3RlbnQgd2l0aCBs b2dnaW5nIG91dHB1dCwgd2UgbGFiZWwgZHluYWhhc2ggY29udGV4dHMKKwkgKiB3aXRoIGp1c3Qg dGhlIGhhc2ggdGFibGUgbmFtZSBhcyB3aXRoIE1lbW9yeUNvbnRleHRTdGF0c1ByaW50KCkuCisJ ICovCisJaWYgKGlkZW50ICYmIHN0cmNtcChuYW1lLCAiZHluYWhhc2giKSA9PSAwKQorCXsKKwkJ bmFtZSA9IGlkZW50OworCQlpZGVudCA9IE5VTEw7CisJfQorCisJLyogRXhhbWluZSB0aGUgY29u dGV4dCBpdHNlbGYgKi8KKwltZW1zZXQoJnN0YXQsIDAsIHNpemVvZihzdGF0KSk7CisJKCpjb250 ZXh0LT5tZXRob2RzLT5zdGF0cykgKGNvbnRleHQsIE5VTEwsICh2b2lkICopICZsZXZlbCwgJnN0 YXQpOworCisJbWVtc2V0KHZhbHVlcywgMCwgc2l6ZW9mKHZhbHVlcykpOworCW1lbXNldChudWxs cywgMCwgc2l6ZW9mKG51bGxzKSk7CisKKwl2YWx1ZXNbMF0gPSBDU3RyaW5nR2V0VGV4dERhdHVt KG5hbWUpOworCisJaWYgKGlkZW50KQorCXsKKwkJaW50CQlpZGxlbiA9IHN0cmxlbihpZGVudCk7 CisJCWNoYXIJCWNsaXBwZWRfaWRlbnRbTUVNT1JZX0NPTlRFWFRfSURFTlRfRElTUExBWV9TSVpF XTsKKworCQkvKgorCQkgKiBTb21lIGlkZW50aWZpZXJzIHN1Y2ggYXMgU1FMIHF1ZXJ5IHN0cmlu ZyBjYW4gYmUgdmVyeSBsb25nLAorCQkgKiB0cnVuY2F0ZSBvdmVyc2l6ZSBpZGVudGlmaWVycy4K KwkJICovCisJCWlmIChpZGxlbiA+PSBNRU1PUllfQ09OVEVYVF9JREVOVF9ESVNQTEFZX1NJWkUp CisJCQlpZGxlbiA9IHBnX21iY2xpcGxlbihpZGVudCwgaWRsZW4sIE1FTU9SWV9DT05URVhUX0lE RU5UX0RJU1BMQVlfU0laRSAtIDEpOworCisJCW1lbWNweShjbGlwcGVkX2lkZW50LCBpZGVudCwg aWRsZW4pOworCQljbGlwcGVkX2lkZW50W2lkbGVuXSA9ICdcMCc7CisJCXZhbHVlc1sxXSA9IENT dHJpbmdHZXRUZXh0RGF0dW0oY2xpcHBlZF9pZGVudCk7CisJfQorCWVsc2UKKwkJbnVsbHNbMV0g PSB0cnVlOworCisJc3ByaW50Zihjb250ZXh0X2FkZHIsICIlcCIsIGNvbnRleHQpOworCXZhbHVl c1syXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oY29udGV4dF9hZGRyKTsKKworCWlmIChwYXJlbnQg PT0gTlVMTCkKKwkJbnVsbHNbM10gPSB0cnVlOworCWVsc2UKKwl7CisJCWNoYXIJCXBhcmVudF9j b250ZXh0X2FkZHJbNjRdOworCisJCXNwcmludGYocGFyZW50X2NvbnRleHRfYWRkciwgIiVwIiwg cGFyZW50KTsKKwkJdmFsdWVzWzNdID0gQ1N0cmluZ0dldFRleHREYXR1bShwYXJlbnRfY29udGV4 dF9hZGRyKTsKKwl9CisKKwl2YWx1ZXNbNF0gPSBJbnQ2NEdldERhdHVtKHN0YXQudG90YWxzcGFj ZSk7CisJdmFsdWVzWzVdID0gSW50NjRHZXREYXR1bShzdGF0Lm5ibG9ja3MpOworCXZhbHVlc1s2 XSA9IEludDY0R2V0RGF0dW0oc3RhdC5mcmVlc3BhY2UpOworCXZhbHVlc1s3XSA9IEludDY0R2V0 RGF0dW0oc3RhdC5mcmVlY2h1bmtzKTsKKwl2YWx1ZXNbOF0gPSBJbnQ2NEdldERhdHVtKHN0YXQu dG90YWxzcGFjZSAtIHN0YXQuZnJlZXNwYWNlKTsKKwl0dXBsZXN0b3JlX3B1dHZhbHVlcyh0dXBz dG9yZSwgdHVwZGVzYywgdmFsdWVzLCBudWxscyk7CisKKwlmb3IgKGNoaWxkID0gY29udGV4dC0+ Zmlyc3RjaGlsZDsgY2hpbGQgIT0gTlVMTDsgY2hpbGQgPSBjaGlsZC0+bmV4dGNoaWxkKQorCXsK KwkJUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUodHVwc3RvcmUsIHR1cGRlc2MsCisJ CQkJCQkJCSAgY2hpbGQsIGNvbnRleHQsIGxldmVsICsgMSk7CisJfQorfQorCisvKgorICogcGdf Z2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzCisgKgkJU1FMIFNSRiBzaG93aW5nIGJhY2tlbmQg bWVtb3J5IGNvbnRleHQuCisgKi8KK0RhdHVtCitwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4 dHMoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlSZXR1cm5TZXRJbmZvICpyc2luZm8gPSAoUmV0dXJu U2V0SW5mbyAqKSBmY2luZm8tPnJlc3VsdGluZm87CisJVHVwbGVEZXNjCXR1cGRlc2M7CisJVHVw bGVzdG9yZXN0YXRlICp0dXBzdG9yZTsKKwlNZW1vcnlDb250ZXh0IHBlcl9xdWVyeV9jdHg7CisJ TWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OworCisJLyogY2hlY2sgdG8gc2VlIGlmIGNhbGxlciBz dXBwb3J0cyB1cyByZXR1cm5pbmcgYSB0dXBsZXN0b3JlICovCisJaWYgKHJzaW5mbyA9PSBOVUxM IHx8ICFJc0EocnNpbmZvLCBSZXR1cm5TZXRJbmZvKSkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJCQkJIGVycm1zZygic2V0 LXZhbHVlZCBmdW5jdGlvbiBjYWxsZWQgaW4gY29udGV4dCB0aGF0IGNhbm5vdCBhY2NlcHQgYSBz ZXQiKSkpOworCWlmICghKHJzaW5mby0+YWxsb3dlZE1vZGVzICYgU0ZSTV9NYXRlcmlhbGl6ZSkp CisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9GRUFUVVJFX05PVF9TVVBQ T1JURUQpLAorCQkJCSBlcnJtc2coIm1hdGVyaWFsaXplIG1vZGUgcmVxdWlyZWQsIGJ1dCBpdCBp cyBub3QgYWxsb3dlZCBpbiB0aGlzIGNvbnRleHQiKSkpOworCisJLyogQnVpbGQgYSB0dXBsZSBk ZXNjcmlwdG9yIGZvciBvdXIgcmVzdWx0IHR5cGUgKi8KKwlpZiAoZ2V0X2NhbGxfcmVzdWx0X3R5 cGUoZmNpbmZvLCBOVUxMLCAmdHVwZGVzYykgIT0gVFlQRUZVTkNfQ09NUE9TSVRFKQorCQllbG9n KEVSUk9SLCAicmV0dXJuIHR5cGUgbXVzdCBiZSBhIHJvdyB0eXBlIik7CisKKwlwZXJfcXVlcnlf Y3R4ID0gcnNpbmZvLT5lY29udGV4dC0+ZWN4dF9wZXJfcXVlcnlfbWVtb3J5OworCW9sZGNvbnRl eHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3F1ZXJ5X2N0eCk7CisKKwl0dXBzdG9yZSA9 IHR1cGxlc3RvcmVfYmVnaW5faGVhcCh0cnVlLCBmYWxzZSwgd29ya19tZW0pOworCXJzaW5mby0+ cmV0dXJuTW9kZSA9IFNGUk1fTWF0ZXJpYWxpemU7CisJcnNpbmZvLT5zZXRSZXN1bHQgPSB0dXBz dG9yZTsKKwlyc2luZm8tPnNldERlc2MgPSB0dXBkZXNjOworCisJTWVtb3J5Q29udGV4dFN3aXRj aFRvKG9sZGNvbnRleHQpOworCisJUHV0TWVtb3J5Q29udGV4dHNTdGF0c1R1cGxlU3RvcmUodHVw c3RvcmUsIHR1cGRlc2MsCisJCQkJCQkJCVRvcE1lbW9yeUNvbnRleHQsIE5VTEwsIDApOworCisJ LyogY2xlYW4gdXAgYW5kIHJldHVybiB0aGUgdHVwbGVzdG9yZSAqLworCXR1cGxlc3RvcmVfZG9u ZXN0b3JpbmcodHVwc3RvcmUpOworCisJcmV0dXJuIChEYXR1bSkgMDsKK30KZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3Bn X3Byb2MuZGF0CmluZGV4IGQ5NTFiNGEzNmYuLmVkYzhkOWVjMDUgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19w cm9jLmRhdApAQCAtNzc5Nyw2ICs3Nzk3LDE1IEBACiAgIHByb2FyZ25hbWVzID0+ICd7bmFtZSxv ZmYsc2l6ZSxhbGxvY2F0ZWRfc2l6ZX0nLAogICBwcm9zcmMgPT4gJ3BnX2dldF9zaG1lbV9hbGxv Y2F0aW9ucycgfSwKIAorIyBtZW1vcnkgY29udGV4dCBvZiBsb2NhbCBiYWNrZW5kCit7IG9pZCA9 PiAnMjI4MicsIGRlc2NyID0+ICdpbmZvcm1hdGlvbiBhYm91dCBhbGwgbWVtb3J5IGNvbnRleHRz IG9mIGxvY2FsIGJhY2tlbmQnLAorICBwcm9uYW1lID0+ICdwZ19nZXRfYmFja2VuZF9tZW1vcnlf Y29udGV4dHMnLCBwcm9yb3dzID0+ICcxMDAnLCBwcm9yZXRzZXQgPT4gJ3QnLAorICBwcm92b2xh dGlsZSA9PiAndicsIHByb3BhcmFsbGVsID0+ICdyJywgcHJvcmV0dHlwZSA9PiAncmVjb3JkJywg cHJvYXJndHlwZXMgPT4gJycsCisgIHByb2FsbGFyZ3R5cGVzID0+ICd7dGV4dCx0ZXh0LHRleHQs dGV4dCxpbnQ4LGludDgsaW50OCxpbnQ4LGludDh9JywKKyAgcHJvYXJnbW9kZXMgPT4gJ3tvLG8s byxvLG8sbyxvLG8sb30nLAorICBwcm9hcmduYW1lcyA9PiAne25hbWUsIGlkZW50LCBhZGRyZXNz LCBwYXJlbnRfYWRkcmVzcywgdG90YWxfYnl0ZXMsIHRvdGFsX25ibG9ja3MsIGZyZWVfYnl0ZXMs IGZyZWVfY2h1bmtzLCB1c2VkX2J5dGVzfScsCisgIHByb3NyYyA9PiAncGdfZ2V0X2JhY2tlbmRf bWVtb3J5X2NvbnRleHRzJyB9LAorCiAjIG5vbi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0b3IK IHsgb2lkID0+ICcxMDY2JywgZGVzY3IgPT4gJ25vbi1wZXJzaXN0ZW50IHNlcmllcyBnZW5lcmF0 b3InLAogICBwcm9uYW1lID0+ICdnZW5lcmF0ZV9zZXJpZXMnLCBwcm9yb3dzID0+ICcxMDAwJywK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnVsZXMub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKaW5kZXggOTNiYjIxNTljYS4uM2Y5NmZlZGFl NCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKKysrIGIv c3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ydWxlcy5vdXQKQEAgLTEzMjQsNiArMTMyNCwxNiBA QCBwZ19hdmFpbGFibGVfZXh0ZW5zaW9uc3wgU0VMRUNUIGUubmFtZSwKICAgICBlLmNvbW1lbnQK ICAgIEZST00gKHBnX2F2YWlsYWJsZV9leHRlbnNpb25zKCkgZShuYW1lLCBkZWZhdWx0X3ZlcnNp b24sIGNvbW1lbnQpCiAgICAgIExFRlQgSk9JTiBwZ19leHRlbnNpb24geCBPTiAoKGUubmFtZSA9 IHguZXh0bmFtZSkpKTsKK3BnX2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzfCBTRUxFQ1QgcGdfZ2V0 X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLm5hbWUsCisgICAgcGdfZ2V0X2JhY2tlbmRfbWVtb3J5 X2NvbnRleHRzLmlkZW50LAorICAgIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cy5hZGRy ZXNzLAorICAgIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cy5wYXJlbnRfYWRkcmVzcywK KyAgICBwZ19nZXRfYmFja2VuZF9tZW1vcnlfY29udGV4dHMudG90YWxfYnl0ZXMsCisgICAgcGdf Z2V0X2JhY2tlbmRfbWVtb3J5X2NvbnRleHRzLnRvdGFsX25ibG9ja3MsCisgICAgcGdfZ2V0X2Jh Y2tlbmRfbWVtb3J5X2NvbnRleHRzLmZyZWVfYnl0ZXMsCisgICAgcGdfZ2V0X2JhY2tlbmRfbWVt b3J5X2NvbnRleHRzLmZyZWVfY2h1bmtzLAorICAgIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250 ZXh0cy51c2VkX2J5dGVzCisgICBGUk9NIHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cygp IHBnX2dldF9iYWNrZW5kX21lbW9yeV9jb250ZXh0cyhuYW1lLCBpZGVudCwgYWRkcmVzcywgcGFy ZW50X2FkZHJlc3MsIHRvdGFsX2J5dGVzLCB0b3RhbF9uYmxvY2tzLCBmcmVlX2J5dGVzLCBmcmVl X2NodW5rcywgdXNlZF9ieXRlcyk7CiBwZ19jb25maWd8IFNFTEVDVCBwZ19jb25maWcubmFtZSwK ICAgICBwZ19jb25maWcuc2V0dGluZwogICAgRlJPTSBwZ19jb25maWcoKSBwZ19jb25maWcobmFt ZSwgc2V0dGluZyk7Ci0tIAoyLjE4LjEKCg== --=_23bd1611b5b99300b2f8af54986a156d--