<?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>185438</bug_id>
          
          <creation_ts>2018-05-08 11:44:08 -0700</creation_ts>
          <short_desc>Deferred firing of structure transition watchpoints is racy</short_desc>
          <delta_ts>2018-07-17 18:58:46 -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>WebKit 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="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1421851</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-05-08 11:44:08 -0700</bug_when>
    <thetext>Currently, the RAII DeferredStructureTransitionWatchpointFire class will fire deferred watchpoints when processing the destructor.  Suppose that another thread is compiling code wants to see that the transition watchpoint has fired, by seeing that they are invalidated.  Given that the compilation occurs on separate threads and the code executing the watchpoint transition may block on GC or for other reasons, the watchpoints won&apos;t necessarily have fired.

The watchpoint deferral needs to invalidate the watchpoints and then fire them when able.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421852</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-05-08 11:44:28 -0700</bug_when>
    <thetext>&lt;rdar://problem/39382566&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421966</commentid>
    <comment_count>2</comment_count>
      <attachid>339886</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-05-08 15:07:47 -0700</bug_when>
    <thetext>Created attachment 339886
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421981</commentid>
    <comment_count>3</comment_count>
      <attachid>339886</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2018-05-08 15:34:35 -0700</bug_when>
    <thetext>Comment on attachment 339886
Patch

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

r=me

Seems reasonable. Can you add a test even if it&apos;s racy?

&gt; Source/JavaScriptCore/bytecode/Watchpoint.cpp:101
&gt; +    m_state = IsInvalidated; // Do after moving watchpoints to deferred to transfer original.

I don&apos;t follow this comment here. Maybe:
&quot;Do after moving watchpoints to deferredWatchpoints so deferredWatchpoints gets our current state.&quot;

That said, we always know state will be IsWatched

&gt; Source/JavaScriptCore/bytecode/Watchpoint.h:332
&gt; +    void fireAll(VM&amp; vm, DeferredWatchpointFire* deferred)
&gt; +    {
&gt; +        if (isFat()) {
&gt; +            fat()-&gt;fireAll(vm, deferred);
&gt; +            return;
&gt; +        }
&gt; +        if (decodeState(m_data) == ClearWatchpoint)
&gt; +            return;
&gt; +        m_data = encodeState(IsInvalidated);
&gt; +        WTF::storeStoreFence();
&gt; +    }

Maybe this can be templatized or abstracted since it&apos;s almost identical to above fireAll?

&gt; Source/JavaScriptCore/runtime/Structure.cpp:-204
&gt; - 

please revert</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1421990</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-05-08 16:01:38 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #3)
&gt; Comment on attachment 339886 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=339886&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; I don&apos;t follow this comment here. Maybe:
&gt; &quot;Do after moving watchpoints to deferredWatchpoints so deferredWatchpoints
&gt; gets our current state.&quot;
&gt; 
&gt; That said, we always know state will be IsWatched

Updated the comment.

&gt; &gt; Source/JavaScriptCore/bytecode/Watchpoint.h:332
&gt; &gt; +    void fireAll(VM&amp; vm, DeferredWatchpointFire* deferred)
&gt; &gt; +    {
&gt; &gt; +        if (isFat()) {
&gt; &gt; +            fat()-&gt;fireAll(vm, deferred);
&gt; &gt; +            return;
&gt; &gt; +        }
&gt; &gt; +        if (decodeState(m_data) == ClearWatchpoint)
&gt; &gt; +            return;
&gt; &gt; +        m_data = encodeState(IsInvalidated);
&gt; &gt; +        WTF::storeStoreFence();
&gt; &gt; +    }
&gt; 
&gt; Maybe this can be templatized or abstracted since it&apos;s almost identical to
&gt; above fireAll?

Given all the similar fireAll() methods in both this class (InlineWatchpointSet) and WatchpointSet, that refactoring is probably done in another patch.

&gt; &gt; Source/JavaScriptCore/runtime/Structure.cpp:-204
&gt; &gt; - 
&gt; 
&gt; please revert

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1422006</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2018-05-08 16:20:35 -0700</bug_when>
    <thetext>Committed r231518: &lt;https://trac.webkit.org/changeset/231518&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1442884</commentid>
    <comment_count>6</comment_count>
      <attachid>339886</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2018-07-17 18:58:46 -0700</bug_when>
    <thetext>Comment on attachment 339886
Patch

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

&gt; Source/JavaScriptCore/bytecode/Watchpoint.h:464
&gt; +    JS_EXPORT_PRIVATE DeferredWatchpointFire(VM&amp;);

Should use explicit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339886</attachid>
            <date>2018-05-08 15:07:47 -0700</date>
            <delta_ts>2018-05-08 15:34:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>185438.patch</filename>
            <type>text/plain</type>
            <size>11672</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxNTE1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE4LTA1LTA4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIERlZmVycmVkIGZpcmluZyBvZiBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50cyBp
cyByYWN5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
ODU0MzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBD
aGFuZ2VkIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIHRvIHRha2Ug
dGhlIHdhdGNocG9pbnRzIHRvIGZpcmUKKyAgICAgICAgYW5kIGZpcmUgdGhlbSBpbiB0aGUgZGVz
dHJ1Y3Rvci4gIFdoZW4gdGhlIHdhdGNocG9pbnRzIGFyZSB0YWtlbiBmcm9tIHRoZQorICAgICAg
ICBvcmlnaW5hbCBXYXRjaHBvaW50U2V0LCB0aGF0IFdhdGNocG9pbnRTZXQgaWYgbWFya2VkIGlu
dmFsaWQuCisKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50LmNwcDoKKyAgICAgICAgKEpT
Qzo6V2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3cpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50
U2V0Ojp0YWtlKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXYXRjaHBvaW50RmlyZTo6RGVmZXJy
ZWRXYXRjaHBvaW50RmlyZSk6CisgICAgICAgIChKU0M6OkRlZmVycmVkV2F0Y2hwb2ludEZpcmU6
On5EZWZlcnJlZFdhdGNocG9pbnRGaXJlKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRXYXRjaHBv
aW50RmlyZTo6ZmlyZUFsbCk6CisgICAgICAgIChKU0M6OkRlZmVycmVkV2F0Y2hwb2ludEZpcmU6
OnRha2VXYXRjaHBvaW50c1RvRmlyZSk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5o
OgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpmaXJlQWxsKToKKyAgICAgICAgKEpTQzo6
SW5saW5lV2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6CisgICAgICAgICogcnVudGltZS9KU09iamVj
dC5jcHA6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpzZXRQcm90b3R5cGVEaXJlY3QpOgorICAg
ICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFRvRGljdGlvbmFyeSk6CisgICAgICAgICogcnVu
dGltZS9KU09iamVjdElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVj
dEludGVybmFsKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZTo6U3RydWN0dXJlKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmU6OkRlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnRGaXJlKToKKyAgICAgICAgKEpTQzo6RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmU6On5EZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Rmly
ZSk6CisgICAgICAgIChKU0M6OkRlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRG
aXJlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpkaWRUcmFuc2l0aW9u
RnJvbVRoaXNTdHJ1Y3R1cmUgY29uc3QpOgorICAgICAgICAoSlNDOjpEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZTo6YWRkKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50
aW1lL1N0cnVjdHVyZS5oOgorICAgICAgICAoSlNDOjpEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50RmlyZTo6c3RydWN0dXJlIGNvbnN0KToKKwogMjAxOC0wNS0wOCAgRXJpYyBD
YXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBDb25zZWN1dGl2ZSBt
ZXNzYWdlcyBsb2dnZWQgYXMgSlNPTiBhcmUgY29hbGVzY2VkCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuY3BwCShyZXZpc2lvbiAyMzE0OTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkyLDYgKzkyLDE2IEBAIHZvaWQgV2F0Y2hwb2ludFNldDo6ZmlyZUFsbFNsb3co
Vk0mIHZtLCAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogfQogCit2b2lkIFdhdGNocG9p
bnRTZXQ6OmZpcmVBbGxTbG93KFZNJiwgRGVmZXJyZWRXYXRjaHBvaW50RmlyZSogZGVmZXJyZWRX
YXRjaHBvaW50cykKK3sKKyAgICBBU1NFUlQoc3RhdGUoKSA9PSBJc1dhdGNoZWQpOworCisgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICBkZWZlcnJlZFdhdGNocG9pbnRzLT50YWtlV2F0
Y2hwb2ludHNUb0ZpcmUodGhpcyk7CisgICAgbV9zdGF0ZSA9IElzSW52YWxpZGF0ZWQ7IC8vIERv
IGFmdGVyIG1vdmluZyB3YXRjaHBvaW50cyB0byBkZWZlcnJlZCB0byB0cmFuc2ZlciBvcmlnaW5h
bC4KKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworfQorCiB2b2lkIFdhdGNocG9pbnRTZXQ6
OmZpcmVBbGxTbG93KFZNJiB2bSwgY29uc3QgY2hhciogcmVhc29uKQogewogICAgIGZpcmVBbGxT
bG93KHZtLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOwpAQCAtMTMzLDYgKzE0MywxNSBAQCB2
b2lkIFdhdGNocG9pbnRTZXQ6OmZpcmVBbGxXYXRjaHBvaW50cyhWCiAgICAgfQogfQogCit2b2lk
IFdhdGNocG9pbnRTZXQ6OnRha2UoV2F0Y2hwb2ludFNldCogb3RoZXIpCit7CisgICAgQVNTRVJU
KHN0YXRlKCkgPT0gQ2xlYXJXYXRjaHBvaW50KTsKKyAgICBtX3NldC50YWtlRnJvbShvdGhlci0+
bV9zZXQpOworICAgIG1fc2V0SXNOb3RFbXB0eSA9IG90aGVyLT5tX3NldElzTm90RW1wdHk7Cisg
ICAgbV9zdGF0ZSA9IG90aGVyLT5tX3N0YXRlOworICAgIG90aGVyLT5tX3NldElzTm90RW1wdHkg
PSBmYWxzZTsKK30KKwogdm9pZCBJbmxpbmVXYXRjaHBvaW50U2V0OjphZGQoV2F0Y2hwb2ludCog
d2F0Y2hwb2ludCkKIHsKICAgICBpbmZsYXRlKCktPmFkZCh3YXRjaHBvaW50KTsKQEAgLTE1OSw1
ICsxNzgsMjggQEAgdm9pZCBJbmxpbmVXYXRjaHBvaW50U2V0OjpmcmVlRmF0KCkKICAgICBmYXQo
KS0+ZGVyZWYoKTsKIH0KIAorRGVmZXJyZWRXYXRjaHBvaW50RmlyZTo6RGVmZXJyZWRXYXRjaHBv
aW50RmlyZShWTSYgdm0pCisgICAgOiBtX3ZtKHZtKQorICAgICwgbV93YXRjaHBvaW50c1RvRmly
ZShDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0RlZmVycmVkV2F0Y2hwb2ludEZpcmU6On5EZWZl
cnJlZFdhdGNocG9pbnRGaXJlKCkKK3sKK30KKwordm9pZCBEZWZlcnJlZFdhdGNocG9pbnRGaXJl
OjpmaXJlQWxsKCkKK3sKKyAgICBpZiAobV93YXRjaHBvaW50c1RvRmlyZS5zdGF0ZSgpID09IElz
V2F0Y2hlZCkKKyAgICAgICAgbV93YXRjaHBvaW50c1RvRmlyZS5maXJlQWxsKG1fdm0sICp0aGlz
KTsKK30KKwordm9pZCBEZWZlcnJlZFdhdGNocG9pbnRGaXJlOjp0YWtlV2F0Y2hwb2ludHNUb0Zp
cmUoV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHNUb0ZpcmUpCit7CisgICAgQVNTRVJUKG1fd2F0
Y2hwb2ludHNUb0ZpcmUuc3RhdGUoKSA9PSBDbGVhcldhdGNocG9pbnQpOworICAgIEFTU0VSVCh3
YXRjaHBvaW50c1RvRmlyZS0+c3RhdGUoKSA9PSBJc1dhdGNoZWQpOworICAgIG1fd2F0Y2hwb2lu
dHNUb0ZpcmUudGFrZSh3YXRjaHBvaW50c1RvRmlyZSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHJldmlzaW9uIDIzMTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRj
aHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTg5LDEwICs4OSwxMiBAQCBlbnVtIFdhdGNocG9p
bnRTdGF0ZSB7CiB9OwogCiBjbGFzcyBJbmxpbmVXYXRjaHBvaW50U2V0OworY2xhc3MgRGVmZXJy
ZWRXYXRjaHBvaW50RmlyZTsKIGNsYXNzIFZNOwogCiBjbGFzcyBXYXRjaHBvaW50U2V0IDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFdhdGNocG9pbnRTZXQ+IHsKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOworICAgIGZyaWVuZCBjbGFzcyBEZWZlcnJlZFdhdGNo
cG9pbnRGaXJlOwogcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhdGNocG9pbnRTZXQo
V2F0Y2hwb2ludFN0YXRlKTsKICAgICAKQEAgLTE1OSw2ICsxNjEsMTMgQEAgcHVibGljOgogICAg
ICAgICBmaXJlQWxsU2xvdyh2bSwgZGV0YWlsKTsKICAgICB9CiAgICAgCisgICAgdm9pZCBmaXJl
QWxsKFZNJiB2bSwgRGVmZXJyZWRXYXRjaHBvaW50RmlyZSogZGVmZXJyZWRXYXRjaHBvaW50cykK
KyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZSAhPSBJc1dhdGNoZWQpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBmaXJlQWxsU2xvdyh2bSwgZGVmZXJyZWRXYXRjaHBvaW50
cyk7CisgICAgfQorCiAgICAgdm9pZCBmaXJlQWxsKFZNJiB2bSwgY29uc3QgY2hhciogcmVhc29u
KQogICAgIHsKICAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlICE9IElzV2F0Y2hlZCkpCkBAIC0y
MDEsMTAgKzIxMCwxMiBAQCBwdWJsaWM6CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVt
cHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZmlyZUFsbFNsb3coVk0mLCBjb25zdCBGaXJlRGV0YWlsJik7IC8vIENhbGwg
b25seSBpZiB5b3UndmUgY2hlY2tlZCBpc1dhdGNoZWQuCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBmaXJlQWxsU2xvdyhWTSYsIERlZmVycmVkV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkV2F0
Y2hwb2ludHMpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmlyZUFsbFNsb3coVk0mLCBj
b25zdCBjaGFyKiByZWFzb24pOyAvLyBEaXR0by4KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBm
aXJlQWxsV2F0Y2hwb2ludHMoVk0mLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgdm9pZCB0YWtl
KFdhdGNocG9pbnRTZXQqIG90aGVyKTsKICAgICAKICAgICBmcmllbmQgY2xhc3MgSW5saW5lV2F0
Y2hwb2ludFNldDsKIApAQCAtMzA4LDYgKzMxOSwxOCBAQCBwdWJsaWM6CiAgICAgICAgIFdURjo6
c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgZmlyZUFsbChWTSYgdm0s
IERlZmVycmVkV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQorICAgIHsKKyAgICAgICAgaWYgKGlz
RmF0KCkpIHsKKyAgICAgICAgICAgIGZhdCgpLT5maXJlQWxsKHZtLCBkZWZlcnJlZCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0
YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX2Rh
dGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVkKTsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3Jl
RmVuY2UoKTsKKyAgICB9CisKICAgICB2b2lkIGludmFsaWRhdGUoVk0mIHZtLCBjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCiAgICAgewogICAgICAgICBpZiAoaXNGYXQoKSkKQEAgLTQzNSw0ICs0
NTgsMTkgQEAgcHJpdmF0ZToKICAgICB1aW50cHRyX3QgbV9kYXRhOwogfTsKIAorY2xhc3MgRGVm
ZXJyZWRXYXRjaHBvaW50RmlyZSA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShEZWZlcnJlZFdhdGNocG9pbnRGaXJlKTsKK3B1YmxpYzoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBEZWZlcnJlZFdhdGNocG9pbnRGaXJlKFZNJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgfkRlZmVycmVkV2F0Y2hwb2ludEZpcmUoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgdGFrZVdhdGNocG9pbnRzVG9GaXJlKFdhdGNocG9pbnRTZXQqKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGZpcmVBbGwoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdCBvdmVycmlkZSA9IDA7Citwcml2YXRlOgorICAgIFZNJiBtX3ZtOworICAgIFdh
dGNocG9pbnRTZXQgbV93YXRjaHBvaW50c1RvRmlyZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpT
QwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2
aXNpb24gMjMxNDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjQ3LDcgKzE2NDcsNyBAQCB2b2lkIEpTT2JqZWN0Ojpz
ZXRQcm90b3R5cGVEaXJlY3QoVk0mIHZtCiAgICAgICAgIHByb3RvdHlwZS5hc0NlbGwoKS0+ZGlk
QmVjb21lUHJvdG90eXBlKCk7CiAgICAgCiAgICAgaWYgKHN0cnVjdHVyZSh2bSktPmhhc01vbm9Q
cm90bygpKSB7Ci0gICAgICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRG
aXJlIGRlZmVycmVkOworICAgICAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSBkZWZlcnJlZCh2bSwgc3RydWN0dXJlKHZtKSk7CiAgICAgICAgIFN0cnVjdHVyZSog
bmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCBwcm90b3R5cGUsIGRlZmVycmVkKTsKICAgICAgICAgc2V0U3RydWN0dXJl
KHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIH0gZWxzZQpAQCAtMzUzNCw3ICszNTM0LDcgQEAgYm9v
bCBKU09iamVjdDo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmplYwogCiB2b2lkIEpTT2JqZWN0Ojpj
b252ZXJ0VG9EaWN0aW9uYXJ5KFZNJiB2bSkKIHsKLSAgICBEZWZlcnJlZFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRGaXJlOworICAgIERlZmVycmVk
U3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUo
dm0sIHN0cnVjdHVyZSh2bSkpOwogICAgIHNldFN0cnVjdHVyZSgKICAgICAgICAgdm0sIFN0cnVj
dHVyZTo6dG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwg
JmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyMzE0OTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0
RGlyZWN0SW4KICAgICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBv
aW50IHRvIGZpcmUgYWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRjaGVkCiAgICAgLy8gc3RydWN0
dXJlLiBUaGlzIGFsbG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0byBvYnNlcnZlIGlmIHRoZSBu
ZXcgc3RydWN0dXJlIGlzIHRoZSBvbmUKICAgICAvLyB3ZSB3YW50LgotICAgIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmU7Cisg
ICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRj
aHBvaW50RmlyZSh2bSwgc3RydWN0dXJlKTsKICAgICAKICAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1
Y3R1cmU6OmFkZE5ld1Byb3BlcnR5VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHN0cnVjdHVyZSwg
cHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJy
ZWRXYXRjaHBvaW50RmlyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZS5jcHAJKHJldmlzaW9uIDIzMTQ5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMSw3ICsyMDEsNiBA
QCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAgc2V0VHJhbnNp
dGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZChmYWxzZSk7CiAgICAgc2V0SGFzQmVlbkRp
Y3Rpb25hcnkoZmFsc2UpOwogICAgIHNldElzQWRkaW5nUHJvcGVydHlGb3JUcmFuc2l0aW9uKGZh
bHNlKTsKLSAKICAgICBBU1NFUlQoaW5saW5lQ2FwYWNpdHkgPD0gSlNGaW5hbE9iamVjdDo6bWF4
SW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PFByb3BlcnR5T2Zmc2V0
PihpbmxpbmVDYXBhY2l0eSkgPCBmaXJzdE91dE9mTGluZU9mZnNldCk7CiAgICAgQVNTRVJUKCFo
YXNSYXJlRGF0YSgpKTsKQEAgLTEwMzIsMjIgKzEwMzEsMjAgQEAgdm9pZCBTdHJ1Y3R1cmVGaXJl
RGV0YWlsOjpkdW1wKFByaW50U3RyZQogICAgIG91dC5wcmludCgiU3RydWN0dXJlIHRyYW5zaXRp
b24gZnJvbSAiLCAqbV9zdHJ1Y3R1cmUpOwogfQogCi1EZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50RmlyZTo6RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZp
cmUoKQotICAgIDogbV9zdHJ1Y3R1cmUobnVsbHB0cikKK0RlZmVycmVkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRGaXJlOjpEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50
RmlyZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQorICAgIDogRGVmZXJyZWRXYXRjaHBv
aW50RmlyZSh2bSkKKyAgICAsIG1fc3RydWN0dXJlKHN0cnVjdHVyZSkKIHsKIH0KIAogRGVmZXJy
ZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmU6On5EZWZlcnJlZFN0cnVjdHVyZVRy
YW5zaXRpb25XYXRjaHBvaW50RmlyZSgpCiB7Ci0gICAgaWYgKG1fc3RydWN0dXJlKQotICAgICAg
ICBtX3N0cnVjdHVyZS0+dHJhbnNpdGlvbldhdGNocG9pbnRTZXQoKS5maXJlQWxsKCptX3N0cnVj
dHVyZS0+dm0oKSwgU3RydWN0dXJlRmlyZURldGFpbChtX3N0cnVjdHVyZSkpOworICAgIGZpcmVB
bGwoKTsKIH0KIAotdm9pZCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50Rmly
ZTo6YWRkKGNvbnN0IFN0cnVjdHVyZSogc3RydWN0dXJlKQordm9pZCBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ewotICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0cnVjdHVyZSk7Ci0gICAgUkVMRUFTRV9BU1NFUlQo
c3RydWN0dXJlKTsKLSAgICBtX3N0cnVjdHVyZSA9IHN0cnVjdHVyZTsKKyAgICBvdXQucHJpbnQo
IlN0cnVjdHVyZSB0cmFuc2l0aW9uIGZyb20gIiwgKm1fc3RydWN0dXJlKTsKIH0KIAogdm9pZCBT
dHJ1Y3R1cmU6OmRpZFRyYW5zaXRpb25Gcm9tVGhpc1N0cnVjdHVyZShEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpIGNvbnN0CkBAIC0xMDU3LDEwICsx
MDU0LDExIEBAIHZvaWQgU3RydWN0dXJlOjpkaWRUcmFuc2l0aW9uRnJvbVRoaXNTdHIKICAgICAv
LyB1bndpc2UgdG8gd2F0Y2ggaXQuCiAgICAgaWYgKG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQu
aXNCZWluZ1dhdGNoZWQoKSkKICAgICAgICAgY29uc3RfY2FzdDxTdHJ1Y3R1cmUqPih0aGlzKS0+
c2V0VHJhbnNpdGlvbldhdGNocG9pbnRJc0xpa2VseVRvQmVGaXJlZCh0cnVlKTsKLSAgICAKLSAg
ICBpZiAoZGVmZXJyZWQpCi0gICAgICAgIGRlZmVycmVkLT5hZGQodGhpcyk7Ci0gICAgZWxzZQor
CisgICAgaWYgKGRlZmVycmVkKSB7CisgICAgICAgIEFTU0VSVChkZWZlcnJlZC0+c3RydWN0dXJl
KCkgPT0gdGhpcyk7CisgICAgICAgIG1fdHJhbnNpdGlvbldhdGNocG9pbnRTZXQuZmlyZUFsbCgq
dm0oKSwgZGVmZXJyZWQpOworICAgIH0gZWxzZQogICAgICAgICBtX3RyYW5zaXRpb25XYXRjaHBv
aW50U2V0LmZpcmVBbGwoKnZtKCksIFN0cnVjdHVyZUZpcmVEZXRhaWwodGhpcykpOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24g
MjMxNDkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTExMCwxNCArMTEwLDE2IEBAIHByaXZhdGU6CiAgICAgY29uc3QgU3Ry
dWN0dXJlKiBtX3N0cnVjdHVyZTsKIH07CiAKLWNsYXNzIERlZmVycmVkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRGaXJlIHsKK2NsYXNzIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldh
dGNocG9pbnRGaXJlIDogcHVibGljIERlZmVycmVkV2F0Y2hwb2ludEZpcmUgewogICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
KTsKIHB1YmxpYzoKLSAgICBKU19FWFBPUlRfUFJJVkFURSBEZWZlcnJlZFN0cnVjdHVyZVRyYW5z
aXRpb25XYXRjaHBvaW50RmlyZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIERlZmVycmVkU3Ry
dWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKFZNJiwgU3RydWN0dXJlKik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgfkRlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJl
KCk7CiAgICAgCi0gICAgdm9pZCBhZGQoY29uc3QgU3RydWN0dXJlKik7Ci0gICAgCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0IG92ZXJyaWRlOworCisgICAgY29uc3QgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZTsgfQorCiBwcml2
YXRlOgogICAgIGNvbnN0IFN0cnVjdHVyZSogbV9zdHJ1Y3R1cmU7CiB9Owo=
</data>
<flag name="review"
          id="358119"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>