<?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>131747</bug_id>
          
          <creation_ts>2014-04-16 11:03:42 -0700</creation_ts>
          <short_desc>Crash in CodeBlock::setOptimizationThresholdBasedOnCompilationResult() when the debugger activates</short_desc>
          <delta_ts>2014-04-16 16:11:26 -0700</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="Mark Lam">mark.lam</reporter>
          <assigned_to name="Mark Lam">mark.lam</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1001226</commentid>
    <comment_count>0</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-16 11:03:42 -0700</bug_when>
    <thetext>When the debugger is about to activate (e.g. enter stepping mode), it first waits for all DFG compilations to complete.  However, when the DFG completes, if compilation is successful, it will install a new DFG codeBlock.  The CodeBlock installation process is required to register codeBlocks with the debugger.  Debugger::registerCodeBlock() will eventually call CodeBlock::addBreakpoint() and/or CodeBlock::setSteppingMode() which may jettison the DFG codeBlock that we’re trying to install.  Thereafter, chaos ensues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001227</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-16 11:04:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/16278811&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001347</commentid>
    <comment_count>2</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-16 14:57:45 -0700</bug_when>
    <thetext>Some notes about the fix I will post soon:

1. Debugger::registerCodeBlock() eventually calls:
    a. CodeBlock::addBreakpoint()
    b. CodeBlock::setSteppingMode().

    These 2 functions can jettison the code block, and this poses a problem if that happens during installation of said code block.

2. operationOptimize() will check if the debugger is stepping mode, or if the CodeBlock has any pending breakpoints before allowing a code block to be DFG compiled.

    If the base code block already has breakpoints enabled in it, we&apos;ll never optimize that code block, and hence, we&apos;ll never get to the scenario where we&apos;ll jettison the DFG code block for the reason of it having active breakpoints.

    If the debugger is already in stepping mode, we&apos;ll never optimize that code block, and hence, we&apos;ll never get to the scenario where we&apos;ll jettison the DFG code block for the reason of the debugger being in stepping mode.

    Which leaves ... 

3. What happens if a DFG compilation is already in progress in a compiler thread and the debugger switches to stepping mode.

    The debugger is supposed to wait for all compilations to complete before switching to stepping mode.  However, currently, the debugger is setting the stepping mode flag before compilation completes.  This is the root cause of this bug.

4. What happens if a DFG compilation is already in progress in a compiler thread and the debugger adds a new breakpoint to the function for that code block.

    The debugger is supposed to wait for all compilations to complete before it applies the new breakpoint to the code blocks.  And the debugger does behave correctly here (in Debugger::toggleBreakpoint()).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001359</commentid>
    <comment_count>3</comment_count>
      <attachid>229486</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-16 15:20:13 -0700</bug_when>
    <thetext>Created attachment 229486
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001367</commentid>
    <comment_count>4</comment_count>
      <attachid>229486</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2014-04-16 15:43:35 -0700</bug_when>
    <thetext>Comment on attachment 229486
the patch

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

&gt; Source/JavaScriptCore/debugger/Debugger.cpp:250
&gt; +    // FIXME: We should never have to jettison a code block (due to pending breakpoints
&gt; +    // or stepping mode) that is being registered. operationOptimize() should have
&gt; +    // prevented the optimizing of such code blocks in the first place. Find a way to
&gt; +    // express this with greater clarity in the code.

Can you file a bugzilla bug for this and reference it here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001373</commentid>
    <comment_count>5</comment_count>
      <attachid>229490</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-16 15:50:31 -0700</bug_when>
    <thetext>Created attachment 229490
patch 2: with bug for fixme.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1001382</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2014-04-16 16:11:26 -0700</bug_when>
    <thetext>Landed in r167396: &lt;http://trac.webkit.org/r167396&gt;.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229486</attachid>
            <date>2014-04-16 15:20:13 -0700</date>
            <delta_ts>2014-04-16 15:50:31 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>bug-131747.patch</filename>
            <type>text/plain</type>
            <size>2667</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3MzkwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE0LTA0LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
cmFzaCBpbiBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdCgpIHdoZW4gdGhlIGRlYnVnZ2VyIGFjdGl2YXRlcy4KKyAgICAgICAgPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEzMTc0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIHRoZSBkZWJ1Z2dlciBpcyBhYm91dCB0byBhY3RpdmF0ZSAo
ZS5nLiBlbnRlciBzdGVwcGluZyBtb2RlKSwgaXQgZmlyc3QKKyAgICAgICAgd2FpdHMgZm9yIGFs
bCBERkcgY29tcGlsYXRpb25zIHRvIGNvbXBsZXRlLiAgSG93ZXZlciwgd2hlbiB0aGUgREZHIGNv
bXBsZXRlcywKKyAgICAgICAgaWYgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgaXQgd2lsbCBp
bnN0YWxsIGEgbmV3IERGRyBjb2RlQmxvY2suICBUaGUKKyAgICAgICAgQ29kZUJsb2NrIGluc3Rh
bGxhdGlvbiBwcm9jZXNzIGlzIHJlcXVpcmVkIHRvIHJlZ2lzdGVyIGNvZGVCbG9ja3Mgd2l0aCB0
aGUKKyAgICAgICAgZGVidWdnZXIuICBEZWJ1Z2dlcjo6cmVnaXN0ZXJDb2RlQmxvY2soKSB3aWxs
IGV2ZW50dWFsbHkgY2FsbAorICAgICAgICBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZSgpIHdo
aWNoIG1heSBqZXR0aXNvbiB0aGUgREZHIGNvZGVCbG9jayB0aGF0IHdlJ3JlCisgICAgICAgIHRy
eWluZyB0byBpbnN0YWxsLiAgVGhlcmVhZnRlciwgY2hhb3MgZW5zdWVzLgorCisgICAgICAgIFRo
aXMgamV0dGlzb24naW5nIG9ubHkgaGFwcGVucyBiZWNhdXNlIHRoZSBkZWJ1Z2dlciBjdXJyZW50
bHkgc2V0IGl0cworICAgICAgICBtX3N0ZXBwaW5nTW9kZSBmbGFnIGJlZm9yZSB3YWl0aW5nIGZv
ciBjb21waWxhdGlvbiB0byBjb21wbGV0ZS4gIFRoZSBmaXggaXMKKyAgICAgICAgc2ltcGx5IHRv
IHNldCB0aGF0IGZsYWcgb25seSBhZnRlciBjb21waWxhdGlvbiBpcyBjb21wbGV0ZS4KKworICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnNl
dFN0ZXBwaW5nTW9kZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9j
ayk6CisKIDIwMTQtMDQtMTYgIHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+
CiAKICAgICAgICAgRml4IEpTQyBEZWJ1ZyBSZWdyZXNzaW9ucyBvbiBXaW5kb3dzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE2
NzI2MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMiwxOCArMjMyLDIyIEBAIHByaXZhdGU6CiAKIHZvaWQgRGVidWdn
ZXI6OnNldFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUgbW9kZSkKIHsKLSAgICBpZiAobW9kZSA9
PSBtX3N0ZXBwaW5nTW9kZSkKKyAgICBpZiAobW9kZSA9PSBtX3N0ZXBwaW5nTW9kZSB8fCAhbV92
bSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKIAotICAgIGlm
ICghbV92bSkKLSAgICAgICAgcmV0dXJuOworICAgIG1fdm0tPndhaXRGb3JDb21waWxhdGlvbnNU
b0NvbXBsZXRlKCk7CisKKyAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7CiAgICAgU2V0U3RlcHBp
bmdNb2RlRnVuY3RvciBmdW5jdG9yKHRoaXMsIG1vZGUpOwotICAgIGZvckVhY2hDb2RlQmxvY2so
ZnVuY3Rvcik7CisgICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwogfQog
CiB2b2lkIERlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8gamV0dGlzb24gYSBjb2Rl
IGJsb2NrIChkdWUgdG8gcGVuZGluZyBicmVha3BvaW50cworICAgIC8vIG9yIHN0ZXBwaW5nIG1v
ZGUpIHRoYXQgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gb3BlcmF0aW9uT3B0aW1pemUoKSBzaG91bGQg
aGF2ZQorICAgIC8vIHByZXZlbnRlZCB0aGUgb3B0aW1pemluZyBvZiBzdWNoIGNvZGUgYmxvY2tz
IGluIHRoZSBmaXJzdCBwbGFjZS4gRmluZCBhIHdheSB0bworICAgIC8vIGV4cHJlc3MgdGhpcyB3
aXRoIGdyZWF0ZXIgY2xhcml0eSBpbiB0aGUgY29kZS4KICAgICBhcHBseUJyZWFrcG9pbnRzKGNv
ZGVCbG9jayk7CiAgICAgaWYgKGlzU3RlcHBpbmcoKSkKICAgICAgICAgY29kZUJsb2NrLT5zZXRT
dGVwcGluZ01vZGUoQ29kZUJsb2NrOjpTdGVwcGluZ01vZGVFbmFibGVkKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>229490</attachid>
            <date>2014-04-16 15:50:31 -0700</date>
            <delta_ts>2014-04-16 15:59:06 -0700</delta_ts>
            <desc>patch 2: with bug for fixme.</desc>
            <filename>bug-131747.patch</filename>
            <type>text/plain</type>
            <size>2701</size>
            <attacher name="Mark Lam">mark.lam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTY3MzkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE0LTA0LTE2ICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KKworICAgICAgICBD
cmFzaCBpbiBDb2RlQmxvY2s6OnNldE9wdGltaXphdGlvblRocmVzaG9sZEJhc2VkT25Db21waWxh
dGlvblJlc3VsdCgpIHdoZW4gdGhlIGRlYnVnZ2VyIGFjdGl2YXRlcy4KKyAgICAgICAgPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEzMTc0Nz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBXaGVuIHRoZSBkZWJ1Z2dlciBpcyBhYm91dCB0byBhY3RpdmF0ZSAo
ZS5nLiBlbnRlciBzdGVwcGluZyBtb2RlKSwgaXQgZmlyc3QKKyAgICAgICAgd2FpdHMgZm9yIGFs
bCBERkcgY29tcGlsYXRpb25zIHRvIGNvbXBsZXRlLiAgSG93ZXZlciwgd2hlbiB0aGUgREZHIGNv
bXBsZXRlcywKKyAgICAgICAgaWYgY29tcGlsYXRpb24gaXMgc3VjY2Vzc2Z1bCwgaXQgd2lsbCBp
bnN0YWxsIGEgbmV3IERGRyBjb2RlQmxvY2suICBUaGUKKyAgICAgICAgQ29kZUJsb2NrIGluc3Rh
bGxhdGlvbiBwcm9jZXNzIGlzIHJlcXVpcmVkIHRvIHJlZ2lzdGVyIGNvZGVCbG9ja3Mgd2l0aCB0
aGUKKyAgICAgICAgZGVidWdnZXIuICBEZWJ1Z2dlcjo6cmVnaXN0ZXJDb2RlQmxvY2soKSB3aWxs
IGV2ZW50dWFsbHkgY2FsbAorICAgICAgICBDb2RlQmxvY2s6OnNldFN0ZXBwaW5nTW9kZSgpIHdo
aWNoIG1heSBqZXR0aXNvbiB0aGUgREZHIGNvZGVCbG9jayB0aGF0IHdlJ3JlCisgICAgICAgIHRy
eWluZyB0byBpbnN0YWxsLiAgVGhlcmVhZnRlciwgY2hhb3MgZW5zdWVzLgorCisgICAgICAgIFRo
aXMgamV0dGlzb24naW5nIG9ubHkgaGFwcGVucyBiZWNhdXNlIHRoZSBkZWJ1Z2dlciBjdXJyZW50
bHkgc2V0IGl0cworICAgICAgICBtX3N0ZXBwaW5nTW9kZSBmbGFnIGJlZm9yZSB3YWl0aW5nIGZv
ciBjb21waWxhdGlvbiB0byBjb21wbGV0ZS4gIFRoZSBmaXggaXMKKyAgICAgICAgc2ltcGx5IHRv
IHNldCB0aGF0IGZsYWcgb25seSBhZnRlciBjb21waWxhdGlvbiBpcyBjb21wbGV0ZS4KKworICAg
ICAgICAqIGRlYnVnZ2VyL0RlYnVnZ2VyLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXI6OnNl
dFN0ZXBwaW5nTW9kZSk6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9j
ayk6CisKIDIwMTQtMDQtMTYgIHBlYXZvQG91dGxvb2suY29tICA8cGVhdm9Ab3V0bG9vay5jb20+
CiAKICAgICAgICAgRml4IEpTQyBEZWJ1ZyBSZWdyZXNzaW9ucyBvbiBXaW5kb3dzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHJldmlzaW9uIDE2
NzM5MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTIzMiwxOCArMjMyLDIyIEBAIHByaXZhdGU6CiAKIHZvaWQgRGVidWdn
ZXI6OnNldFN0ZXBwaW5nTW9kZShTdGVwcGluZ01vZGUgbW9kZSkKIHsKLSAgICBpZiAobW9kZSA9
PSBtX3N0ZXBwaW5nTW9kZSkKKyAgICBpZiAobW9kZSA9PSBtX3N0ZXBwaW5nTW9kZSB8fCAhbV92
bSkKICAgICAgICAgcmV0dXJuOwotICAgIG1fc3RlcHBpbmdNb2RlID0gbW9kZTsKIAotICAgIGlm
ICghbV92bSkKLSAgICAgICAgcmV0dXJuOworICAgIG1fdm0tPndhaXRGb3JDb21waWxhdGlvbnNU
b0NvbXBsZXRlKCk7CisKKyAgICBtX3N0ZXBwaW5nTW9kZSA9IG1vZGU7CiAgICAgU2V0U3RlcHBp
bmdNb2RlRnVuY3RvciBmdW5jdG9yKHRoaXMsIG1vZGUpOwotICAgIGZvckVhY2hDb2RlQmxvY2so
ZnVuY3Rvcik7CisgICAgbV92bS0+aGVhcC5mb3JFYWNoQ29kZUJsb2NrKGZ1bmN0b3IpOwogfQog
CiB2b2lkIERlYnVnZ2VyOjpyZWdpc3RlckNvZGVCbG9jayhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
IHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIG5ldmVyIGhhdmUgdG8gamV0dGlzb24gYSBjb2Rl
IGJsb2NrIChkdWUgdG8gcGVuZGluZyBicmVha3BvaW50cworICAgIC8vIG9yIHN0ZXBwaW5nIG1v
ZGUpIHRoYXQgaXMgYmVpbmcgcmVnaXN0ZXJlZC4gb3BlcmF0aW9uT3B0aW1pemUoKSBzaG91bGQg
aGF2ZQorICAgIC8vIHByZXZlbnRlZCB0aGUgb3B0aW1pemluZyBvZiBzdWNoIGNvZGUgYmxvY2tz
IGluIHRoZSBmaXJzdCBwbGFjZS4gRmluZCBhIHdheSB0bworICAgIC8vIGV4cHJlc3MgdGhpcyB3
aXRoIGdyZWF0ZXIgY2xhcml0eSBpbiB0aGUgY29kZS4gU2VlIDxodHRwczovL3dlYmtpdC5vcmcv
YjEzMTc3MT4uCiAgICAgYXBwbHlCcmVha3BvaW50cyhjb2RlQmxvY2spOwogICAgIGlmIChpc1N0
ZXBwaW5nKCkpCiAgICAgICAgIGNvZGVCbG9jay0+c2V0U3RlcHBpbmdNb2RlKENvZGVCbG9jazo6
U3RlcHBpbmdNb2RlRW5hYmxlZCk7Cg==
</data>
<flag name="review"
          id="253863"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>