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.94.2) (envelope-from ) id 1r3Ogy-003ZNd-Bb for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Nov 2023 22:49:04 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1r3Ogw-003ERY-TN for pgsql-hackers@arkaria.postgresql.org; Wed, 15 Nov 2023 22:49:02 +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.94.2) (envelope-from ) id 1r3Ogv-003ERQ-U7 for pgsql-hackers@lists.postgresql.org; Wed, 15 Nov 2023 22:49:02 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1r3Ogs-005lRc-1C for pgsql-hackers@lists.postgresql.org; Wed, 15 Nov 2023 22:49:00 +0000 Received: from [172.21.97.0] (unknown [90.160.41.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4SVyyF61KMz49Q2c; Thu, 16 Nov 2023 00:48:53 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1700088534; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=WblZV7QduL8R+0nvIwGLX8OJFNOb6LWEWfQ3syOdkSo=; b=Bmmf7g0wKS2v98lfuAsh96tElQIPe2URm1HbSwmOnw+a3WmtYvcrveCHNv/Pgp0zd9TlX3 +9NPb/9xdXfqG7EEEU0MA6nF3JAhtWbAWaI1s9JUUjW3ZvBXwN93SHb47iNfWi04lCFq4R G/vdbWVnFkWttzUXxq8Va+JISKDhyzLU/B+s+JNEzjvxkHrYIX7JMqYOusYVNkaZHMe+wm 46CQVENAiqR5l3qEXUBUOdUUkkES5nZz6M+ucvSwQvDSwXm4e8o6rD4cJ7fOttncF3A7ZP daAI0ZC1zro1tyt/YJCWb2x9LsBWLtb7ryCVkEsuHuOwZSsj54faAsf+7Ex7ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1700088534; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=WblZV7QduL8R+0nvIwGLX8OJFNOb6LWEWfQ3syOdkSo=; b=JdUBHkueeKMF/lwZA122LmmunADAr0dzjDi4tRNRbd5WAU7Q+tUH9x4K3rh2zMecV7dGMQ cCma6KRDd7BANJb7BFkwJvL1U34aDC0KzQzua0gxtX7OtR/fThAuEHLpq7ww5deYeMaWh0 coSzkagJXqyB5krwQbKRxaCGV66Kv29gOi67hyg4wKaeSfFW5Pj78AgN5vozcqcikElEZw 9mGC9qO3F+daerb/fDtsZ0kBA2hfAkHQg50IiJGuGxPj/lD7LfwrhrvVg6kYtOvzjraW2Y kQ+3T52NcZwwFNfdt15xUqU8FS19zgwa1gPJBolyKTuC/6C3p0rLMhF1PIBVqA== ARC-Seal: i=1; s=lahtoruutu; d=iki.fi; t=1700088534; a=rsa-sha256; cv=none; b=dQy6utG8XZlBezJTC5GuyhobfBAD1zmlBL4eu5kJRmLrMp172EWl8cWXxx87Q3GJscLr56 KVFf2gcR69rgAGlzXZsQUbj0KdrTQUEVbjnnSeu6iTa200WnkSWU0CfgCpMe8jdhJqPt/B cFyA3IDEBLOi41IMisMpFfH9Ti+7E98NLluqCFDuuaafbUu/Qm1Mk+jLLbpatFlpxSbwoP /ASOUXREIDAG5VpvaZlmC8YVxK5koSsfQJTtWBgDeZhQ+52Hj4imbiZVW5Efkmbg5/SezO WCsY9irM07XKNrzUkOzt0inCeiGjygOnZZb0efMp85K21pigNFE9rQWz+FFt4A== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi Content-Type: multipart/mixed; boundary="------------I0sOP06nGF47Uy5pyVxGQ0NA" Message-ID: Date: Wed, 15 Nov 2023 23:48:52 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: WaitEventSet resource leakage Content-Language: en-US To: Tom Lane , pgsql-hackers@lists.postgresql.org, Alexander Lakhin References: <472235.1678387869@sss.pgh.pa.us> From: Heikki Linnakangas In-Reply-To: <472235.1678387869@sss.pgh.pa.us> 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. --------------I0sOP06nGF47Uy5pyVxGQ0NA Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit (Alexander just reminded me of this off-list) On 09/03/2023 20:51, Tom Lane wrote: > In [1] I wrote: > >> PG Bug reporting form writes: >>> The following script: >>> [ leaks a file descriptor per error ] >> >> Yeah, at least on platforms where WaitEventSets own kernel file >> descriptors. I don't think it's postgres_fdw's fault though, >> but that of ExecAppendAsyncEventWait, which is ignoring the >> possibility of failing partway through. It looks like it'd be >> sufficient to add a PG_CATCH or PG_FINALLY block there to make >> sure the WaitEventSet is disposed of properly --- fortunately, >> it doesn't need to have any longer lifespan than that one >> function. Here's a patch to do that. For back branches. > After further thought that seems like a pretty ad-hoc solution. > We probably can do no better in the back branches, but shouldn't > we start treating WaitEventSets as ResourceOwner-managed resources? > Otherwise, transient WaitEventSets are going to be a permanent > source of headaches. Agreed. The current signature of CurrentWaitEventSet is: WaitEventSet * CreateWaitEventSet(MemoryContext context, int nevents) Passing MemoryContext makes little sense when the WaitEventSet also holds file descriptors. With anything other than TopMemoryContext, you need to arrange for proper cleanup with PG_TRY-PG_CATCH or by avoiding ereport() calls. And once you've arrange for cleanup, the memory context doesn't matter much anymore. Let's change it so that it's always allocated in TopMemoryContext, but pass a ResourceOwner instead: WaitEventSet * CreateWaitEventSet(ResourceOwner owner, int nevents) And use owner == NULL to mean session lifetime. -- Heikki Linnakangas Neon (https://neon.tech) --------------I0sOP06nGF47Uy5pyVxGQ0NA Content-Type: text/x-patch; charset=UTF-8; name="v1-0001-Fix-resource-leak-when-a-FDW-s-ForeignAsyncReques.patch" Content-Disposition: attachment; filename*0="v1-0001-Fix-resource-leak-when-a-FDW-s-ForeignAsyncReques.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBiOWVhNjA5ODU1YjgzODM2OWNkZGIzM2U0MDQ1YWM5MTYwM2RkNzI2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTUgTm92IDIwMjMgMjM6NDQ6NTYgKzAxMDAK U3ViamVjdDogW1BBVENIIHYxIDEvMV0gRml4IHJlc291cmNlIGxlYWsgd2hlbiBhIEZEVydz IEZvcmVpZ25Bc3luY1JlcXVlc3QKIGZ1bmN0aW9uIGZhaWxzCgpJZiBhbiBlcnJvciBpcyB0 aHJvd24gYWZ0ZXIgY2FsbGluZyBDcmVhdGVXYWl0RXZlbnRTZXQoKSwgdGhlIG1lbW9yeQpv ZiBhIFdhaXRFdmVudFNldCBpcyBmcmVlJ2QgYXMgaXQncyBhbGxvY2F0ZWQgaW4gdGhlIHNo b3J0LWxpdmVkCm1lbW9yeSBjb250ZXh0LCBidXQgdGhlIGZpbGUgZGVzY3JpcHRvciAob24g ZXBvbGwtIG9yIGtxdWV1ZS1iYXNlZApzeXN0ZW1zKSBvciBoYW5kbGVzIChvbiBXaW5kb3dz KSB0aGF0IGl0IGNvbnRhaW5zIGFyZSBsZWFrZWQuIFVzZQpQR19UUlktRklOQUxMWSB0byBl bnN1cmUgaXQgZ2V0cyBmcmVlZC4KCkluIHRoZSBwYXNzaW5nLCBmaXggbWlzbGVhZGluZyBj b21tZW50IG9uIHdoYXQgdGhlICduZXZlbnRzJyBhcmd1bWVudAp0byBXYWl0RXZlbnRTZXRX YWl0IG1lYW5zLgoKVGhlIGFkZGVkIHRlc3QgZG9lc24ndCBjaGVjayBmb3IgbGVha2luZyBy ZXNvdXJjZXMsIHNvIGl0IHBhc3NlZCBldmVuCmJlZm9yZSB0aGlzIGNvbW1pdC4gQnV0IGF0 IGxlYXN0IGl0IGNvdmVycyB0aGUgY29kZSBwYXRoLgoKUmVwb3J0IGJ5IEFsZXhhbmRlciBM YWtoaW4sIGFuYWx5c2lzIGFuZCBzdWdnZXN0aW9uIGZvciB0aGUgZml4IGJ5ClRvbSBMYW5l LgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC8x NzgyOC0xMjJkYThjYmEyMzIzNmJlQHBvc3RncmVzcWwub3JnCkRpc2N1c3Npb246IGh0dHBz Oi8vd3d3LnBvc3RncmVzcWwub3JnL21lc3NhZ2UtaWQvNDcyMjM1LjE2NzgzODc4NjlAc3Nz LnBnaC5wYS51cwotLS0KIC4uLi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dCAgICB8ICA3ICsrCiBjb250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3 LnNxbCAgICAgfCAgNiArKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVuZC5jICAg ICAgICAgICAgIHwgNjYgKysrKysrKysrKystLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA1 MCBpbnNlcnRpb25zKCspLCAyOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9jb250cmli L3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0IGIvY29udHJpYi9wb3N0 Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRleCA2NGJjYzY2YjhkLi4y MmNhZTM3YTFlIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9w b3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2V4cGVjdGVkL3Bv c3RncmVzX2Zkdy5vdXQKQEAgLTEwODA5LDYgKzEwODA5LDEzIEBAIFNFTEVDVCAqIEZST00g cmVzdWx0X3RibCBPUkRFUiBCWSBhOwogKDIgcm93cykKIAogREVMRVRFIEZST00gcmVzdWx0 X3RibDsKKy0tIFRlc3QgZXJyb3IgaGFuZGxpbmcsIGlmIGFjY2Vzc2luZyBvbmUgb2YgdGhl IGZvcmVpZ24gcGFydGl0aW9ucyBlcnJvcnMgb3V0CitDUkVBVEUgRk9SRUlHTiBUQUJMRSBh c3luY19wX2Jyb2tlbiBQQVJUSVRJT04gT0YgYXN5bmNfcHQgRk9SIFZBTFVFUyBGUk9NICgx MDAwMCkgVE8gKDEwMDAxKQorICBTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAodGFibGVfbmFt ZSAnbm9uX2V4aXN0ZW50X3RhYmxlJyk7CitTRUxFQ1QgKiBGUk9NIGFzeW5jX3B0OworRVJS T1I6ICByZWxhdGlvbiAicHVibGljLm5vbl9leGlzdGVudF90YWJsZSIgZG9lcyBub3QgZXhp c3QKK0NPTlRFWFQ6ICByZW1vdGUgU1FMIGNvbW1hbmQ6IFNFTEVDVCBhLCBiLCBjIEZST00g cHVibGljLm5vbl9leGlzdGVudF90YWJsZQorRFJPUCBGT1JFSUdOIFRBQkxFIGFzeW5jX3Bf YnJva2VuOwogLS0gQ2hlY2sgY2FzZSB3aGVyZSBtdWx0aXBsZSBwYXJ0aXRpb25zIHVzZSB0 aGUgc2FtZSBjb25uZWN0aW9uCiBDUkVBVEUgVEFCTEUgYmFzZV90YmwzIChhIGludCwgYiBp bnQsIGMgdGV4dCk7CiBDUkVBVEUgRk9SRUlHTiBUQUJMRSBhc3luY19wMyBQQVJUSVRJT04g T0YgYXN5bmNfcHQgRk9SIFZBTFVFUyBGUk9NICgzMDAwKSBUTyAoNDAwMCkKZGlmZiAtLWdp dCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJp Yi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKaW5kZXggMmQxNGVlYWRiNS4u MDc1ZGE0ZmY4NiAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3Rn cmVzX2Zkdy5zcWwKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwKQEAgLTM2MDcsNiArMzYwNywxMiBAQCBJTlNFUlQgSU5UTyByZXN1bHRfdGJsIFNF TEVDVCBhLCBiLCAnQUFBJyB8fCBjIEZST00gYXN5bmNfcHQgV0hFUkUgYiA9PT0gNTA1Owog U0VMRUNUICogRlJPTSByZXN1bHRfdGJsIE9SREVSIEJZIGE7CiBERUxFVEUgRlJPTSByZXN1 bHRfdGJsOwogCistLSBUZXN0IGVycm9yIGhhbmRsaW5nLCBpZiBhY2Nlc3Npbmcgb25lIG9m IHRoZSBmb3JlaWduIHBhcnRpdGlvbnMgZXJyb3JzIG91dAorQ1JFQVRFIEZPUkVJR04gVEFC TEUgYXN5bmNfcF9icm9rZW4gUEFSVElUSU9OIE9GIGFzeW5jX3B0IEZPUiBWQUxVRVMgRlJP TSAoMTAwMDApIFRPICgxMDAwMSkKKyAgU0VSVkVSIGxvb3BiYWNrIE9QVElPTlMgKHRhYmxl X25hbWUgJ25vbl9leGlzdGVudF90YWJsZScpOworU0VMRUNUICogRlJPTSBhc3luY19wdDsK K0RST1AgRk9SRUlHTiBUQUJMRSBhc3luY19wX2Jyb2tlbjsKKwogLS0gQ2hlY2sgY2FzZSB3 aGVyZSBtdWx0aXBsZSBwYXJ0aXRpb25zIHVzZSB0aGUgc2FtZSBjb25uZWN0aW9uCiBDUkVB VEUgVEFCTEUgYmFzZV90YmwzIChhIGludCwgYiBpbnQsIGMgdGV4dCk7CiBDUkVBVEUgRk9S RUlHTiBUQUJMRSBhc3luY19wMyBQQVJUSVRJT04gT0YgYXN5bmNfcHQgRk9SIFZBTFVFUyBG Uk9NICgzMDAwKSBUTyAoNDAwMCkKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVBcHBlbmQuYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVBcHBlbmQuYwppbmRl eCA2MDlkZjZiOWU2Li45OTgxOGQzZWJjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQXBwZW5kLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUFwcGVu ZC5jCkBAIC0xMDI1LDQzICsxMDI1LDUxIEBAIEV4ZWNBcHBlbmRBc3luY0V2ZW50V2FpdChB cHBlbmRTdGF0ZSAqbm9kZSkKIAkvKiBXZSBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdoZW4g dGhlcmUgYXJlIG5vIHZhbGlkIGFzeW5jIHN1YnBsYW5zLiAqLwogCUFzc2VydChub2RlLT5h c19uYXN5bmNyZW1haW4gPiAwKTsKIAorCUFzc2VydChub2RlLT5hc19ldmVudHNldCA9PSBO VUxMKTsKIAlub2RlLT5hc19ldmVudHNldCA9IENyZWF0ZVdhaXRFdmVudFNldChDdXJyZW50 TWVtb3J5Q29udGV4dCwgbmV2ZW50cyk7Ci0JQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNf ZXZlbnRzZXQsIFdMX0VYSVRfT05fUE1fREVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCi0JCQkJ CSAgTlVMTCwgTlVMTCk7Ci0KLQkvKiBHaXZlIGVhY2ggd2FpdGluZyBzdWJwbGFuIGEgY2hh bmNlIHRvIGFkZCBhbiBldmVudC4gKi8KLQlpID0gLTE7Ci0Jd2hpbGUgKChpID0gYm1zX25l eHRfbWVtYmVyKG5vZGUtPmFzX2FzeW5jcGxhbnMsIGkpKSA+PSAwKQorCVBHX1RSWSgpOwog CXsKLQkJQXN5bmNSZXF1ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsK KwkJQWRkV2FpdEV2ZW50VG9TZXQobm9kZS0+YXNfZXZlbnRzZXQsIFdMX0VYSVRfT05fUE1f REVBVEgsIFBHSU5WQUxJRF9TT0NLRVQsCisJCQkJCQkgIE5VTEwsIE5VTEwpOwogCi0JCWlm IChhcmVxLT5jYWxsYmFja19wZW5kaW5nKQotCQkJRXhlY0FzeW5jQ29uZmlndXJlV2FpdChh cmVxKTsKLQl9CisJCS8qIEdpdmUgZWFjaCB3YWl0aW5nIHN1YnBsYW4gYSBjaGFuY2UgdG8g YWRkIGFuIGV2ZW50LiAqLworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21l bWJlcihub2RlLT5hc19hc3luY3BsYW5zLCBpKSkgPj0gMCkKKwkJeworCQkJQXN5bmNSZXF1 ZXN0ICphcmVxID0gbm9kZS0+YXNfYXN5bmNyZXF1ZXN0c1tpXTsKIAotCS8qCi0JICogTm8g bmVlZCBmb3IgZnVydGhlciBwcm9jZXNzaW5nIGlmIHRoZXJlIGFyZSBubyBjb25maWd1cmVk IGV2ZW50cyBvdGhlcgotCSAqIHRoYW4gdGhlIHBvc3RtYXN0ZXIgZGVhdGggZXZlbnQuCi0J ICovCi0JaWYgKEdldE51bVJlZ2lzdGVyZWRXYWl0RXZlbnRzKG5vZGUtPmFzX2V2ZW50c2V0 KSA9PSAxKQorCQkJaWYgKGFyZXEtPmNhbGxiYWNrX3BlbmRpbmcpCisJCQkJRXhlY0FzeW5j Q29uZmlndXJlV2FpdChhcmVxKTsKKwkJfQorCisJCS8qCisJCSAqIE5vIG5lZWQgZm9yIGZ1 cnRoZXIgcHJvY2Vzc2luZyBpZiB0aGVyZSBhcmUgbm8gY29uZmlndXJlZCBldmVudHMKKwkJ ICogb3RoZXIgdGhhbiB0aGUgcG9zdG1hc3RlciBkZWF0aCBldmVudC4KKwkJICovCisJCWlm IChHZXROdW1SZWdpc3RlcmVkV2FpdEV2ZW50cyhub2RlLT5hc19ldmVudHNldCkgPT0gMSkK KwkJeworCQkJRnJlZVdhaXRFdmVudFNldChub2RlLT5hc19ldmVudHNldCk7CisJCQlub2Rl LT5hc19ldmVudHNldCA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBSZXR1cm4g YXQgbW9zdCBFVkVOVF9CVUZGRVJfU0laRSBldmVudHMgaW4gb25lIGNhbGwuICovCisJCWlm IChuZXZlbnRzID4gRVZFTlRfQlVGRkVSX1NJWkUpCisJCQluZXZlbnRzID0gRVZFTlRfQlVG RkVSX1NJWkU7CisKKwkJLyoKKwkJICogSWYgdGhlIHRpbWVvdXQgaXMgLTEsIHdhaXQgdW50 aWwgYXQgbGVhc3Qgb25lIGV2ZW50IG9jY3Vycy4gIElmIHRoZQorCQkgKiB0aW1lb3V0IGlz IDAsIHBvbGwgZm9yIGV2ZW50cywgYnV0IGRvIG5vdCB3YWl0IGF0IGFsbC4KKwkJICovCisJ CW5vY2N1cnJlZCA9IFdhaXRFdmVudFNldFdhaXQobm9kZS0+YXNfZXZlbnRzZXQsIHRpbWVv dXQsIG9jY3VycmVkX2V2ZW50LAorCQkJCQkJCQkJIG5ldmVudHMsIFdBSVRfRVZFTlRfQVBQ RU5EX1JFQURZKTsKKwl9CisJUEdfRklOQUxMWSgpOwogCXsKIAkJRnJlZVdhaXRFdmVudFNl dChub2RlLT5hc19ldmVudHNldCk7CiAJCW5vZGUtPmFzX2V2ZW50c2V0ID0gTlVMTDsKLQkJ cmV0dXJuOwogCX0KLQotCS8qIFdlIHdhaXQgb24gYXQgbW9zdCBFVkVOVF9CVUZGRVJfU0la RSBldmVudHMuICovCi0JaWYgKG5ldmVudHMgPiBFVkVOVF9CVUZGRVJfU0laRSkKLQkJbmV2 ZW50cyA9IEVWRU5UX0JVRkZFUl9TSVpFOwotCi0JLyoKLQkgKiBJZiB0aGUgdGltZW91dCBp cyAtMSwgd2FpdCB1bnRpbCBhdCBsZWFzdCBvbmUgZXZlbnQgb2NjdXJzLiAgSWYgdGhlCi0J ICogdGltZW91dCBpcyAwLCBwb2xsIGZvciBldmVudHMsIGJ1dCBkbyBub3Qgd2FpdCBhdCBh bGwuCi0JICovCi0Jbm9jY3VycmVkID0gV2FpdEV2ZW50U2V0V2FpdChub2RlLT5hc19ldmVu dHNldCwgdGltZW91dCwgb2NjdXJyZWRfZXZlbnQsCi0JCQkJCQkJCSBuZXZlbnRzLCBXQUlU X0VWRU5UX0FQUEVORF9SRUFEWSk7Ci0JRnJlZVdhaXRFdmVudFNldChub2RlLT5hc19ldmVu dHNldCk7Ci0Jbm9kZS0+YXNfZXZlbnRzZXQgPSBOVUxMOworCVBHX0VORF9UUlkoKTsKIAlp ZiAobm9jY3VycmVkID09IDApCiAJCXJldHVybjsKIAotLSAKMi4zOS4yCgo= --------------I0sOP06nGF47Uy5pyVxGQ0NA--