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 1vuk6S-004Bfq-2D for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 04:32:56 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vuk6R-00GzOv-1x for pgsql-hackers@arkaria.postgresql.org; Tue, 24 Feb 2026 04:32:55 +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 1vuk6R-00GzOh-0E for pgsql-hackers@lists.postgresql.org; Tue, 24 Feb 2026 04:32:55 +0000 Received: from mail-oo1-xc32.google.com ([2607:f8b0:4864:20::c32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vuk6N-00000000u7E-1ej0 for pgsql-hackers@postgresql.org; Tue, 24 Feb 2026 04:32:53 +0000 Received: by mail-oo1-xc32.google.com with SMTP id 006d021491bc7-6759a5576f5so2497018eaf.2 for ; Mon, 23 Feb 2026 20:32:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771907572; x=1772512372; darn=postgresql.org; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=Pm2lfRxZEodZi4PaloxmFp4hKuqmxQEQmJcBD65Z8AM=; b=F7htlOKCtZSM8zXuYaoeQebV2w/A0WyWKD5jn1GQFyN/28kMLq0v6MTfmZz5MrWFlx djAHDwnJzv+Ac4jSEM7jwCnMYCs3AoM6BupMIW+3h/MqNEBsthE1cIt3NRq/tb569+5c YhFahTgQD5yh3hjda01zj8WT5IXt9eMrLC+t3jZqCNWAasdOhdWShqv6d/Z1XOg+8zuE Xni7WKfdITED5z12aeZcoHDWF9aOZPTcttwWw5EizCVpyhBSAFQJqzicEAgSYCeFwZtB 4tC31DdGQcib/eBK/kQso3MELMUs12psHSzvPoxolHlQV48dWSBvjSIC1Vz8ahicL0Ry q5nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771907572; x=1772512372; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Pm2lfRxZEodZi4PaloxmFp4hKuqmxQEQmJcBD65Z8AM=; b=DYCyPbQCjBBcpUROrbTx+aNo4ohfQiwW6wVX/rAjn46JU+Pi0Qd5POiU7aoVAXq3O0 iuqrJF6Gfu16icZLPahMNV3L9J4JgbIc2ox4Rp5CgfioevkcmbWdOuRvhQfRDjEYJ5CU +jiUYz4oCW/rIemytEs62Am2NIhfZvURVl+DZ4SQOUULJY5J3rSZLUk+1B5GZyhF1wbv 9jkJYrEw+OVMDwYbjVyZOMWmbU2Mf5//Lj2Fwdu/7Q6I63CqXGrkaIaY87v7Nl9JO3X7 DEhhJRfAgvgWHrYLPB4WfPDyHxlWFtvF6zFeukzgigToTH7oY2vnEjnCrnkSZQxaOzEG jvDQ== X-Forwarded-Encrypted: i=1; AJvYcCXY2UXfKe7Hh/ORDZcFEqyf9Fedech1uztNz34U4XCICH0vJ8PEMqOx1o3PcmdIB3b/uF1xMo15a1MnMiJW@postgresql.org X-Gm-Message-State: AOJu0Yx4A84d+ZsIZ190u72x6zau0/VW8RLP/N+8KKHS0ehb4cLKhWZg ibrcZBf1joTCVpXS2XsGS/tt8trpGNa8vka6FUWuYNSg4JO9IUa2cEnR X-Gm-Gg: AZuq6aJmSRyns0+YzY6rd+NzEZ4ptWLqUGa/ArUKB6yBFuSVZAMo1HPKM3SxN1/bLnz caJpps9UULb6AqDLEVTpRGa6fhRYSQ2qBQVBQIgbsiTKK3v5rQy1DD9OjOWWM5lb5XkbvXvN9Wc mOwemvl8/IZWEcTyKClJ90RXVbtO80cHbKGC90dFR4GcbpQs6t0NRB4+6tLUgMX4TqtXcKzt+j4 Fz4QA8DPlTOCTYdd5dnlWUlBbdOwSAADsbAGogSU9xF+pWFED/5Wwksa0ID1KunVnY+8ElNgGiF 60Q76hZ1yO0LE7fAZV+EVrF/Pwz0FwGtWmpcqhIQdaiBkWFE9ckdWe5CLxz1CC7mhZOV4qPUmnq Yvr7N3NKLk7UBIc3J9Wv7R67CCdj1br9w0kAVDClL38dSDxTdZ9HA4fozzPYYmmgPrZa90WWnUo dZe7rAD9Me51SjduzAZCOoEa89sztTNq8V7P07hqXsv2z6R4GFaSQwCG88f3NlN6m8j/5uANevi VEvtEqD4CslMBuiJt8mAaBXNUI/SyLrNYsy X-Received: by 2002:a05:6820:4b08:b0:662:c451:4eb8 with SMTP id 006d021491bc7-679c4278a8emr5752798eaf.19.1771907571946; Mon, 23 Feb 2026 20:32:51 -0800 (PST) Received: from ?IPV6:2600:1700:8952:80:e08a:9894:2f23:ace1? ([2600:1700:8952:80:e08a:9894:2f23:ace1]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-4157d34a224sm9631076fac.17.2026.02.23.20.32.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 23 Feb 2026 20:32:50 -0800 (PST) Content-Type: multipart/mixed; boundary="------------K6j2dWbRliOFJyzC56gQfFJH" Message-ID: <0f76b00a-8d8d-4c6f-ba41-bf6ec5fb08e1@gmail.com> Date: Mon, 23 Feb 2026 22:31:55 -0600 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH] Add Windows support for backtrace_functions (MSVC only) To: =?UTF-8?Q?=C3=81lvaro_Herrera?= Cc: Euler Taveira , Jakub Wartak , Michael Paquier , pgsql-hackers References: <202602232201.2d5ez5tbrkg2@alvherre.pgsql> Content-Language: en-US From: Bryan Green In-Reply-To: <202602232201.2d5ez5tbrkg2@alvherre.pgsql> 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. --------------K6j2dWbRliOFJyzC56gQfFJH Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 2/23/2026 4:07 PM, Álvaro Herrera wrote: > On 2026-Feb-23, Bryan Green wrote: > >> I have implemented DuplicateHandle and closed the handle in the >> appropriate places. I also reset backtrace_process to NULL if >> SymInitialize() fails. Patch is attached. > > Hmm, should then backtrace_cleanup() cope with the case where it's NULL? > > Also, I wonder what happens if one "backtraceable" error occurs, and we > fail to SymInitialize(), then another backtraceable error occurs. > Should we do the DuplicateHandle()+SymInitialize() dance again, or > should we just give up? The current implementation does the former, I > think; but the latter is also easily achievable by setting > backtrace_symbols_initialized to true and leaving backtrace_process as > NULL; then this case can be detected specifically in set_backtrace() and > treated as a case where we just return NULL before attempting anything > else. > I have removed all but the SymCleanup form the backtrace_cleanup since it happens at process exit. I have implemented not retrying as you described above. Let me know if this was what you were thinking. Patch attached. -- Bryan Green EDB: https://www.enterprisedb.com --------------K6j2dWbRliOFJyzC56gQfFJH Content-Type: text/plain; charset=UTF-8; name="v10-0001-Add-backtrace-support-for-Windows-using-DbgHelp-A.patch" Content-Disposition: attachment; filename*0="v10-0001-Add-backtrace-support-for-Windows-using-DbgHelp-A.p"; filename*1="atch" Content-Transfer-Encoding: base64 RnJvbSA4YjBjMjExMTFkNDhlYjNjZjg1MzM4YjkxNmY1NDc3MTViOTE1MTBlIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogTW9uLCAyMyBGZWIgMjAyNiAyMjoyMDoyMyAtMDYwMApTdWJqZWN0OiBb UEFUQ0ggdjEwXSBBZGQgYmFja3RyYWNlIHN1cHBvcnQgZm9yIFdpbmRvd3MgdXNpbmcgRGJn SGVscCBBUEkKClByZXZpb3VzbHksIGJhY2t0cmFjZSBnZW5lcmF0aW9uIG9uIFdpbmRvd3Mg d291bGQgcmV0dXJuIGFuICJ1bnN1cHBvcnRlZCIKbWVzc2FnZS4gIFdpdGggdGhpcyBjb21t aXQsIHdlIHJlbHkgb24gQ2FwdHVyZVN0YWNrQmFja1RyYWNlKCkgdG8gY2FwdHVyZQp0aGUg Y2FsbCBzdGFjayBhbmQgdGhlIERiZ0hlbHAgQVBJIChTeW1Gcm9tQWRkclcsIFN5bUdldExp bmVGcm9tQWRkclc2NCkKZm9yIHN5bWJvbCByZXNvbHV0aW9uLgoKU3ltYm9sIGhhbmRsZXIg aW5pdGlhbGl6YXRpb24gKFN5bUluaXRpYWxpemUpIGlzIHBlcmZvcm1lZCBvbmNlIHBlcgpw cm9jZXNzIGFuZCBjYWNoZWQuICBJZiBpbml0aWFsaXphdGlvbiBmYWlscywgdGhlIHJlcG9y dCBmb3IgaXQgaXMKcmV0dXJuZWQgYXMgdGhlIGJhY2t0cmFjZSBvdXRwdXQsIGFuZCB0aGUg ZmFpbHVyZSBpcyByZWNvcmRlZCBzbyB0aGF0CmluaXRpYWxpemF0aW9uIGlzIG5vdCByZS1h dHRlbXB0ZWQgb24gc3Vic2VxdWVudCBjYWxscy4gIFRoZSBzeW1ib2wKaGFuZGxlciBpcyBj bGVhbmVkIHVwIHZpYSBvbl9wcm9jX2V4aXQoKSB0byByZWxlYXNlIERiZ0hlbHAgcmVzb3Vy Y2VzLgoKVGhlIGltcGxlbWVudGF0aW9uIHByb3ZpZGVzIHN5bWJvbCBuYW1lcywgb2Zmc2V0 cywgYW5kIGFkZHJlc3Nlcy4gIFdoZW4KUERCIGZpbGVzIGFyZSBhdmFpbGFibGUsIGl0IGFs c28gaW5jbHVkZXMgc291cmNlIGZpbGUgbmFtZXMgYW5kIGxpbmUKbnVtYmVycy4gIFN5bWJv bCBuYW1lcyBhbmQgZmlsZSBwYXRocyBhcmUgY29udmVydGVkIGZyb20gVVRGLTE2IHRvIHRo ZQpkYXRhYmFzZSBlbmNvZGluZyB1c2luZyB3Y2hhcjJjaGFyKCksIHdoaWNoIHByb3Blcmx5 IGhhbmRsZXMgYm90aCBVVEYtOAphbmQgbm9uLVVURi04IGRhdGFiYXNlcyBvbiBXaW5kb3dz LiAgV2hlbiBzeW1ib2wgaW5mb3JtYXRpb24gaXMKdW5hdmFpbGFibGUgb3IgZW5jb2Rpbmcg Y29udmVyc2lvbiBmYWlscywgaXQgZmFsbHMgYmFjayB0byBkaXNwbGF5aW5nIHJhdwphZGRy ZXNzZXMuCgpUaGUgaW1wbGVtZW50YXRpb24gdXNlcyB0aGUgZXhwbGljaXQgVW5pY29kZSB2 ZXJzaW9ucyBvZiB0aGUgRGJnSGVscApmdW5jdGlvbnMgKFNZTUJPTF9JTkZPVywgU3ltRnJv bUFkZHJXLCBJTUFHRUhMUF9MSU5FVzY0LApTeW1HZXRMaW5lRnJvbUFkZHJXNjQpIHJhdGhl ciB0aGFuIHRoZSBnZW5lcmljIHZlcnNpb25zLiAgVGhpcyBhbGxvd3MgdXMKdG8gcmVseSBv biBwcmVkaWN0YWJsZSBlbmNvZGluZyBjb252ZXJzaW9uIGZyb20gVW5pY29kZSwgcmF0aGVy IHRoYW4gdXNpbmcKdGhlIGhhcGhhemFyZCBBTlNJIGNvZGVwYWdlIHRoYXQgd2UnZCBnZXQg b3RoZXJ3aXNlLgoKRGJnSGVscCBpcyBhcHBhcmVudGx5IGF2YWlsYWJsZSBvbiBhbGwgV2lu ZG93cyBwbGF0Zm9ybXMgd2Ugc3VwcG9ydCwgc28KdGhlcmUgYXJlIG5vIHZlcnNpb24gbnVt YmVyIGNoZWNrcy4KCkF1dGhvcjogQnJ5YW4gR3JlZW4gPGRicnlhbi5ncmVlbkBnbWFpbC5j b20+ClJldmlld2VkLWJ5OiBFdWxlciBUYXZlaXJhIDxldWxlckBldWxlcnRvLmNvbT4KUmV2 aWV3ZWQtYnk6IEpha3ViIFdhcnRhayA8amFrdWIud2FydGFrQGVudGVycHJpc2VkYi5jb20+ ClJldmlld2VkLWJ5OiBHcmVnIEJ1cmQgPGdyZWdAYnVyZC5tZT4KRGlzY3Vzc2lvbjogaHR0 cHM6Ly9wb3N0Z3IuZXMvbS9hNjkyYzBmZS1jYWNhLTRjMDgtOWM1ZC1kZWJmZDBlZjI1MDRA Z21haWwuY29tCi0tLQogc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQgICAgICAgIHwgICA2ICsr CiBzcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMgfCAxNzEgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDE3NCBpbnNlcnRpb25zKCsp LCAzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL21lc29uLmJ1aWxk IGIvc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQKaW5kZXggZmVjOWYxZDAzYi4uNGY1MjkyZDhm OCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbWVzb24uYnVpbGQKKysrIGIvc3JjL2JhY2tl bmQvbWVzb24uYnVpbGQKQEAgLTQxLDYgKzQxLDEyIEBAIGJhY2tlbmRfbGlua19hcmdzID0g W10KIGJhY2tlbmRfbGlua19kZXBlbmRzID0gW10KIAogCisjIE9uIFdpbmRvd3MgYWxzbyBt YWtlIHRoZSBiYWNrZW5kIGRlcGVuZCBvbiBkYmdoZWxwLCBmb3IgYmFja3RyYWNlIHN1cHBv cnQKK2lmIGhvc3Rfc3lzdGVtID09ICd3aW5kb3dzJyBhbmQgY2MuZ2V0X2lkKCkgPT0gJ21z dmMnCisgIGJhY2tlbmRfYnVpbGRfZGVwcyArPSBjYy5maW5kX2xpYnJhcnkoJ2RiZ2hlbHAn KQorZW5kaWYKKworCiAjIE9uIHdpbmRvd3Mgd2hlbiBjb21waWxpbmcgd2l0aCBtc3ZjIHdl IG5lZWQgdG8gbWFrZSBwb3N0Z3JlcyBleHBvcnQgYWxsIGl0cwogIyBzeW1ib2xzIHNvIHRo YXQgZXh0ZW5zaW9uIGxpYnJhcmllcyBjYW4gdXNlIHRoZW0uIEZvciB0aGF0IHdlIG5lZWQg dG8gc2NhbgogIyB0aGUgY29uc3RpdHV0aW5nIG9iamVjdHMgYW5kIGdlbmVyYXRlIGEgZmls ZSBzcGVjaWZ5aW5nIGFsbCB0aGUgZnVuY3Rpb25zIGFzCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC91dGlscy9lcnJvci9lbG9nLmMgYi9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9n LmMKaW5kZXggMjRlOGYzN2Y2My4uM2VmMzlhY2M0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvdXRpbHMvZXJyb3IvZWxvZy5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vs b2cuYwpAQCAtNjYsNiArNjYsMTAgQEAKICNpbmNsdWRlIDxleGVjaW5mby5oPgogI2VuZGlm CiAKKyNpZmRlZiBfTVNDX1ZFUgorI2luY2x1ZGUgPGRiZ2hlbHAuaD4KKyNlbmRpZgorCiAj aW5jbHVkZSAiYWNjZXNzL3hhY3QuaCIKICNpbmNsdWRlICJjb21tb24vaXAuaCIKICNpbmNs dWRlICJsaWJwcS9saWJwcS5oIgpAQCAtMTQwLDYgKzE0NCwxMSBAQCBzdGF0aWMgdm9pZCB3 cml0ZV9zeXNsb2coaW50IGxldmVsLCBjb25zdCBjaGFyICpsaW5lKTsKIHN0YXRpYyB2b2lk IHdyaXRlX2V2ZW50bG9nKGludCBsZXZlbCwgY29uc3QgY2hhciAqbGluZSwgaW50IGxlbik7 CiAjZW5kaWYKIAorI2lmZGVmIF9NU0NfVkVSCitzdGF0aWMgYm9vbCBiYWNrdHJhY2Vfc3lt Ym9sc19pbml0aWFsaXplZCA9IGZhbHNlOworc3RhdGljIEhBTkRMRSBiYWNrdHJhY2VfcHJv Y2VzcyA9IE5VTEw7CisjZW5kaWYKKwogLyogV2UgcHJvdmlkZSBhIHNtYWxsIHN0YWNrIG9m IEVycm9yRGF0YSByZWNvcmRzIGZvciByZS1lbnRyYW50IGNhc2VzICovCiAjZGVmaW5lIEVS Uk9SREFUQV9TVEFDS19TSVpFICA1CiAKQEAgLTE4MCw2ICsxODksNyBAQCBzdGF0aWMgdm9p ZCBzZXRfc3RhY2tfZW50cnlfbG9jYXRpb24oRXJyb3JEYXRhICplZGF0YSwKIAkJCQkJCQkJ CSBjb25zdCBjaGFyICpmdW5jbmFtZSk7CiBzdGF0aWMgYm9vbCBtYXRjaGVzX2JhY2t0cmFj ZV9mdW5jdGlvbnMoY29uc3QgY2hhciAqZnVuY25hbWUpOwogc3RhdGljIHBnX25vaW5saW5l IHZvaWQgc2V0X2JhY2t0cmFjZShFcnJvckRhdGEgKmVkYXRhLCBpbnQgbnVtX3NraXApOwor c3RhdGljIHZvaWQgYmFja3RyYWNlX2NsZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZyk7CiBz dGF0aWMgdm9pZCBzZXRfZXJyZGF0YV9maWVsZChNZW1vcnlDb250ZXh0RGF0YSAqY3h0LCBj aGFyICoqcHRyLCBjb25zdCBjaGFyICpzdHIpOwogc3RhdGljIHZvaWQgRnJlZUVycm9yRGF0 YUNvbnRlbnRzKEVycm9yRGF0YSAqZWRhdGEpOwogc3RhdGljIGludAlsb2dfbWluX21lc3Nh Z2VzX2NtcChjb25zdCBMaXN0Q2VsbCAqYSwgY29uc3QgTGlzdENlbGwgKmIpOwpAQCAtMTEy NCw2ICsxMTM0LDEzIEBAIGVycmJhY2t0cmFjZSh2b2lkKQogICogc3BlY2lmaWVzIGhvdyBt YW55IGlubmVyIGZyYW1lcyB0byBza2lwLiAgVXNlIHRoaXMgdG8gYXZvaWQgc2hvd2luZyB0 aGUKICAqIGludGVybmFsIGJhY2t0cmFjZSBzdXBwb3J0IGZ1bmN0aW9ucyBpbiB0aGUgYmFj a3RyYWNlLiAgVGhpcyByZXF1aXJlcyB0aGF0CiAgKiB0aGlzIGFuZCByZWxhdGVkIGZ1bmN0 aW9ucyBhcmUgbm90IGlubGluZWQuCisgKgorICogVGhlIGltcGxlbWVudGF0aW9uIGlzLCB1 bnN1cnByaXNpbmdseSwgcGxhdGZvcm0tc3BlY2lmaWM6CisgKiAtIEdOVSBsaWJjIGFuZCBj b3B5Y2F0czogVXNlcyBiYWNrdHJhY2UoKSBhbmQgYmFja3RyYWNlX3N5bWJvbHMoKQorICog LSBXaW5kb3dzOiBVc2VzIENhcHR1cmVTdGFja0JhY2tUcmFjZSgpIHdpdGggRGJnSGVscCBm b3Igc3ltYm9sIHJlc29sdXRpb24KKyAqIAkgKHJlcXVpcmVzIFBEQiBmaWxlczsgZmFsbHMg YmFjayB0byBleHBvcnRlZCBmdW5jdGlvbnMvcmF3IGFkZHJlc3NlcyBpZgorICogCSB1bmF2 YWlsYWJsZSkKKyAqIC0gT3RoZXJzIChtdXNsIGxpYmMpOiB1bnN1cHBvcnRlZAogICovCiBz dGF0aWMgdm9pZAogc2V0X2JhY2t0cmFjZShFcnJvckRhdGEgKmVkYXRhLCBpbnQgbnVtX3Nr aXApCkBAIC0xMTM0LDEyICsxMTUxLDEyIEBAIHNldF9iYWNrdHJhY2UoRXJyb3JEYXRhICpl ZGF0YSwgaW50IG51bV9za2lwKQogCiAjaWZkZWYgSEFWRV9CQUNLVFJBQ0VfU1lNQk9MUwog CXsKLQkJdm9pZAkgICAqYnVmWzEwMF07CisJCXZvaWQJICAgKmZyYW1lc1sxMDBdOwogCQlp bnQJCQluZnJhbWVzOwogCQljaGFyCSAgKipzdHJmcm1zOwogCi0JCW5mcmFtZXMgPSBiYWNr dHJhY2UoYnVmLCBsZW5ndGhvZihidWYpKTsKLQkJc3RyZnJtcyA9IGJhY2t0cmFjZV9zeW1i b2xzKGJ1ZiwgbmZyYW1lcyk7CisJCW5mcmFtZXMgPSBiYWNrdHJhY2UoZnJhbWVzLCBsZW5n dGhvZihmcmFtZXMpKTsKKwkJc3RyZnJtcyA9IGJhY2t0cmFjZV9zeW1ib2xzKGZyYW1lcywg bmZyYW1lcyk7CiAJCWlmIChzdHJmcm1zICE9IE5VTEwpCiAJCXsKIAkJCWZvciAoaW50IGkg PSBudW1fc2tpcDsgaSA8IG5mcmFtZXM7IGkrKykKQEAgLTExNTAsNiArMTE2NywxNDEgQEAg c2V0X2JhY2t0cmFjZShFcnJvckRhdGEgKmVkYXRhLCBpbnQgbnVtX3NraXApCiAJCQlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKCZlcnJ0cmFjZSwKIAkJCQkJCQkJICAgImluc3VmZmljaWVu dCBtZW1vcnkgZm9yIGJhY2t0cmFjZSBnZW5lcmF0aW9uIik7CiAJfQorI2VsaWYgZGVmaW5l ZChfTVNDX1ZFUikKKwl7CisJCXZvaWQJICAgKmZyYW1lc1sxMDBdOworCQlpbnQJCQluZnJh bWVzOworCQljaGFyCQlidWZmZXJbc2l6ZW9mKFNZTUJPTF9JTkZPVykgKyBNQVhfU1lNX05B TUUgKiBzaXplb2Yod2NoYXJfdCldOworCQlQU1lNQk9MX0lORk9XIHBzeW1ib2w7CisKKwkJ aWYgKCFiYWNrdHJhY2Vfc3ltYm9sc19pbml0aWFsaXplZCkKKwkJeworCQkJLyogVGhpcyB3 aWxsIGtlZXAgdXMgZnJvbSByZXRyeWluZyAqLworCQkJYmFja3RyYWNlX3N5bWJvbHNfaW5p dGlhbGl6ZWQgPSB0cnVlOworCisJCQlpZighRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQ cm9jZXNzKCksCisJCQkJCQkJCUdldEN1cnJlbnRQcm9jZXNzKCksCisJCQkJCQkJCUdldEN1 cnJlbnRQcm9jZXNzKCksCisJCQkJCQkJCSZiYWNrdHJhY2VfcHJvY2VzcywKKwkJCQkJCQkJ MCwKKwkJCQkJCQkJRkFMU0UsCisJCQkJCQkJCURVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJ CQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJydHJhY2UsCisJCQkJCQkJCSAiY291bGQg bm90IGdldCBwcm9jZXNzIGhhbmRsZSBmb3IgYmFja3RyYWNlOiBlcnJvciBjb2RlICVsdSIs CisJCQkJCQkJCSBHZXRMYXN0RXJyb3IoKSk7CisJCQkJZWRhdGEtPmJhY2t0cmFjZSA9IGVy cnRyYWNlLmRhdGE7CisJCQkJcmV0dXJuOworCQkJfQorCisJCQlTeW1TZXRPcHRpb25zKFNZ TU9QVF9VTkROQU1FIHwKKwkJCQkJCSAgU1lNT1BUX0RFRkVSUkVEX0xPQURTIHwKKwkJCQkJ CSAgU1lNT1BUX0xPQURfTElORVMgfAorCQkJCQkJICBTWU1PUFRfRkFJTF9DUklUSUNBTF9F UlJPUlMpOworCisJCQlpZiAoIVN5bUluaXRpYWxpemUoYmFja3RyYWNlX3Byb2Nlc3MsIE5V TEwsIFRSVUUpKQorCQkJeworCQkJCUNsb3NlSGFuZGxlKGJhY2t0cmFjZV9wcm9jZXNzKTsK KwkJCQliYWNrdHJhY2VfcHJvY2VzcyA9IE5VTEw7CisJCQkJYXBwZW5kU3RyaW5nSW5mbygm ZXJydHJhY2UsCisJCQkJCQkJCSAiY291bGQgbm90IGluaXRpYWxpemUgc3ltYm9sIGhhbmRs ZXI6IGVycm9yIGNvZGUgJWx1IiwKKwkJCQkJCQkJIEdldExhc3RFcnJvcigpKTsKKwkJCQll ZGF0YS0+YmFja3RyYWNlID0gZXJydHJhY2UuZGF0YTsKKwkJCQlyZXR1cm47CisJCQl9CisK KwkJCW9uX3Byb2NfZXhpdChiYWNrdHJhY2VfY2xlYW51cCwgMCk7CisJCX0KKworCQlpZiAo YmFja3RyYWNlX3Byb2Nlc3MgPT0gTlVMTCkKKwkJCXJldHVybjsKKworCQluZnJhbWVzID0g Q2FwdHVyZVN0YWNrQmFja1RyYWNlKG51bV9za2lwLCBsZW5ndGhvZihmcmFtZXMpLCBmcmFt ZXMsIE5VTEwpOworCisJCWlmIChuZnJhbWVzID09IDApCisJCXsKKwkJCWFwcGVuZFN0cmlu Z0luZm9TdHJpbmcoJmVycnRyYWNlLCAiemVybyBzdGFjayBmcmFtZXMgY2FwdHVyZWQiKTsK KwkJCWVkYXRhLT5iYWNrdHJhY2UgPSBlcnJ0cmFjZS5kYXRhOworCQkJcmV0dXJuOworCQl9 CisKKwkJcHN5bWJvbCA9IChQU1lNQk9MX0lORk9XKSBidWZmZXI7CisJCXBzeW1ib2wtPk1h eE5hbWVMZW4gPSBNQVhfU1lNX05BTUU7CisJCXBzeW1ib2wtPlNpemVPZlN0cnVjdCA9IHNp emVvZihTWU1CT0xfSU5GT1cpOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgbmZyYW1lczsg aSsrKQorCQl7CisJCQlEV09SRDY0CQlhZGRyZXNzID0gKERXT1JENjQpIGZyYW1lc1tpXTsK KwkJCURXT1JENjQJCWRpc3BsYWNlbWVudCA9IDA7CisJCQlCT09MCQlzeW1fcmVzdWx0Owor CisJCQlzeW1fcmVzdWx0ID0gU3ltRnJvbUFkZHJXKGJhY2t0cmFjZV9wcm9jZXNzLAorCQkJ CQkJCQkJICBhZGRyZXNzLAorCQkJCQkJCQkJICAmZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJ ICBwc3ltYm9sKTsKKwkJCWlmIChzeW1fcmVzdWx0KQorCQkJeworCQkJCWNoYXIJCXN5bWJv bF9uYW1lW01BWF9TWU1fTkFNRV07CisJCQkJc2l6ZV90CQlyZXN1bHQ7CisKKwkJCQkvKgor CQkJCSAqIENvbnZlcnQgc3ltYm9sIG5hbWUgZnJvbSBVVEYtMTYgdG8gZGF0YWJhc2UgZW5j b2RpbmcgdXNpbmcKKwkJCQkgKiB3Y2hhcjJjaGFyKCksIHdoaWNoIGhhbmRsZXMgYm90aCBV VEYtOCBhbmQgbm9uLVVURi04CisJCQkJICogZGF0YWJhc2VzIGNvcnJlY3RseSBvbiBXaW5k b3dzLgorCQkJCSAqLworCQkJCXJlc3VsdCA9IHdjaGFyMmNoYXIoc3ltYm9sX25hbWUsIChj b25zdCB3Y2hhcl90ICopIHBzeW1ib2wtPk5hbWUsCisJCQkJCQkJCQlzaXplb2Yoc3ltYm9s X25hbWUpLCBOVUxMKTsKKworCQkJCWlmIChyZXN1bHQgPT0gKHNpemVfdCkgLTEpCisJCQkJ eworCQkJCQkvKiBDb252ZXJzaW9uIGZhaWxlZCwgdXNlIGFkZHJlc3Mgb25seSAqLworCQkJ CQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0cmFjZSwKKwkJCQkJCQkJCSAiXG5bMHglbGx4XSIs CisJCQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcyk7CisJCQkJfQorCQkJ CWVsc2UKKwkJCQl7CisJCQkJCUlNQUdFSExQX0xJTkVXNjQgbGluZTsKKwkJCQkJRFdPUkQJ CWxpbmVfZGlzcGxhY2VtZW50ID0gMDsKKwkJCQkJY2hhcgkJZmlsZW5hbWVbTUFYX1BBVEhd OworCisJCQkJCWxpbmUuU2l6ZU9mU3RydWN0ID0gc2l6ZW9mKElNQUdFSExQX0xJTkVXNjQp OworCisJCQkJCS8qIFN0YXJ0IHdpdGggdGhlIGNvbW1vbiBwYXJ0OiBzeW1ib2wrb2Zmc2V0 IFthZGRyZXNzXSAqLworCQkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0cmFjZSwKKwkJCQkJ CQkJCSAiXG4lcysweCVsbHggWzB4JWxseF0iLAorCQkJCQkJCQkJIHN5bWJvbF9uYW1lLAor CQkJCQkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGRpc3BsYWNlbWVudCwKKwkJCQkJCQkJ CSAodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyZXNzKTsKKworCQkJCQkvKiBUcnkgdG8gYXBw ZW5kIGxpbmUgaW5mbyBpZiBhdmFpbGFibGUgKi8KKwkJCQkJaWYgKFN5bUdldExpbmVGcm9t QWRkclc2NChiYWNrdHJhY2VfcHJvY2VzcywKKwkJCQkJCQkJCQkJICBhZGRyZXNzLAorCQkJ CQkJCQkJCQkgICZsaW5lX2Rpc3BsYWNlbWVudCwKKwkJCQkJCQkJCQkJICAmbGluZSkpCisJ CQkJCXsKKwkJCQkJCXJlc3VsdCA9IHdjaGFyMmNoYXIoZmlsZW5hbWUsIChjb25zdCB3Y2hh cl90ICopIGxpbmUuRmlsZU5hbWUsCisJCQkJCQkJCQkJCXNpemVvZihmaWxlbmFtZSksIE5V TEwpOworCisJCQkJCQlpZiAocmVzdWx0ICE9IChzaXplX3QpIC0xKQorCQkJCQkJeworCQkJ CQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJCQkgIiBbJXM6JWx1 XSIsCisJCQkJCQkJCQkJCSBmaWxlbmFtZSwKKwkJCQkJCQkJCQkJICh1bnNpZ25lZCBsb25n KSBsaW5lLkxpbmVOdW1iZXIpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCQkJ ZWxzZQorCQkJeworCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkg IlxuWzB4JWxseF0gKHN5bWJvbCBsb29rdXAgZmFpbGVkOiBlcnJvciBjb2RlICVsdSkiLAor CQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYWRkcmVzcywKKwkJCQkJCQkJIEdldExh c3RFcnJvcigpKTsKKwkJCX0KKwkJfQorCX0KICNlbHNlCiAJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmZXJydHJhY2UsCiAJCQkJCQkgICAiYmFja3RyYWNlIGdlbmVyYXRpb24gaXMgbm90 IHN1cHBvcnRlZCBieSB0aGlzIGluc3RhbGxhdGlvbiIpOwpAQCAtMTE1OCw2ICsxMzEwLDE5 IEBAIHNldF9iYWNrdHJhY2UoRXJyb3JEYXRhICplZGF0YSwgaW50IG51bV9za2lwKQogCWVk YXRhLT5iYWNrdHJhY2UgPSBlcnJ0cmFjZS5kYXRhOwogfQogCisvKgorICogQ2xlYW51cCBm dW5jdGlvbiBmb3IgRGJnSGVscCByZXNvdXJjZXMuCisgKiBDYWxsZWQgdmlhIG9uX3Byb2Nf ZXhpdCgpIHRvIHJlbGVhc2UgcmVzb3VyY2VzIGFsbG9jYXRlZCBieSBTeW1Jbml0aWFsaXpl KCkuCisgKi8KK3BnX2F0dHJpYnV0ZV91bnVzZWQoKQorc3RhdGljIHZvaWQKK2JhY2t0cmFj ZV9jbGVhbnVwKGludCBjb2RlLCBEYXR1bSBhcmcpCit7CisjaWZkZWYgX01TQ19WRVIKKwlT eW1DbGVhbnVwKGJhY2t0cmFjZV9wcm9jZXNzKTsKKyNlbmRpZgorfQorCiAvKgogICogZXJy bXNnX2ludGVybmFsIC0tLSBhZGQgYSBwcmltYXJ5IGVycm9yIG1lc3NhZ2UgdGV4dCB0byB0 aGUgY3VycmVudCBlcnJvcgogICoKLS0gCjIuNTIuMC53aW5kb3dzLjEKCg== --------------K6j2dWbRliOFJyzC56gQfFJH--