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 1vudgj-00GyoW-2g for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 21:41:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vudgi-00FYl3-2a for pgsql-hackers@arkaria.postgresql.org; Mon, 23 Feb 2026 21:41:56 +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 1vudgi-00FYku-0Q for pgsql-hackers@lists.postgresql.org; Mon, 23 Feb 2026 21:41:56 +0000 Received: from mail-yw1-x1131.google.com ([2607:f8b0:4864:20::1131]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vudge-00000000rKl-1V7M for pgsql-hackers@postgresql.org; Mon, 23 Feb 2026 21:41:54 +0000 Received: by mail-yw1-x1131.google.com with SMTP id 00721157ae682-798527f822cso9354167b3.3 for ; Mon, 23 Feb 2026 13:41:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1771882913; x=1772487713; 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=nVqu4ET3jcVksCxCP0/76/sS44zRmOUDW/+czq8OcgM=; b=DpvLDlGxC8lbaK6BF0idjA14/LXYiJPu6TivfENx7nekKiEC1aUgh9MNGBZ8ZTSD3t RQb7+uIVoWxZXU2mkGYUevMAfIlUcssjV/IWV6H/4+pe3PKkveT7XME3FCFTYiuoFiJH juHYbj93HMuKbyP60uz2qv+N24p0uhiCJIoaorgGPJ/riX3dp62rrMJAIyWGenlkLvrr U25gP7OeerxoCwO32dcrRLOoqZGkq7SNUPGhbZs+RiseapJDnFf/C1QgIhPxHX5JLocL pcrg7OaRjoFw5v47Tbaw9OheOpgK3spaS57Tkz2Nk7pUhaxA9hL7w86DbeOzGyGk1PL4 0brw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1771882913; x=1772487713; 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=nVqu4ET3jcVksCxCP0/76/sS44zRmOUDW/+czq8OcgM=; b=rwrnMdUPZ0sx1NVLEGmSsfkN4G2zjIEXUJS2teN6oFvChyOOQl7KwVt1a7gN7qIjvv OTU/gTXRrd+PDQXUQY2XsWA+VoswiD709ry2KJDF8jllkTJSrYXu544dcTFYOR79UGlF rd+r+At0oNKgOEaa85xJa/9RAXHO3DJ6CYss9AAJpnXSfRRMhGxWq5roJNzAVOIKaQ3J Gk6cASyOLzLLej4QCAC9T1wHYwLjHMC97fI8HEzpWKqQPozo+IuscFiDzSzFGoVnm78k U/4WiUrLNYCrrEo6wfVCRF+NdaxAlrXEj/Yqpe7KWbtFoX+2ibzBdwkb92g8pPGEfRx4 3STA== X-Forwarded-Encrypted: i=1; AJvYcCWbOmEzrlJyPfi4ulWUWdtqypXWvxInnAXOYNprBGs9lhoR9jUmr3Yl63cNnom73SyKmvNYZccyRuLu7VIT@postgresql.org X-Gm-Message-State: AOJu0YxxkL+SxrKH+L3m1zKYSVqgauYOUMqfb1vGBjYQNMlyx13FlL09 g2T9g+pawIFoZXlZgAZho7FzOKXqtauFDiqZvAJ8G4UJrt58QpupamFl X-Gm-Gg: ATEYQzw+za8MvO/WLRAe7sBlb0/Dm9cIG17ojyfPo93RxOe8LBpAjUWwW8Rz37EFgFB mvBCm/7Nlhqg2teoqLzpvdSatv5IkfnNZHXDS4JloLge4QT25L1DcZZ5zNa7yRzYx5OLwRabO+m 0VFXL68B/nUbXB5K9OHOr7rF4usedi+QJJNB7bKIMT/0pOoTtdSkGtsUPBtINUBtiT+tFPBkria 9263Y5TrOFIigEY/9RSNOPpx6FdSGDAWZPLK/DjM3hr3Yi2uZ9ugAii1a3XEciS1os+HHr7y7bS szy7lT/yuEbITjBfP17KHU6MP5Y0Et4hwLZAQ68KvbWRN1/kdlom+9rQP8QpvwFuJmrViNwBxBz NYG6a7r9ZXfR94ug+IezQC8voaxfBKRQOXOIobYIjJ/t5BRhopQsppfSaR4P849Y4Hm2HCqQA4o DrdVr45Jl7dnBzEFYzPmYK2DJX1d/NLC4cF36WujWn3XVWog//zG+ltyXi53S+fqubfmWOpPJU8 VjgtH2ZomzO6ehPSNUs1VQW9KozGs0RfRTTNaDh9/ETs4g= X-Received: by 2002:a05:690c:60ca:b0:794:e348:fc99 with SMTP id 00721157ae682-79828f1feabmr99338707b3.25.1771882912717; Mon, 23 Feb 2026 13:41:52 -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 00721157ae682-7982dbd5939sm37014897b3.15.2026.02.23.13.41.50 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 23 Feb 2026 13:41:51 -0800 (PST) Content-Type: multipart/mixed; boundary="------------76GbnFNjR6liDnuzAbpUvEAv" Message-ID: <6dea1cfa-1efd-41cb-8d1e-ad35d4304aa3@gmail.com> Date: Mon, 23 Feb 2026 15:40:57 -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: <202602232005.2cmbj5ougsfv@alvherre.pgsql> Content-Language: en-US From: Bryan Green In-Reply-To: <202602232005.2cmbj5ougsfv@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. --------------76GbnFNjR6liDnuzAbpUvEAv Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 2/23/2026 2:16 PM, Álvaro Herrera wrote: > Hello, thanks for following up. > > However, I was going over the commit message one final time after your > reply, and I noticed that SymInitialize()'s documentation says quite > explicitly: > > "Do not use the handle returned by GetCurrentProcess" > https://learn.microsoft.com/en-us/windows/win32/api/dbghelp/nf-dbghelp-syminitialize > > which is exactly what we do with this patch. > > I think we should DuplicateHandle() on the GetCurrentProcess() handle > (which then obviously needs CloseHandle afterwards). Would you agree? > > Here's the whole thing again with edited commit message and some trivial > stylistic changes. > > > I was amused to discover that Solaris, macOS and FreeBSD all copied the > backtrace() interface from glibc, and the only platform in the buildfarm > other than Windows that seems to lack support for backtraces is Alpine > Linux. > > Regards > 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. -- Bryan Green EDB: https://www.enterprisedb.com --------------76GbnFNjR6liDnuzAbpUvEAv Content-Type: text/plain; charset=UTF-8; name="v9-0001-Add-backtrace-support-for-Windows-using-DbgHelp-A.patch" Content-Disposition: attachment; filename*0="v9-0001-Add-backtrace-support-for-Windows-using-DbgHelp-A.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBlYzQ3ODE5ZGM5OTg1OWZhY2VkYmUzZjBlM2QxMzFjOGFlZDhjN2I0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCcnlhbiBHcmVlbiA8ZGJyeWFuLmdyZWVuQGdtYWls LmNvbT4KRGF0ZTogU2F0LCAxIE5vdiAyMDI1IDIzOjA0OjI0IC0wNjAwClN1YmplY3Q6IFtQ QVRDSCB2OV0gQWRkIGJhY2t0cmFjZSBzdXBwb3J0IGZvciBXaW5kb3dzIHVzaW5nIERiZ0hl bHAgQVBJCgpQcmV2aW91c2x5LCBiYWNrdHJhY2UgZ2VuZXJhdGlvbiBvbiBXaW5kb3dzIHdv dWxkIHJldHVybiBhbiAidW5zdXBwb3J0ZWQiCm1lc3NhZ2UuICBXaXRoIHRoaXMgY29tbWl0 LCB3ZSByZWx5IG9uIENhcHR1cmVTdGFja0JhY2tUcmFjZSgpIHRvIGNhcHR1cmUKdGhlIGNh bGwgc3RhY2sgYW5kIHRoZSBEYmdIZWxwIEFQSSAoU3ltRnJvbUFkZHJXLCBTeW1HZXRMaW5l RnJvbUFkZHJXNjQpCmZvciBzeW1ib2wgcmVzb2x1dGlvbi4KClN5bWJvbCBoYW5kbGVyIGlu aXRpYWxpemF0aW9uIChTeW1Jbml0aWFsaXplKSBpcyBwZXJmb3JtZWQgb25jZSBwZXIKcHJv Y2VzcyBhbmQgY2FjaGVkLiAgSWYgaW5pdGlhbGl6YXRpb24gZmFpbHMsIHRoZSByZXBvcnQg Zm9yIGl0IGlzCnJldHVybmVkIGFzIHRoZSBiYWNrdHJhY2Ugb3V0cHV0LiAgVGhlIHN5bWJv bCBoYW5kbGVyIGlzIGNsZWFuZWQgdXAgdmlhCm9uX3Byb2NfZXhpdCgpIHRvIHJlbGVhc2Ug RGJnSGVscCByZXNvdXJjZXMuCgpUaGUgaW1wbGVtZW50YXRpb24gcHJvdmlkZXMgc3ltYm9s IG5hbWVzLCBvZmZzZXRzLCBhbmQgYWRkcmVzc2VzLiAgV2hlbgpQREIgZmlsZXMgYXJlIGF2 YWlsYWJsZSwgaXQgYWxzbyBpbmNsdWRlcyBzb3VyY2UgZmlsZSBuYW1lcyBhbmQgbGluZQpu dW1iZXJzLiAgU3ltYm9sIG5hbWVzIGFuZCBmaWxlIHBhdGhzIGFyZSBjb252ZXJ0ZWQgZnJv bSBVVEYtMTYgdG8gdGhlCmRhdGFiYXNlIGVuY29kaW5nIHVzaW5nIHdjaGFyMmNoYXIoKSwg d2hpY2ggcHJvcGVybHkgaGFuZGxlcyBib3RoIFVURi04CmFuZCBub24tVVRGLTggZGF0YWJh c2VzIG9uIFdpbmRvd3MuICBXaGVuIHN5bWJvbCBpbmZvcm1hdGlvbiBpcwp1bmF2YWlsYWJs ZSBvciBlbmNvZGluZyBjb252ZXJzaW9uIGZhaWxzLCBpdCBmYWxscyBiYWNrIHRvIGRpc3Bs YXlpbmcgcmF3CmFkZHJlc3Nlcy4KClRoZSBpbXBsZW1lbnRhdGlvbiB1c2VzIHRoZSBleHBs aWNpdCBVbmljb2RlIHZlcnNpb25zIG9mIHRoZSBEYmdIZWxwCmZ1bmN0aW9ucyAoU1lNQk9M X0lORk9XLCBTeW1Gcm9tQWRkclcsIElNQUdFSExQX0xJTkVXNjQsClN5bUdldExpbmVGcm9t QWRkclc2NCkgcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgdmVyc2lvbnMuICBUaGlzIGFsbG93 cyB1cwp0byByZWx5IG9uIHByZWRpY3RhYmxlIGVuY29kaW5nIGNvbnZlcnNpb24gZnJvbSBV bmljb2RlLCByYXRoZXIgdGhhbiB1c2luZwp0aGUgaGFwaGF6YXJkIEFOU0kgY29kZXBhZ2Ug dGhhdCB3ZSdkIGdldCBvdGhlcndpc2UuCgpEYmdIZWxwIGlzIGFwcGFyZW50bHkgYXZhaWxh YmxlIG9uIGFsbCBXaW5kb3dzIHBsYXRmb3JtcyB3ZSBzdXBwb3J0LCBzbwp0aGVyZSBhcmUg bm8gdmVyc2lvbiBudW1iZXIgY2hlY2tzLgoKQXV0aG9yOiBCcnlhbiBHcmVlbiA8ZGJyeWFu LmdyZWVuQGdtYWlsLmNvbT4KUmV2aWV3ZWQtYnk6IEV1bGVyIFRhdmVpcmEgPGV1bGVyQGV1 bGVydG8uY29tPgpSZXZpZXdlZC1ieTogSmFrdWIgV2FydGFrIDxqYWt1Yi53YXJ0YWtAZW50 ZXJwcmlzZWRiLmNvbT4KUmV2aWV3ZWQtYnk6IEdyZWcgQnVyZCA8Z3JlZ0BidXJkLm1lPgpE aXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL2E2OTJjMGZlLWNhY2EtNGMwOC05YzVk LWRlYmZkMGVmMjUwNEBnbWFpbC5jb20KLS0tCiBzcmMvYmFja2VuZC9tZXNvbi5idWlsZCAg ICAgICAgfCAgIDYgKysKIHNyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYyB8IDE2OSAr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTcy IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvbWVzb24uYnVpbGQgYi9zcmMvYmFja2VuZC9tZXNvbi5idWlsZAppbmRleCBmZWM5ZjFk MDNiLi40ZjUyOTJkOGY4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9tZXNvbi5idWlsZAor KysgYi9zcmMvYmFja2VuZC9tZXNvbi5idWlsZApAQCAtNDEsNiArNDEsMTIgQEAgYmFja2Vu ZF9saW5rX2FyZ3MgPSBbXQogYmFja2VuZF9saW5rX2RlcGVuZHMgPSBbXQogCiAKKyMgT24g V2luZG93cyBhbHNvIG1ha2UgdGhlIGJhY2tlbmQgZGVwZW5kIG9uIGRiZ2hlbHAsIGZvciBi YWNrdHJhY2Ugc3VwcG9ydAoraWYgaG9zdF9zeXN0ZW0gPT0gJ3dpbmRvd3MnIGFuZCBjYy5n ZXRfaWQoKSA9PSAnbXN2YycKKyAgYmFja2VuZF9idWlsZF9kZXBzICs9IGNjLmZpbmRfbGli cmFyeSgnZGJnaGVscCcpCitlbmRpZgorCisKICMgT24gd2luZG93cyB3aGVuIGNvbXBpbGlu ZyB3aXRoIG1zdmMgd2UgbmVlZCB0byBtYWtlIHBvc3RncmVzIGV4cG9ydCBhbGwgaXRzCiAj IHN5bWJvbHMgc28gdGhhdCBleHRlbnNpb24gbGlicmFyaWVzIGNhbiB1c2UgdGhlbS4gRm9y IHRoYXQgd2UgbmVlZCB0byBzY2FuCiAjIHRoZSBjb25zdGl0dXRpbmcgb2JqZWN0cyBhbmQg Z2VuZXJhdGUgYSBmaWxlIHNwZWNpZnlpbmcgYWxsIHRoZSBmdW5jdGlvbnMgYXMKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2Vycm9yL2Vsb2cuYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2Vycm9yL2Vsb2cuYwppbmRleCAyNGU4ZjM3ZjYzLi41MjVjZjZjNmNmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC91dGlscy9lcnJvci9lbG9nLmMKKysrIGIvc3JjL2JhY2tlbmQv dXRpbHMvZXJyb3IvZWxvZy5jCkBAIC02Niw2ICs2NiwxMCBAQAogI2luY2x1ZGUgPGV4ZWNp bmZvLmg+CiAjZW5kaWYKIAorI2lmZGVmIF9NU0NfVkVSCisjaW5jbHVkZSA8ZGJnaGVscC5o PgorI2VuZGlmCisKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNvbW1v bi9pcC5oIgogI2luY2x1ZGUgImxpYnBxL2xpYnBxLmgiCkBAIC0xNDAsNiArMTQ0LDExIEBA IHN0YXRpYyB2b2lkIHdyaXRlX3N5c2xvZyhpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmxpbmUp Owogc3RhdGljIHZvaWQgd3JpdGVfZXZlbnRsb2coaW50IGxldmVsLCBjb25zdCBjaGFyICps aW5lLCBpbnQgbGVuKTsKICNlbmRpZgogCisjaWZkZWYgX01TQ19WRVIKK3N0YXRpYyBib29s IGJhY2t0cmFjZV9zeW1ib2xzX2luaXRpYWxpemVkID0gZmFsc2U7CitzdGF0aWMgSEFORExF IGJhY2t0cmFjZV9wcm9jZXNzID0gTlVMTDsKKyNlbmRpZgorCiAvKiBXZSBwcm92aWRlIGEg c21hbGwgc3RhY2sgb2YgRXJyb3JEYXRhIHJlY29yZHMgZm9yIHJlLWVudHJhbnQgY2FzZXMg Ki8KICNkZWZpbmUgRVJST1JEQVRBX1NUQUNLX1NJWkUgIDUKIApAQCAtMTgwLDYgKzE4OSw3 IEBAIHN0YXRpYyB2b2lkIHNldF9zdGFja19lbnRyeV9sb2NhdGlvbihFcnJvckRhdGEgKmVk YXRhLAogCQkJCQkJCQkJIGNvbnN0IGNoYXIgKmZ1bmNuYW1lKTsKIHN0YXRpYyBib29sIG1h dGNoZXNfYmFja3RyYWNlX2Z1bmN0aW9ucyhjb25zdCBjaGFyICpmdW5jbmFtZSk7CiBzdGF0 aWMgcGdfbm9pbmxpbmUgdm9pZCBzZXRfYmFja3RyYWNlKEVycm9yRGF0YSAqZWRhdGEsIGlu dCBudW1fc2tpcCk7CitzdGF0aWMgdm9pZCBiYWNrdHJhY2VfY2xlYW51cChpbnQgY29kZSwg RGF0dW0gYXJnKTsKIHN0YXRpYyB2b2lkIHNldF9lcnJkYXRhX2ZpZWxkKE1lbW9yeUNvbnRl eHREYXRhICpjeHQsIGNoYXIgKipwdHIsIGNvbnN0IGNoYXIgKnN0cik7CiBzdGF0aWMgdm9p ZCBGcmVlRXJyb3JEYXRhQ29udGVudHMoRXJyb3JEYXRhICplZGF0YSk7CiBzdGF0aWMgaW50 CWxvZ19taW5fbWVzc2FnZXNfY21wKGNvbnN0IExpc3RDZWxsICphLCBjb25zdCBMaXN0Q2Vs bCAqYik7CkBAIC0xMTI0LDYgKzExMzQsMTMgQEAgZXJyYmFja3RyYWNlKHZvaWQpCiAgKiBz cGVjaWZpZXMgaG93IG1hbnkgaW5uZXIgZnJhbWVzIHRvIHNraXAuICBVc2UgdGhpcyB0byBh dm9pZCBzaG93aW5nIHRoZQogICogaW50ZXJuYWwgYmFja3RyYWNlIHN1cHBvcnQgZnVuY3Rp b25zIGluIHRoZSBiYWNrdHJhY2UuICBUaGlzIHJlcXVpcmVzIHRoYXQKICAqIHRoaXMgYW5k IHJlbGF0ZWQgZnVuY3Rpb25zIGFyZSBub3QgaW5saW5lZC4KKyAqCisgKiBUaGUgaW1wbGVt ZW50YXRpb24gaXMsIHVuc3VycHJpc2luZ2x5LCBwbGF0Zm9ybS1zcGVjaWZpYzoKKyAqIC0g R05VIGxpYmMgYW5kIGNvcHljYXRzOiBVc2VzIGJhY2t0cmFjZSgpIGFuZCBiYWNrdHJhY2Vf c3ltYm9scygpCisgKiAtIFdpbmRvd3M6IFVzZXMgQ2FwdHVyZVN0YWNrQmFja1RyYWNlKCkg d2l0aCBEYmdIZWxwIGZvciBzeW1ib2wgcmVzb2x1dGlvbgorICogCSAocmVxdWlyZXMgUERC IGZpbGVzOyBmYWxscyBiYWNrIHRvIGV4cG9ydGVkIGZ1bmN0aW9ucy9yYXcgYWRkcmVzc2Vz IGlmCisgKiAJIHVuYXZhaWxhYmxlKQorICogLSBPdGhlcnMgKG11c2wgbGliYyk6IHVuc3Vw cG9ydGVkCiAgKi8KIHN0YXRpYyB2b2lkCiBzZXRfYmFja3RyYWNlKEVycm9yRGF0YSAqZWRh dGEsIGludCBudW1fc2tpcCkKQEAgLTExMzQsMTIgKzExNTEsMTIgQEAgc2V0X2JhY2t0cmFj ZShFcnJvckRhdGEgKmVkYXRhLCBpbnQgbnVtX3NraXApCiAKICNpZmRlZiBIQVZFX0JBQ0tU UkFDRV9TWU1CT0xTCiAJewotCQl2b2lkCSAgICpidWZbMTAwXTsKKwkJdm9pZAkgICAqZnJh bWVzWzEwMF07CiAJCWludAkJCW5mcmFtZXM7CiAJCWNoYXIJICAqKnN0cmZybXM7CiAKLQkJ bmZyYW1lcyA9IGJhY2t0cmFjZShidWYsIGxlbmd0aG9mKGJ1ZikpOwotCQlzdHJmcm1zID0g YmFja3RyYWNlX3N5bWJvbHMoYnVmLCBuZnJhbWVzKTsKKwkJbmZyYW1lcyA9IGJhY2t0cmFj ZShmcmFtZXMsIGxlbmd0aG9mKGZyYW1lcykpOworCQlzdHJmcm1zID0gYmFja3RyYWNlX3N5 bWJvbHMoZnJhbWVzLCBuZnJhbWVzKTsKIAkJaWYgKHN0cmZybXMgIT0gTlVMTCkKIAkJewog CQkJZm9yIChpbnQgaSA9IG51bV9za2lwOyBpIDwgbmZyYW1lczsgaSsrKQpAQCAtMTE1MCw2 ICsxMTY3LDEzOCBAQCBzZXRfYmFja3RyYWNlKEVycm9yRGF0YSAqZWRhdGEsIGludCBudW1f c2tpcCkKIAkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmVycnRyYWNlLAogCQkJCQkJCQkg ICAiaW5zdWZmaWNpZW50IG1lbW9yeSBmb3IgYmFja3RyYWNlIGdlbmVyYXRpb24iKTsKIAl9 CisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorCXsKKwkJdm9pZAkgICAqZnJhbWVzWzEwMF07 CisJCWludAkJCW5mcmFtZXM7CisJCWNoYXIJCWJ1ZmZlcltzaXplb2YoU1lNQk9MX0lORk9X KSArIE1BWF9TWU1fTkFNRSAqIHNpemVvZih3Y2hhcl90KV07CisJCVBTWU1CT0xfSU5GT1cg cHN5bWJvbDsKKworCQlpZiAoIWJhY2t0cmFjZV9zeW1ib2xzX2luaXRpYWxpemVkKQorCQl7 CisJCQlpZighRHVwbGljYXRlSGFuZGxlKEdldEN1cnJlbnRQcm9jZXNzKCksCisJCQkJCQkJ CUdldEN1cnJlbnRQcm9jZXNzKCksCisJCQkJCQkJCUdldEN1cnJlbnRQcm9jZXNzKCksCisJ CQkJCQkJCSZiYWNrdHJhY2VfcHJvY2VzcywKKwkJCQkJCQkJMCwKKwkJCQkJCQkJRkFMU0Us CisJCQkJCQkJCURVUExJQ0FURV9TQU1FX0FDQ0VTUykpCisJCQl7CisJCQkJYXBwZW5kU3Ry aW5nSW5mbygmZXJydHJhY2UsCisJCQkJCQkJCSAiY291bGQgbm90IGdldCBwcm9jZXNzIGhh bmRsZSBmb3IgYmFja3RyYWNlOiBlcnJvciBjb2RlICVsdSIsCisJCQkJCQkJCSBHZXRMYXN0 RXJyb3IoKSk7CisJCQkJZWRhdGEtPmJhY2t0cmFjZSA9IGVycnRyYWNlLmRhdGE7CisJCQkJ cmV0dXJuOworCQkJfQorCisJCQlTeW1TZXRPcHRpb25zKFNZTU9QVF9VTkROQU1FIHwKKwkJ CQkJCSAgU1lNT1BUX0RFRkVSUkVEX0xPQURTIHwKKwkJCQkJCSAgU1lNT1BUX0xPQURfTElO RVMgfAorCQkJCQkJICBTWU1PUFRfRkFJTF9DUklUSUNBTF9FUlJPUlMpOworCisJCQlpZiAo U3ltSW5pdGlhbGl6ZShiYWNrdHJhY2VfcHJvY2VzcywgTlVMTCwgVFJVRSkpCisJCQl7CisJ CQkJYmFja3RyYWNlX3N5bWJvbHNfaW5pdGlhbGl6ZWQgPSB0cnVlOworCQkJCW9uX3Byb2Nf ZXhpdChiYWNrdHJhY2VfY2xlYW51cCwgMCk7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJ Q2xvc2VIYW5kbGUoYmFja3RyYWNlX3Byb2Nlc3MpOworCQkJCWJhY2t0cmFjZV9wcm9jZXNz ID0gTlVMTDsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvKCZlcnJ0cmFjZSwKKwkJCQkJCQkJICJj b3VsZCBub3QgaW5pdGlhbGl6ZSBzeW1ib2wgaGFuZGxlcjogZXJyb3IgY29kZSAlbHUiLAor CQkJCQkJCQkgR2V0TGFzdEVycm9yKCkpOworCQkJCWVkYXRhLT5iYWNrdHJhY2UgPSBlcnJ0 cmFjZS5kYXRhOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQorCisJCW5mcmFtZXMgPSBDYXB0 dXJlU3RhY2tCYWNrVHJhY2UobnVtX3NraXAsIGxlbmd0aG9mKGZyYW1lcyksIGZyYW1lcywg TlVMTCk7CisKKwkJaWYgKG5mcmFtZXMgPT0gMCkKKwkJeworCQkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZygmZXJydHJhY2UsICJ6ZXJvIHN0YWNrIGZyYW1lcyBjYXB0dXJlZCIpOworCQkJ ZWRhdGEtPmJhY2t0cmFjZSA9IGVycnRyYWNlLmRhdGE7CisJCQlyZXR1cm47CisJCX0KKwor CQlwc3ltYm9sID0gKFBTWU1CT0xfSU5GT1cpIGJ1ZmZlcjsKKwkJcHN5bWJvbC0+TWF4TmFt ZUxlbiA9IE1BWF9TWU1fTkFNRTsKKwkJcHN5bWJvbC0+U2l6ZU9mU3RydWN0ID0gc2l6ZW9m KFNZTUJPTF9JTkZPVyk7CisKKwkJZm9yIChpbnQgaSA9IDA7IGkgPCBuZnJhbWVzOyBpKysp CisJCXsKKwkJCURXT1JENjQJCWFkZHJlc3MgPSAoRFdPUkQ2NCkgZnJhbWVzW2ldOworCQkJ RFdPUkQ2NAkJZGlzcGxhY2VtZW50ID0gMDsKKwkJCUJPT0wJCXN5bV9yZXN1bHQ7CisKKwkJ CXN5bV9yZXN1bHQgPSBTeW1Gcm9tQWRkclcoYmFja3RyYWNlX3Byb2Nlc3MsCisJCQkJCQkJ CQkgIGFkZHJlc3MsCisJCQkJCQkJCQkgICZkaXNwbGFjZW1lbnQsCisJCQkJCQkJCQkgIHBz eW1ib2wpOworCQkJaWYgKHN5bV9yZXN1bHQpCisJCQl7CisJCQkJY2hhcgkJc3ltYm9sX25h bWVbTUFYX1NZTV9OQU1FXTsKKwkJCQlzaXplX3QJCXJlc3VsdDsKKworCQkJCS8qCisJCQkJ ICogQ29udmVydCBzeW1ib2wgbmFtZSBmcm9tIFVURi0xNiB0byBkYXRhYmFzZSBlbmNvZGlu ZyB1c2luZworCQkJCSAqIHdjaGFyMmNoYXIoKSwgd2hpY2ggaGFuZGxlcyBib3RoIFVURi04 IGFuZCBub24tVVRGLTgKKwkJCQkgKiBkYXRhYmFzZXMgY29ycmVjdGx5IG9uIFdpbmRvd3Mu CisJCQkJICovCisJCQkJcmVzdWx0ID0gd2NoYXIyY2hhcihzeW1ib2xfbmFtZSwgKGNvbnN0 IHdjaGFyX3QgKikgcHN5bWJvbC0+TmFtZSwKKwkJCQkJCQkJCXNpemVvZihzeW1ib2xfbmFt ZSksIE5VTEwpOworCisJCQkJaWYgKHJlc3VsdCA9PSAoc2l6ZV90KSAtMSkKKwkJCQl7CisJ CQkJCS8qIENvbnZlcnNpb24gZmFpbGVkLCB1c2UgYWRkcmVzcyBvbmx5ICovCisJCQkJCWFw cGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJICJcblsweCVsbHhdIiwKKwkJ CQkJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyZXNzKTsKKwkJCQl9CisJCQkJZWxz ZQorCQkJCXsKKwkJCQkJSU1BR0VITFBfTElORVc2NCBsaW5lOworCQkJCQlEV09SRAkJbGlu ZV9kaXNwbGFjZW1lbnQgPSAwOworCQkJCQljaGFyCQlmaWxlbmFtZVtNQVhfUEFUSF07CisK KwkJCQkJbGluZS5TaXplT2ZTdHJ1Y3QgPSBzaXplb2YoSU1BR0VITFBfTElORVc2NCk7CisK KwkJCQkJLyogU3RhcnQgd2l0aCB0aGUgY29tbW9uIHBhcnQ6IHN5bWJvbCtvZmZzZXQgW2Fk ZHJlc3NdICovCisJCQkJCWFwcGVuZFN0cmluZ0luZm8oJmVycnRyYWNlLAorCQkJCQkJCQkJ ICJcbiVzKzB4JWxseCBbMHglbGx4XSIsCisJCQkJCQkJCQkgc3ltYm9sX25hbWUsCisJCQkJ CQkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJICh1 bnNpZ25lZCBsb25nIGxvbmcpIGFkZHJlc3MpOworCisJCQkJCS8qIFRyeSB0byBhcHBlbmQg bGluZSBpbmZvIGlmIGF2YWlsYWJsZSAqLworCQkJCQlpZiAoU3ltR2V0TGluZUZyb21BZGRy VzY0KGJhY2t0cmFjZV9wcm9jZXNzLAorCQkJCQkJCQkJCQkgIGFkZHJlc3MsCisJCQkJCQkJ CQkJCSAgJmxpbmVfZGlzcGxhY2VtZW50LAorCQkJCQkJCQkJCQkgICZsaW5lKSkKKwkJCQkJ eworCQkJCQkJcmVzdWx0ID0gd2NoYXIyY2hhcihmaWxlbmFtZSwgKGNvbnN0IHdjaGFyX3Qg KikgbGluZS5GaWxlTmFtZSwKKwkJCQkJCQkJCQkJc2l6ZW9mKGZpbGVuYW1lKSwgTlVMTCk7 CisKKwkJCQkJCWlmIChyZXN1bHQgIT0gKHNpemVfdCkgLTEpCisJCQkJCQl7CisJCQkJCQkJ YXBwZW5kU3RyaW5nSW5mbygmZXJydHJhY2UsCisJCQkJCQkJCQkJCSAiIFslczolbHVdIiwK KwkJCQkJCQkJCQkJIGZpbGVuYW1lLAorCQkJCQkJCQkJCQkgKHVuc2lnbmVkIGxvbmcpIGxp bmUuTGluZU51bWJlcik7CisJCQkJCQl9CisJCQkJCX0KKwkJCQl9CisJCQl9CisJCQllbHNl CisJCQl7CisJCQkJYXBwZW5kU3RyaW5nSW5mbygmZXJydHJhY2UsCisJCQkJCQkJCSAiXG5b MHglbGx4XSAoc3ltYm9sIGxvb2t1cCBmYWlsZWQ6IGVycm9yIGNvZGUgJWx1KSIsCisJCQkJ CQkJCSAodW5zaWduZWQgbG9uZyBsb25nKSBhZGRyZXNzLAorCQkJCQkJCQkgR2V0TGFzdEVy cm9yKCkpOworCQkJfQorCQl9CisJfQogI2Vsc2UKIAlhcHBlbmRTdHJpbmdJbmZvU3RyaW5n KCZlcnJ0cmFjZSwKIAkJCQkJCSAgICJiYWNrdHJhY2UgZ2VuZXJhdGlvbiBpcyBub3Qgc3Vw cG9ydGVkIGJ5IHRoaXMgaW5zdGFsbGF0aW9uIik7CkBAIC0xMTU4LDYgKzEzMDcsMjAgQEAg c2V0X2JhY2t0cmFjZShFcnJvckRhdGEgKmVkYXRhLCBpbnQgbnVtX3NraXApCiAJZWRhdGEt PmJhY2t0cmFjZSA9IGVycnRyYWNlLmRhdGE7CiB9CiAKKy8qCisgKiBDbGVhbnVwIGZ1bmN0 aW9uIGZvciBEYmdIZWxwIHJlc291cmNlcy4KKyAqIENhbGxlZCB2aWEgb25fcHJvY19leGl0 KCkgdG8gcmVsZWFzZSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IFN5bUluaXRpYWxpemUoKS4K KyAqLworcGdfYXR0cmlidXRlX3VudXNlZCgpCitzdGF0aWMgdm9pZAorYmFja3RyYWNlX2Ns ZWFudXAoaW50IGNvZGUsIERhdHVtIGFyZykKK3sKKyNpZmRlZiBfTVNDX1ZFUgorCVN5bUNs ZWFudXAoYmFja3RyYWNlX3Byb2Nlc3MpOworCUNsb3NlSGFuZGxlKGJhY2t0cmFjZV9wcm9j ZXNzKTsKKyNlbmRpZgorfQorCiAvKgogICogZXJybXNnX2ludGVybmFsIC0tLSBhZGQgYSBw cmltYXJ5IGVycm9yIG1lc3NhZ2UgdGV4dCB0byB0aGUgY3VycmVudCBlcnJvcgogICoKLS0g CjIuNTIuMC53aW5kb3dzLjEKCg== --------------76GbnFNjR6liDnuzAbpUvEAv--