<?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>21609</bug_id>
          
          <creation_ts>2008-10-15 05:15:06 -0700</creation_ts>
          <short_desc>Make MessagePorts protect their peers across heaps</short_desc>
          <delta_ts>2008-10-16 01:03:59 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95395</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-15 05:15:06 -0700</bug_when>
    <thetext>Each MessagePort needs to GC protect its entangled one, because even if the latter does not have a reachable wrapper, a message dispatched via the former will have a reference to it when dispatched.

This already works in the case when both wrappers are in the same JS heap, but as MessagePorts will be used for cross-thread communication, a different mechanism is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95396</commentid>
    <comment_count>1</comment_count>
      <attachid>24358</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-15 05:28:43 -0700</bug_when>
    <thetext>Created attachment 24358
proposed patch

Unfortunately, this introduces knowledge about bindings into the implementation MessagePort object. Also, I do not quite understand how this will work in presence of other bindings (currently, an ObjC binding is a stub, but it exists nonetheless).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95408</commentid>
    <comment_count>2</comment_count>
      <attachid>24358</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-10-15 09:10:09 -0700</bug_when>
    <thetext>Comment on attachment 24358
proposed patch

+ objects in the heap, makin git possible to implement cross-heap dependencies.

Misplaces space here &quot;makin git&quot;.

+ void markCrossHeapDependentObjectsForDocument(JSGlobalData&amp; globalData, Document* doc)

I&apos;m slightly annoyed that we sometimes use references and other times pointers for JSGlobalData. Which style do you think is preferred? I also prefer document as the name for a document argument rather than doc.

It&apos;s a shame that m_jsWrapperIsKnownInaccessible is such a long name, but not correct grammar. The &quot;known inaccessible&quot; part isn&apos;t good grammar. I don&apos;t have a better name to suggest, but I think it&apos;s worth pondering a little more. Maybe just &quot;KnownToBeInaccessible&quot;?

+ bool jsWrapperIsKnownInaccessible() { return m_jsWrapperIsKnownInaccessible; }

Should be const?

+    JSGlobalObject* globalObject = m_globalData-&gt;head;
+    do {
+        globalObject-&gt;markCrossHeapDependentObjects();
+        globalObject = globalObject-&gt;next();
+    } while (globalObject != m_globalData-&gt;head);

The loop is just complicated enough that I think it should either be in its own function, or paragraphed separately from the other marking work.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95516</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-10-16 01:03:59 -0700</bug_when>
    <thetext>Committed revision 37631.

(In reply to comment #2)

&gt; I&apos;m slightly annoyed that we sometimes use references and other times pointers
&gt; for JSGlobalData. Which style do you think is preferred?

I prefer references for things that can never be NULL. But that&apos;s hardly our prevailing style.

&gt; It&apos;s a shame that m_jsWrapperIsKnownInaccessible is such a long name, but not
&gt; correct grammar.

I went with m_jsWrapperIsInaccessible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24358</attachid>
            <date>2008-10-15 05:28:43 -0700</date>
            <delta_ts>2008-10-15 09:10:09 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>CrossHeapGC.txt</filename>
            <type>text/plain</type>
            <size>11425</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjAyKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMDgtMTAtMTUgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMTYwOQorICAgICAgICBNYWtlIE1lc3NhZ2VQb3J0cyBwcm90ZWN0IHRoZWlyIHBlZXJz
IGFjcm9zcyBoZWFwcworCisgICAgICAgICogSmF2YVNjcmlwdENvcmUuZXhwOgorICAgICAgICAq
IGtqcy9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0Ojpt
YXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0cyk6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2Jq
ZWN0Lmg6CisgICAgICAgICoga2pzL2NvbGxlY3Rvci5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6
OmNvbGxlY3QpOgorICAgICAgICBCZWZvcmUgR0Mgc3dlZXAgcGhhc2UsIGEgZnVuY3Rpb24gc3Vw
cGxpZWQgYnkgZ2xvYmFsIG9iamVjdCBpcyBub3cgY2FsbGVkIGZvciBhbGwgZ2xvYmFsCisgICAg
ICAgIG9iamVjdHMgaW4gdGhlIGhlYXAsIG1ha2luIGdpdCBwb3NzaWJsZSB0byBpbXBsZW1lbnQg
Y3Jvc3MtaGVhcCBkZXBlbmRlbmNpZXMuCisKIDIwMDgtMTAtMTUgIEdhYm9yIExva2kgIDxsb2tp
QGluZi51LXN6ZWdlZC5odT4KIAogICAgICAgICBSZXZpZXdlZCBieSBDYW1lcm9uIFp3YXJpY2gu
CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAzNzU4NSkKKysrIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMTQ2LDYg
KzE0Niw3IEBAIF9fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDE0c2V0VGltZW91dFRpbWUKIF9fWk4z
SlNDMTRKU0dsb2JhbE9iamVjdDE2c3RvcFRpbWVvdXRDaGVja0V2CiBfX1pOM0pTQzE0SlNHbG9i
YWxPYmplY3QxN3B1dFdpdGhBdHRyaWJ1dGVzRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlm
aWVyRVBOU183SlNWYWx1ZUVqCiBfX1pOM0pTQzE0SlNHbG9iYWxPYmplY3QxN3N0YXJ0VGltZW91
dENoZWNrRXYKK19fWk4zSlNDMTRKU0dsb2JhbE9iamVjdDI5bWFya0Nyb3NzSGVhcERlcGVuZGVu
dE9iamVjdHNFdgogX19aTjNKU0MxNEpTR2xvYmFsT2JqZWN0M3B1dEVQTlNfOUV4ZWNTdGF0ZUVS
S05TXzEwSWRlbnRpZmllckVQTlNfN0pTVmFsdWVFUk5TXzE1UHV0UHJvcGVydHlTbG90RQogX19a
TjNKU0MxNEpTR2xvYmFsT2JqZWN0NGluaXRFUE5TXzhKU09iamVjdEUKIF9fWk4zSlNDMTRKU0ds
b2JhbE9iamVjdDRtYXJrRXYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbE9iamVj
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsT2JqZWN0LmNw
cAkocmV2aXNpb24gMzc1ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTksNiArMzk5LDExIEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6Om1hcmsoKQogICAgIH0KIH0KIAordm9pZCBKU0dsb2JhbE9iamVjdDo6bWFya0Nyb3NzSGVh
cERlcGVuZGVudE9iamVjdHMoKQoreworICAgIC8vIE92ZXJyaWRkZW4gYnkgc3ViY2xhc3Nlcy4K
K30KKwogSlNHbG9iYWxPYmplY3QqIEpTR2xvYmFsT2JqZWN0Ojp0b0dsb2JhbE9iamVjdChFeGVj
U3RhdGUqKSBjb25zdAogewogICAgIHJldHVybiBjb25zdF9jYXN0PEpTR2xvYmFsT2JqZWN0Kj4o
dGhpcyk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMzc1
ODUpCisrKyBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMTU4LDYgKzE1OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIH5K
U0dsb2JhbE9iamVjdCgpOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBtYXJrKCk7CisgICAgICAg
IHZpcnR1YWwgdm9pZCBtYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0cygpOwogCiAgICAgICAg
IHZpcnR1YWwgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRp
ZmllciYsIFByb3BlcnR5U2xvdCYpOwogICAgICAgICB2aXJ0dWFsIGJvb2wgZ2V0T3duUHJvcGVy
dHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0eVNsb3QmLCBib29s
JiBzbG90SXNXcml0ZWFibGUpOwpJbmRleDogSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJKHJldmlz
aW9uIDM3NTg1KQorKysgSmF2YVNjcmlwdENvcmUva2pzL2NvbGxlY3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk4NSw2ICs5ODUsMTEgQEAgYm9vbCBIZWFwOjpjb2xsZWN0KCkKICAgICAgICAg
bV9nbG9iYWxEYXRhLT5leGNlcHRpb24tPm1hcmsoKTsKICAgICBtX2dsb2JhbERhdGEtPm1hY2hp
bmUtPnJlZ2lzdGVyRmlsZSgpLm1hcmtDYWxsRnJhbWVzKHRoaXMpOwogICAgIG1fZ2xvYmFsRGF0
YS0+c21hbGxTdHJpbmdzLm1hcmsoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
ID0gbV9nbG9iYWxEYXRhLT5oZWFkOworICAgIGRvIHsKKyAgICAgICAgZ2xvYmFsT2JqZWN0LT5t
YXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0cygpOworICAgICAgICBnbG9iYWxPYmplY3QgPSBn
bG9iYWxPYmplY3QtPm5leHQoKTsKKyAgICB9IHdoaWxlIChnbG9iYWxPYmplY3QgIT0gbV9nbG9i
YWxEYXRhLT5oZWFkKTsKIAogICAgIEpBVkFTQ1JJUFRDT1JFX0dDX01BUktFRCgpOwogCkluZGV4
OiBXZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMzc2MDIpCisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI5IEBACisyMDA4LTEwLTE1ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2MDkKKyAgICAgICAgTWFrZSBN
ZXNzYWdlUG9ydHMgcHJvdGVjdCB0aGVpciBwZWVycyBhY3Jvc3MgaGVhcHMKKworICAgICAgICAq
IGRvbS9NZXNzYWdlUG9ydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZXNzYWdlUG9ydDo6TWVz
c2FnZVBvcnQpOgorICAgICAgICAqIGRvbS9NZXNzYWdlUG9ydC5oOgorICAgICAgICAoV2ViQ29y
ZTo6TWVzc2FnZVBvcnQ6OnNldEpTV3JhcHBlcklzS25vd25JbmFjY2Vzc2libGUpOgorICAgICAg
ICAoV2ViQ29yZTo6TWVzc2FnZVBvcnQ6OmpzV3JhcHBlcklzS25vd25JbmFjY2Vzc2libGUpOgor
ICAgICAgICBUcmFjayBvYmplY3RzIHdob3NlIEpTIHdyYXBwZXJzIGFyZSBubyBsb25nZXIgcmVh
Y2hhYmxlIGluIE1lc3NhZ2VQb3J0LiBVbmZvcnR1bmF0ZWx5LCB0aGlzCisgICAgICAgIG1lYW5z
IHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIG9iamVjdCBrbm93cyBhYm91dCBKUyBiaW5kaW5ncyAt
IGJ1dCBpdCBpcyBub3QgcG9zc2libGUgdG8KKyAgICAgICAgYWNjZXNzIEpTIHdyYXBwZXJzIGZy
b20gYW5vdGhlciBoZWFwL3RocmVhZC4KKworICAgICAgICAqIGJpbmRpbmdzL2pzL0pTRE9NQmlu
ZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0
c0ZvckRvY3VtZW50KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcuaDoKKyAg
ICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SlNET01XaW5kb3dCYXNlOjptYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0cyk6CisgICAg
ICAgICogYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmg6CisgICAgICAgIEltcGxlbWVudCBj
cm9zcy1oZWFwIGRlcGVuZGVuY3kgdHJhY2tpbmcgZm9yIGVudGFuZ2xlZCBNZXNzYWdlUG9ydHMu
IElmIGEgd3JhcHBlciBvYmplY3QKKyAgICAgICAgaGFzbid0IGJlZW4gbWFya2VkIG5vcm1hbGx5
LCBpdCBpcyBtYXJrZWQgYXMgaW5hY2Nlc3NpYmxlLiBJdCBpcyB0aGVuIG1hcmtlZCBtYW51YWxs
eSwKKyAgICAgICAgYXMgbG9uZyBhcyBpdHMgZW50YW5nbGVkIHBvcnQgaXMgYWNjZXNzaWJsZSBp
dHNlbGYuCisKIDIwMDgtMTAtMDkgIERhcmluIEZpc2hlciAgPGRhcmluQGNocm9taXVtLm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTYW0gV2VpbmlnLgpJbmRleDogV2ViQ29yZS9iaW5kaW5n
cy9qcy9KU0RPTUJpbmRpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMv
SlNET01CaW5kaW5nLmNwcAkocmV2aXNpb24gMzc1ODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L0pTRE9NQmluZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2OCw2ICsyNjgsMzMgQEAgdm9p
ZCBtYXJrQWN0aXZlT2JqZWN0c0ZvckRvY3VtZW50KEpTR2xvYgogICAgIH0KIH0KIAordm9pZCBt
YXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0c0ZvckRvY3VtZW50KEpTR2xvYmFsRGF0YSYgZ2xv
YmFsRGF0YSwgRG9jdW1lbnQqIGRvYykKK3sKKyAgICBjb25zdCBIYXNoU2V0PE1lc3NhZ2VQb3J0
Kj4mIG1lc3NhZ2VQb3J0cyA9IGRvYy0+bWVzc2FnZVBvcnRzKCk7CisgICAgSGFzaFNldDxNZXNz
YWdlUG9ydCo+Ojpjb25zdF9pdGVyYXRvciBwb3J0c0VuZCA9IG1lc3NhZ2VQb3J0cy5lbmQoKTsK
KyAgICBmb3IgKEhhc2hTZXQ8TWVzc2FnZVBvcnQqPjo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1l
c3NhZ2VQb3J0cy5iZWdpbigpOyBpdGVyICE9IHBvcnRzRW5kOyArK2l0ZXIpIHsKKyAgICAgICAg
TWVzc2FnZVBvcnQqIHBvcnQgPSAqaXRlcjsKKyAgICAgICAgUmVmUHRyPE1lc3NhZ2VQb3J0PiBl
bnRhbmdsZWRQb3J0ID0gcG9ydC0+ZW50YW5nbGVkUG9ydCgpOworICAgICAgICBpZiAoZW50YW5n
bGVkUG9ydCkgeworICAgICAgICAgICAgLy8gTm8gd3JhcHBlciwgb3Igd3JhcHBlciBpcyBhbHJl
YWR5IG1hcmtlZCAtIG5vIG5lZWQgdG8gZXhhbWluZSBjcm9zcy1oZWFwIGRlcGVuZGVuY2llcy4K
KyAgICAgICAgICAgIERPTU9iamVjdCogd3JhcHBlciA9IGdldENhY2hlZERPTU9iamVjdFdyYXBw
ZXIoZ2xvYmFsRGF0YSwgcG9ydCk7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXIgfHwgd3JhcHBl
ci0+bWFya2VkKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8v
IElmIHRoZSB3cmFwcGVyIGhhc24ndCBiZWVuIG1hcmtlZCBkdXJpbmcgdGhlIG1hcmsgcGhhc2Ug
b2YgR0MsIHRoZW4gdGhlIHBvcnQgc2hvdWxkbid0IHByb3RlY3QgaXRzIGVudGFuZ2xlZCBvbmUu
CisgICAgICAgICAgICAvLyBJdCdzIGltcG9ydGFudCBub3QgdG8gY2FsbCB0aGlzIHdoZW4gdGhl
cmUgaXMgbm8gd3JhcHBlci4gRS5nLiwgaWYgR0MgaXMgdHJpZ2dlcmVkIGFmdGVyIGEgTWVzc2Fn
ZUNoYW5uZWwgaXMgY3JlYXRlZCwgYnV0IGJlZm9yZSBpdHMgcG9ydHMgYXJlIHVzZWQgZnJvbSBK
UywKKyAgICAgICAgICAgIC8vIGlycmV2ZXJzaWJseSB0ZWxsaW5nIHRoZSBvYmplY3QgdGhhdCBp
dHMgKG5vdCB5ZXQgZXhpc3RpbmcpIHdyYXBwZXIgaXMgaW5hY2Nlc3NpYmxlIHdvdWxkIGJlIHdy
b25nLiBTaW1pbGFybHksIHBvcnRzIHBvc3RlZCB2aWEgcG9zdE1lc3NhZ2UoKSBtYXkgbm90Cisg
ICAgICAgICAgICAvLyBoYXZlIHdyYXBwZXJzIHVudGlsIGRlbGl2ZXJlZC4KKyAgICAgICAgICAg
IHBvcnQtPnNldEpTV3JhcHBlcklzS25vd25JbmFjY2Vzc2libGUoKTsKKworICAgICAgICAgICAg
Ly8gSWYgdGhlIHBvcnQgaXMgcHJvdGVjdGVkIGJ5IGl0cyBlbnRhbmdsZWQgb25lLCBtYXJrIGl0
LgorICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBhdG9taWMgcmVhZCBvZiBhIGJvb2xlYW4gdmFs
dWUsIG5vIHN5bmNocm9uaXphdGlvbiBiZXR3ZWVuIHRocmVhZHMgaXMgcmVxdWlyZWQgKGF0IGxl
YXN0IG9uIHBsYXRmb3JtcyB0aGF0IGd1YXJhbnRlZSBjYWNoZSBjb2hlcmVuY3kpLgorICAgICAg
ICAgICAgaWYgKCFlbnRhbmdsZWRQb3J0LT5qc1dyYXBwZXJJc0tub3duSW5hY2Nlc3NpYmxlKCkp
CisgICAgICAgICAgICAgICAgd3JhcHBlci0+bWFyaygpOworICAgICAgICB9CisgICAgfQorfQor
CiB2b2lkIHVwZGF0ZURPTU5vZGVEb2N1bWVudChOb2RlKiBub2RlLCBEb2N1bWVudCogb2xkRG9j
dW1lbnQsIERvY3VtZW50KiBuZXdEb2N1bWVudCkKIHsKICAgICBBU1NFUlQob2xkRG9jdW1lbnQg
IT0gbmV3RG9jdW1lbnQpOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUJpbmRpbmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQmluZGluZy5oCShyZXZp
c2lvbiAzNzU4NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01CaW5kaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTY5LDYgKzY5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHZvaWQg
dXBkYXRlRE9NTm9kZURvY3VtZW50KE5vZGUqLCBEb2N1bWVudCogb2xkRG9jdW1lbnQsIERvY3Vt
ZW50KiBuZXdEb2N1bWVudCk7CiAgICAgdm9pZCBtYXJrRE9NTm9kZXNGb3JEb2N1bWVudChEb2N1
bWVudCopOwogICAgIHZvaWQgbWFya0FjdGl2ZU9iamVjdHNGb3JEb2N1bWVudChKU0M6OkpTR2xv
YmFsRGF0YSYsIERvY3VtZW50Kik7CisgICAgdm9pZCBtYXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2Jq
ZWN0c0ZvckRvY3VtZW50KEpTQzo6SlNHbG9iYWxEYXRhJiwgRG9jdW1lbnQqKTsKIAogICAgIEpT
Qzo6U3RydWN0dXJlSUQqIGdldENhY2hlZERPTVN0cnVjdHVyZShKU0M6OkV4ZWNTdGF0ZSosIGNv
bnN0IEpTQzo6Q2xhc3NJbmZvKik7CiAgICAgSlNDOjpTdHJ1Y3R1cmVJRCogY2FjaGVET01TdHJ1
Y3R1cmUoSlNDOjpFeGVjU3RhdGUqLCBQYXNzUmVmUHRyPEpTQzo6U3RydWN0dXJlSUQ+LCBjb25z
dCBKU0M6OkNsYXNzSW5mbyopOwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRv
d0Jhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dC
YXNlLmNwcAkocmV2aXNpb24gMzc1ODUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwNyw2ICs1MDcsMTUgQEAgSlNWYWx1ZSog
SlNET01XaW5kb3dCYXNlOjpuYW1lZEl0ZW1HZXR0ZQogICAgIHJldHVybiB0b0pTKGV4ZWMsIGNv
bGxlY3Rpb24uZ2V0KCkpOwogfQogCit2b2lkIEpTRE9NV2luZG93QmFzZTo6bWFya0Nyb3NzSGVh
cERlcGVuZGVudE9iamVjdHMoKQoreworICAgIERvY3VtZW50KiBkb2N1bWVudCA9IGltcGwoKS0+
ZG9jdW1lbnQoKTsKKyAgICBpZiAoIWRvY3VtZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBt
YXJrQ3Jvc3NIZWFwRGVwZW5kZW50T2JqZWN0c0ZvckRvY3VtZW50KCpnbG9iYWxEYXRhKCksIGRv
Y3VtZW50KTsKK30KKwogYm9vbCBKU0RPTVdpbmRvd0Jhc2U6OmdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlT
bG90JiBzbG90KQogewogICAgIC8vIENoZWNrIGZvciBjaGlsZCBmcmFtZXMgYnkgbmFtZSBiZWZv
cmUgYnVpbHQtaW4gcHJvcGVydGllcyB0bwpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RP
TVdpbmRvd0Jhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2lu
ZG93QmFzZS5oCShyZXZpc2lvbiAzNzU4NSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMvSlNET01X
aW5kb3dCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY0LDYgKzY0LDggQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogCiAgICAgICAgIHZvaWQgZGlzY29ubmVjdEZyYW1lKCk7CiAKKyAgICAgICAgdmly
dHVhbCB2b2lkIG1hcmtDcm9zc0hlYXBEZXBlbmRlbnRPYmplY3RzKCk7CisKICAgICAgICAgdmly
dHVhbCBib29sIGdldE93blByb3BlcnR5U2xvdChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6
SWRlbnRpZmllciYsIEpTQzo6UHJvcGVydHlTbG90Jik7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBw
dXQoSlNDOjpFeGVjU3RhdGUqLCBjb25zdCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SlNDOjpKU1ZhbHVlKiwgSlNDOjpQdXRQcm9wZXJ0eVNsb3QmKTsKIApJbmRleDogV2ViQ29yZS9k
b20vTWVzc2FnZVBvcnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0
LmNwcAkocmV2aXNpb24gMzc1ODUpCisrKyBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY4LDYgKzY4LDcgQEAgTWVzc2FnZVBvcnQ6Ok1lc3NhZ2VQb3J0KERv
Y3VtZW50KiBkb2N1bQogICAgICwgbV9xdWV1ZUlzT3BlbihmYWxzZSkKICAgICAsIG1fZG9jdW1l
bnQoZG9jdW1lbnQpCiAgICAgLCBtX3BlbmRpbmdBY3Rpdml0eSgwKQorICAgICwgbV9qc1dyYXBw
ZXJJc0tub3duSW5hY2Nlc3NpYmxlKGZhbHNlKQogewogICAgIGRvY3VtZW50LT5jcmVhdGVkTWVz
c2FnZVBvcnQodGhpcyk7CiB9CkluZGV4OiBXZWJDb3JlL2RvbS9NZXNzYWdlUG9ydC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL01lc3NhZ2VQb3J0LmgJKHJldmlzaW9uIDM3NTg1KQorKysg
V2ViQ29yZS9kb20vTWVzc2FnZVBvcnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsOCBA
QAogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL01lc3NhZ2VRdWV1ZS5o
PgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgog
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNyAr
NDUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgRnJhbWU7CiAgICAgY2xhc3Mg
U3RyaW5nOwogCi0gICAgY2xhc3MgTWVzc2FnZVBvcnQgOiBwdWJsaWMgUmVmQ291bnRlZDxNZXNz
YWdlUG9ydD4sIHB1YmxpYyBFdmVudFRhcmdldCB7CisgICAgY2xhc3MgTWVzc2FnZVBvcnQgOiBw
dWJsaWMgVGhyZWFkU2FmZVNoYXJlZDxNZXNzYWdlUG9ydD4sIHB1YmxpYyBFdmVudFRhcmdldCB7
CiAgICAgcHVibGljOgogICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxNZXNzYWdlUG9ydD4gY3Jl
YXRlKERvY3VtZW50KiBkb2N1bWVudCkgeyByZXR1cm4gYWRvcHRSZWYobmV3IE1lc3NhZ2VQb3J0
KGRvY3VtZW50KSk7IH0KICAgICAgICAgfk1lc3NhZ2VQb3J0KCk7CkBAIC04Myw4ICs4Myw4IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdHlwZWRlZiBIYXNoTWFwPEF0b21pY1N0cmlu
Z0ltcGwqLCBMaXN0ZW5lclZlY3Rvcj4gRXZlbnRMaXN0ZW5lcnNNYXA7CiAgICAgICAgIEV2ZW50
TGlzdGVuZXJzTWFwJiBldmVudExpc3RlbmVycygpIHsgcmV0dXJuIG1fZXZlbnRMaXN0ZW5lcnM7
IH0KIAotICAgICAgICB1c2luZyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0Pjo6cmVmOwotICAgICAg
ICB1c2luZyBSZWZDb3VudGVkPE1lc3NhZ2VQb3J0Pjo6ZGVyZWY7CisgICAgICAgIHVzaW5nIFRo
cmVhZFNhZmVTaGFyZWQ8TWVzc2FnZVBvcnQ+OjpyZWY7CisgICAgICAgIHVzaW5nIFRocmVhZFNh
ZmVTaGFyZWQ8TWVzc2FnZVBvcnQ+OjpkZXJlZjsKIAogICAgICAgICBib29sIGhhc1BlbmRpbmdB
Y3Rpdml0eSgpIHsgcmV0dXJuIG1fcGVuZGluZ0FjdGl2aXR5OyB9CiAKQEAgLTk0LDYgKzk0LDkg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldE9uY2xvc2UoUGFzc1JlZlB0
cjxFdmVudExpc3RlbmVyPiBldmVudExpc3RlbmVyKSB7IG1fb25DbG9zZUxpc3RlbmVyID0gZXZl
bnRMaXN0ZW5lcjsgfQogICAgICAgICBFdmVudExpc3RlbmVyKiBvbmNsb3NlKCkgY29uc3QgeyBy
ZXR1cm4gbV9vbkNsb3NlTGlzdGVuZXIuZ2V0KCk7IH0KIAorICAgICAgICB2b2lkIHNldEpTV3Jh
cHBlcklzS25vd25JbmFjY2Vzc2libGUoKSB7IG1fanNXcmFwcGVySXNLbm93bkluYWNjZXNzaWJs
ZSA9IHRydWU7IH0KKyAgICAgICAgYm9vbCBqc1dyYXBwZXJJc0tub3duSW5hY2Nlc3NpYmxlKCkg
eyByZXR1cm4gbV9qc1dyYXBwZXJJc0tub3duSW5hY2Nlc3NpYmxlOyB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBmcmllbmQgY2xhc3MgQ2xvc2VNZXNzYWdlUG9ydFRpbWVyOwogCkBAIC0xMTks
NiArMTIyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBFdmVudExpc3RlbmVyc01h
cCBtX2V2ZW50TGlzdGVuZXJzOwogCiAgICAgICAgIHVuc2lnbmVkIG1fcGVuZGluZ0FjdGl2aXR5
OworICAgICAgICBib29sIG1fanNXcmFwcGVySXNLbm93bkluYWNjZXNzaWJsZTsKICAgICB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>
<flag name="review"
          id="11102"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>