<?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>106830</bug_id>
          
          <creation_ts>2013-01-14 14:46:29 -0800</creation_ts>
          <short_desc>Use MADV_FREE_REUSABLE to return JIT memory to OS</short_desc>
          <delta_ts>2013-01-16 10:32:02 -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>JavaScriptCore</component>
          <version>528+ (Nightly 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Pratik Solanki">psolanki</reporter>
          <assigned_to name="Pratik Solanki">psolanki</assigned_to>
          <cc>barraclough</cc>
    
    <cc>dglazkov</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>oliver</cc>
    
    <cc>psolanki</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>806649</commentid>
    <comment_count>0</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-14 14:46:29 -0800</bug_when>
    <thetext>On OS X versions that support it, use MADV_FREE_REUSABLE to return JIT memory back to OS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806651</commentid>
    <comment_count>1</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-14 14:46:59 -0800</bug_when>
    <thetext>&lt;rdar://problem/11437701&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806653</commentid>
    <comment_count>2</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-14 14:49:03 -0800</bug_when>
    <thetext>This basically undoes &lt;http://trac.webkit.org/changeset/116593&gt; made in &lt;http://bugs.webkit.org/show_bug.cgi?id=86047&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806655</commentid>
    <comment_count>3</comment_count>
      <attachid>182632</attachid>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-14 14:52:31 -0800</bug_when>
    <thetext>Created attachment 182632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806752</commentid>
    <comment_count>4</comment_count>
      <attachid>182632</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-01-14 16:30:07 -0800</bug_when>
    <thetext>Comment on attachment 182632
Patch

Attachment 182632 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/15867662

New failing tests:
inspector-protocol/debugger-terminate-dedicated-worker-while-paused.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>806911</commentid>
    <comment_count>5</comment_count>
      <attachid>182632</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-14 19:42:12 -0800</bug_when>
    <thetext>Comment on attachment 182632
Patch

Thanks for tackling this.

This patch has a bug: notifyNeedPage() forgets to MADV_FREE_REUSE.

Let me suggest another approach, which also fixes the bug:

(a) Make a USE(MADV_FREE_FOR_JIT_MEMORY) Platform.h #define, with a comment about MADV_FREE_REUSABLE not working on older OS&apos;s.
(b) Set that to true on older OS&apos;s
(c) Change &quot;#if OS(DARWIN)&quot; to &quot;#if USE(MADV_FREE_FOR_JIT_MEMORY)&quot; in this file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807563</commentid>
    <comment_count>6</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-15 12:26:54 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 182632 [details])
&gt; Thanks for tackling this.
&gt; 
&gt; This patch has a bug: notifyNeedPage() forgets to MADV_FREE_REUSE.

Good catch. I&apos;ll fix this.

&gt; Let me suggest another approach, which also fixes the bug:
&gt; 
&gt; (a) Make a USE(MADV_FREE_FOR_JIT_MEMORY) Platform.h #define, with a comment about MADV_FREE_REUSABLE not working on older OS&apos;s.
&gt; (b) Set that to true on older OS&apos;s
&gt; (c) Change &quot;#if OS(DARWIN)&quot; to &quot;#if USE(MADV_FREE_FOR_JIT_MEMORY)&quot; in this file.

Generally, I hate adding more ifdefs to Platform.h since they cause full world builds. And in this case it feels even more painful since the ifdef will be used only in one source file. Do we have a precedent for using #if local to just one source file? Otherwise I can add it in Platform.h like you suggest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807616</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-15 13:03:00 -0800</bug_when>
    <thetext>&gt; Generally, I hate adding more ifdefs to Platform.h since they cause full world builds. And in this case it feels even more painful since the ifdef will be used only in one source file. Do we have a precedent for using #if local to just one source file?

I think putting the #if inside this file, instead of Platform.h, is probably fine in this case. There&apos;s a small precedent for that in FastMalloc.cpp. (Once things start to span multiple files, Platform.h is probably best, to avoid surprises.)

Also, let&apos;s USE(MADV_FREE_FOR_JIT_MEMORY) for PLATFORM(IOS) as well, as we discussed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807755</commentid>
    <comment_count>8</comment_count>
      <attachid>182859</attachid>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-15 15:38:21 -0800</bug_when>
    <thetext>Created attachment 182859
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807841</commentid>
    <comment_count>9</comment_count>
      <attachid>182859</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-15 17:20:22 -0800</bug_when>
    <thetext>Comment on attachment 182859
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>807851</commentid>
    <comment_count>10</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-15 17:35:04 -0800</bug_when>
    <thetext>Committed r139812: &lt;http://trac.webkit.org/changeset/139812&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808424</commentid>
    <comment_count>11</comment_count>
      <attachid>182859</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-01-16 09:18:22 -0800</bug_when>
    <thetext>Comment on attachment 182859
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=182859&amp;action=review

&gt; Source/JavaScriptCore/jit/ExecutableAllocatorFixedVMPool.cpp:44
&gt; +// MADV_FREE_REUSABLE does not work for JIT memory on older OSes so use MADV_FREE in that case.

I don’t understand the mention of MADV_FREE_REUSABLE here. I don’t see any code in this file using MADV_FREE_REUSABLE!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808435</commentid>
    <comment_count>12</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-01-16 09:39:47 -0800</bug_when>
    <thetext>&gt; I don’t understand the mention of MADV_FREE_REUSABLE here. I don’t see any code in this file using MADV_FREE_REUSABLE!

MADV_FREE_REUSABLE is the default implementation of PageReservation::commit() and PageReservation::decommit(). Maybe the #ifdef should have been about those functions instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>808504</commentid>
    <comment_count>13</comment_count>
    <who name="Pratik Solanki">psolanki</who>
    <bug_when>2013-01-16 10:32:02 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; I don’t understand the mention of MADV_FREE_REUSABLE here. I don’t see any code in this file using MADV_FREE_REUSABLE!
&gt; 
&gt; MADV_FREE_REUSABLE is the default implementation of PageReservation::commit() and PageReservation::decommit(). Maybe the #ifdef should have been about those functions instead.

Thats right. I guess the comment could have been clearer. Maybe something like

&quot;PageReservation::decommit() uses MADV_FREE_REUSABLE which does not work with JIT memory on older OSes. Use MADV_FREE in such cases.&quot;

I can make that change if that sounds good.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182632</attachid>
            <date>2013-01-14 14:52:31 -0800</date>
            <delta_ts>2013-01-15 12:27:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106830-20130114144932.patch</filename>
            <type>text/plain</type>
            <size>1681</size>
            <attacher name="Pratik Solanki">psolanki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5NjY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
OTk3MGI3ZTAwMTQ5NjNjYWI4YjAyMWIzYWZjOGE2NGRhNTVjMjcxLi5mMTU1MDkyODkyODM4Y2Zm
MDgzYmZkMjNkMjEwNjFkOGEyN2RlMWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMy0wMS0xNCAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5j
b20+CisKKyAgICAgICAgVXNlIE1BRFZfRlJFRV9SRVVTQUJMRSB0byByZXR1cm4gSklUIG1lbW9y
eSB0byBPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2ODMwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQzNzcwMT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgTUFEVl9GUkVFX1JFVVNBQkxF
IHRvIHJldHVybiBKSVQgbWVtb3J5IG9uIE9TZXMgdGhhdCBoYXZlIHRoZQorICAgICAgICB1bmRl
cmx5aW5nIG1hZHZpc2UgYnVnIGZpeGVkLgorCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6bm90aWZ5UGFnZUlzRnJlZSk6CisKIDIwMTMtMDEtMTMgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgcGhhc2VzIHRoYXQgc3RvcmUgcGVy
LW5vZGUgaW5mb3JtYXRpb24gc2hvdWxkIHN0b3JlIGl0IGluIE5vZGUgaXRzZWxmIHJhdGhlciB0
aGFuIHVzaW5nIGEgc2Vjb25kYXJ5IHZlY3RvcgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRWTVBvb2wuY3BwCmluZGV4
IDdlZTNlMDQ5N2IxODAxYzhmZTQ1ZmY3Yzg2YzZiODYxMjEyYWQ2M2UuLjhiY2VlNTFmZWJhYTBk
YmRjNTMwMzEyMTM4ZWUxYzZiNjk0NjVmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvckZpeGVkVk1Qb29sLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhlZFZNUG9vbC5jcHAKQEAg
LTg1LDcgKzg1LDExIEBAIHByb3RlY3RlZDoKICAgICB7CiAjaWYgT1MoREFSV0lOKQogICAgICAg
ICBmb3IgKDs7KSB7CisjaWYgUExBVEZPUk0oTUFDKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlO
X1JFUVVJUkVEID49IDEwOTAKKyAgICAgICAgICAgIGludCByZXN1bHQgPSBtYWR2aXNlKHBhZ2Us
IHBhZ2VTaXplKCksIE1BRFZfRlJFRV9SRVVTQUJMRSk7CisjZWxzZQogICAgICAgICAgICAgaW50
IHJlc3VsdCA9IG1hZHZpc2UocGFnZSwgcGFnZVNpemUoKSwgTUFEVl9GUkVFKTsKKyNlbmRpZgog
ICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdCA9PSAtMSk7Cg==
</data>
<flag name="review"
          id="200715"
          type_id="1"
          status="-"
          setter="ggaren"
    />
    <flag name="commit-queue"
          id="200748"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>182859</attachid>
            <date>2013-01-15 15:38:21 -0800</date>
            <delta_ts>2013-01-16 09:18:22 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-106830-20130115153524.patch</filename>
            <type>text/plain</type>
            <size>2067</size>
            <attacher name="Pratik Solanki">psolanki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM5Nzk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
OTA2MDk5YmMxZTgxY2FiODlhZWJkNzc1YzZmNTQ3NjQ1NzI4NzMxLi4yNjJiMDQ3ZmZkYWRjNGQz
MmY1ODI4YTIyNGE1NWYyMmUwYWI5YTdkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAxMy0wMS0xNSAgUHJhdGlrIFNvbGFua2kgIDxwc29sYW5raUBhcHBsZS5j
b20+CisKKyAgICAgICAgVXNlIE1BRFZfRlJFRV9SRVVTQUJMRSB0byByZXR1cm4gSklUIG1lbW9y
eSB0byBPUworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTA2ODMwCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8xMTQzNzcwMT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgTUFEVl9GUkVFX1JFVVNBQkxF
IHRvIHJldHVybiBKSVQgbWVtb3J5IG9uIE9TZXMgdGhhdCBoYXZlIHRoZSB1bmRlcmx5aW5nIG1h
ZHZpc2UgYnVnCisgICAgICAgIGZpeGVkLgorCisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxv
Y2F0b3JGaXhlZFZNUG9vbC5jcHA6CisgICAgICAgIChKU0M6OkZpeGVkVk1Qb29sRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6bm90aWZ5UGFnZUlzRnJlZSk6CisKIDIwMTMtMDEtMTUgIFphbiBEb2JlcnNl
ayAgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KIAogICAgICAgICBbQXV0b3Rvb2xzXSBVbmlmeSBK
YXZhU2NyaXB0Q29yZSBzb3VyY2VzIGxpc3QsIHJlZ2FyZGxlc3Mgb2YgdGFyZ2V0IE9TCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3JGaXhl
ZFZNUG9vbC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3JGaXhlZFZNUG9vbC5jcHAKaW5kZXggN2VlM2UwNDk3YjE4MDFjOGZlNDVmZjdjODZjNmI4NjEy
MTJhZDYzZS4uY2UzZGI5YWJmNGM5MDAxZjc4ODk3NTYwM2I4MGUwZTYxZjYwM2VhOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yRml4ZWRW
TVBvb2wuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvckZpeGVkVk1Qb29sLmNwcApAQCAtNDAsNiArNDAsMTEgQEAKICNpbmNsdWRlIDxzdGRpby5o
PgogI2VuZGlmCiAKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBQTEFURk9STShNQUMpICYmIF9fTUFD
X09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPCAxMDkwCisvLyBNQURWX0ZSRUVfUkVVU0FCTEUg
ZG9lcyBub3Qgd29yayBmb3IgSklUIG1lbW9yeSBvbiBvbGRlciBPU2VzIHNvIHVzZSBNQURWX0ZS
RUUgaW4gdGhhdCBjYXNlLgorI2RlZmluZSBXVEZfVVNFX01BRFZfRlJFRV9GT1JfSklUX01FTU9S
WSAxCisjZW5kaWYKKwogdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNwYWNlIEpTQyB7CkBA
IC03NCw3ICs3OSw3IEBAIHByb3RlY3RlZDoKICAgICAKICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5
TmVlZFBhZ2Uodm9pZCogcGFnZSkKICAgICB7Ci0jaWYgT1MoREFSV0lOKQorI2lmIFVTRShNQURW
X0ZSRUVfRk9SX0pJVF9NRU1PUlkpCiAgICAgICAgIFVOVVNFRF9QQVJBTShwYWdlKTsKICNlbHNl
CiAgICAgICAgIG1fcmVzZXJ2YXRpb24uY29tbWl0KHBhZ2UsIHBhZ2VTaXplKCkpOwpAQCAtODMs
NyArODgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgCiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeVBhZ2VJ
c0ZyZWUodm9pZCogcGFnZSkKICAgICB7Ci0jaWYgT1MoREFSV0lOKQorI2lmIFVTRShNQURWX0ZS
RUVfRk9SX0pJVF9NRU1PUlkpCiAgICAgICAgIGZvciAoOzspIHsKICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSBtYWR2aXNlKHBhZ2UsIHBhZ2VTaXplKCksIE1BRFZfRlJFRSk7CiAgICAgICAgICAg
ICBpZiAoIXJlc3VsdCkK
</data>
<flag name="review"
          id="201023"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>