<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>154852</bug_id>
          
          <creation_ts>2016-03-01 04:05:20 -0800</creation_ts>
          <short_desc>NetworkCache: Web process leaks resource buffer when using shareable reasources</short_desc>
          <delta_ts>2016-03-01 23:11:11 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit2</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>152316</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>agomez</cc>
    
    <cc>ap</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1169410</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-03-01 04:05:20 -0800</bug_when>
    <thetext>This is causing us running out of fds when using a web process limit of one after long time running, since we never release the shareable resources.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169414</commentid>
    <comment_count>1</comment_count>
      <attachid>272558</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-03-01 04:10:56 -0800</bug_when>
    <thetext>Created attachment 272558
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169437</commentid>
    <comment_count>2</comment_count>
      <attachid>272558</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-01 08:33:56 -0800</bug_when>
    <thetext>Comment on attachment 272558
Patch

Better still to replace PassRefPtr with RefPtr&amp;&amp; or Ref&amp;&amp;, but I’m sure someone will come along to do that later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169449</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-03-01 08:58:09 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 272558 [details]
&gt; Patch
&gt; 
&gt; Better still to replace PassRefPtr with RefPtr&amp;&amp; or Ref&amp;&amp;, but I’m sure
&gt; someone will come along to do that later.

I thought about that, there&apos;s tricky part in SubresourceLoader::didReceiveDataOrBuffer that calls ResourceLoader::didReceiveDataOrBuffer, but yes, it can be done. I decided to leave that for a follow up patch, to ensure the leak is fixed first.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169467</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-03-01 09:42:35 -0800</bug_when>
    <thetext>Committed r197402: &lt;http://trac.webkit.org/changeset/197402&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169745</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2016-03-01 22:39:59 -0800</bug_when>
    <thetext>I can see how this avoids refcount churn, however I don&apos;t see how this can fix a leak. What am I missing?

+        ResourceLoader::didReceiveBuffer() expects a PassRefPtr, but we
+        are passing a raw pointer making PassRefPtr to take another
+        reference instead of transfering the ownership as expected.

This was compensated by the original RefPtr still having a pointer to the object, so there was also one more deref().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1169765</commentid>
    <comment_count>6</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-03-01 23:11:11 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I can see how this avoids refcount churn, however I don&apos;t see how this can
&gt; fix a leak. What am I missing?
&gt; 
&gt; +        ResourceLoader::didReceiveBuffer() expects a PassRefPtr, but we
&gt; +        are passing a raw pointer making PassRefPtr to take another
&gt; +        reference instead of transfering the ownership as expected.
&gt; 
&gt; This was compensated by the original RefPtr still having a pointer to the
&gt; object, so there was also one more deref().

hmm, you are indeed right. When passing the raw pointer, the PassRefPtr takes another ref but the original RefPtr releases its own when didReceiveResource() finishes. I was doing a lot of tests and didn&apos;t see any ShareableResource freed before applying this patch, but I guess I didn&apos;t disable the memory cache either. So, maybe there&apos;s no leak but when using a single web process we end up with a lot of resources cached in memory keeping their fds alive. We might consider copying the data in the web process and releasing the mmap.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272558</attachid>
            <date>2016-03-01 04:10:56 -0800</date>
            <delta_ts>2016-03-01 08:33:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-shareable-resources-leaked.diff</filename>
            <type>text/plain</type>
            <size>1736</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiMjE4ODFmLi45OWM4ZWJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMTkg
QEAKIDIwMTYtMDMtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIE5ldHdvcmtDYWNoZTogV2ViIHByb2Nlc3MgbGVha3MgcmVzb3VyY2UgYnVm
ZmVyIHdoZW4gdXNpbmcgc2hhcmVhYmxlIHJlYXNvdXJjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDg1MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlc291cmNlTG9hZGVyOjpkaWRSZWNlaXZlQnVm
ZmVyKCkgZXhwZWN0cyBhIFBhc3NSZWZQdHIsIGJ1dCB3ZQorICAgICAgICBhcmUgcGFzc2luZyBh
IHJhdyBwb2ludGVyIG1ha2luZyBQYXNzUmVmUHRyIHRvIHRha2UgYW5vdGhlcgorICAgICAgICBy
ZWZlcmVuY2UgaW5zdGVhZCBvZiB0cmFuc2ZlcmluZyB0aGUgb3duZXJzaGlwIGFzIGV4cGVjdGVk
LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVSZXNvdXJjZSk6
CisKKzIwMTYtMDMtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCiAgICAgICAgIFVucmV2aWV3ZWQuIFVwZGF0ZSBPcHRpb25zR1RLLmNtYWtlIGFuZCBORVdT
IGZvciAyLjExLjkxIHJlbGVhc2UuCiAKICAgICAgICAgKiBndGsvTkVXUzogQWRkIHJlbGVhc2Ug
bm90ZXMgZm9yIDIuMTEuOTEuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L05ldHdvcmsvV2ViUmVzb3VyY2VMb2FkZXIuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9OZXR3b3JrL1dlYlJlc291cmNlTG9hZGVyLmNwcAppbmRleCBkNGVlNzI0Li4yYTBmNTU5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL05ldHdvcmsvV2ViUmVzb3VyY2VM
b2FkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTmV0d29yay9XZWJSZXNv
dXJjZUxvYWRlci5jcHAKQEAgLTE5NCw4ICsxOTQsOCBAQCB2b2lkIFdlYlJlc291cmNlTG9hZGVy
OjpkaWRSZWNlaXZlUmVzb3VyY2UoY29uc3QgU2hhcmVhYmxlUmVzb3VyY2U6OkhhbmRsZSYgaGFu
ZAogICAgIFJlZjxXZWJSZXNvdXJjZUxvYWRlcj4gcHJvdGVjdCgqdGhpcyk7CiAKICAgICAvLyBP
bmx5IHNlbmQgZGF0YSB0byB0aGUgZGlkUmVjZWl2ZURhdGEgY2FsbGJhY2sgaWYgaXQgZXhpc3Rz
LgotICAgIGlmIChidWZmZXItPnNpemUoKSkKLSAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRSZWNl
aXZlQnVmZmVyKGJ1ZmZlci5nZXQoKSwgYnVmZmVyLT5zaXplKCksIERhdGFQYXlsb2FkV2hvbGVS
ZXNvdXJjZSk7CisgICAgaWYgKHVuc2lnbmVkIGJ1ZmZlclNpemUgPSBidWZmZXItPnNpemUoKSkK
KyAgICAgICAgbV9jb3JlTG9hZGVyLT5kaWRSZWNlaXZlQnVmZmVyKGJ1ZmZlci5yZWxlYXNlKCks
IGJ1ZmZlclNpemUsIERhdGFQYXlsb2FkV2hvbGVSZXNvdXJjZSk7CiAKICAgICBpZiAoIW1fY29y
ZUxvYWRlcikKICAgICAgICAgcmV0dXJuOwo=
</data>
<flag name="review"
          id="297325"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>