<?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>219240</bug_id>
          
          <creation_ts>2020-11-21 16:47:44 -0800</creation_ts>
          <short_desc>Calling waitForAndDispatchImmediately&lt;M&gt; on a loop fails when multiple M messages arrive simultaneously</short_desc>
          <delta_ts>2020-11-30 10:44: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 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>
          
          <blocked>219091</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Wenson Hsieh">wenson_hsieh</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>cdumez</cc>
    
    <cc>ggaren</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1709797</commentid>
    <comment_count>0</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-21 16:47:44 -0800</bug_when>
    <thetext>Fix a race condition in IPC logic, wherein a client that calls waitForAndDispatchImmediately&lt;M&gt;() n times may time out when receiving n messages of type M.

...more concretely:

RemoteImageBufferProxy sync-waits for consecutive `RemoteRenderingBackendProxy::DidFlush` messages, and finishes sync-waiting when the DidFlush message containing the expected flush identifier arrives. The following may occur:

(Main thread): waitForAndDispatchImmediately&lt;RemoteRenderingBackendProxy::DidFlush&gt;()

(IPC thread): receives the first DidFlush message
(IPC thread): sees that the message name matches that of m_waitingForMessage, and signals the main thread

(Main thread): sees that m_waitingForMessage now has a decoder, and nulls out m_waitingForMessage
(Main thread): calls into RemoteRenderingBackendProxy::didFlush() and returns from waitForAndDispatchImmediately

(IPC thread): receives the second DidFlush message
(IPC thread): sees that m_waitingForMessage is null

(Main thread): calls into RemoteRenderingBackendProxy::didFlush() and returns from waitForAndDispatchImmediately
(Main thread): sees that the flush is still pending, so we call waitForAndDispatchImmediately&lt;RemoteRenderingBackendProxy::DidFlush&gt;() again
(Main thread): sees that the incoming messages queue doesn&apos;t contain DidFlush, so we wait

(IPC thread): enqueues the incoming DidFlush message onto the main thread (via enqueueIncomingMessage)

...and now the main thread will time out waiting for the RemoteRenderingBackendProxy::DidFlush which is currently sitting in the incoming messages queue :|</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709936</commentid>
    <comment_count>1</comment_count>
      <attachid>414812</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-23 12:54:16 -0800</bug_when>
    <thetext>Created attachment 414812
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1709960</commentid>
    <comment_count>2</comment_count>
      <attachid>414812</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-11-23 19:18:50 -0800</bug_when>
    <thetext>Comment on attachment 414812
Patch

r=me assuming the bots are happy.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710210</commentid>
    <comment_count>3</comment_count>
      <attachid>414812</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-11-26 20:40:34 -0800</bug_when>
    <thetext>Comment on attachment 414812
Patch

Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710211</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-11-26 20:42:56 -0800</bug_when>
    <thetext>Committed r270180: &lt;https://trac.webkit.org/changeset/270180&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 414812.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710212</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-11-26 20:43:24 -0800</bug_when>
    <thetext>&lt;rdar://problem/71757243&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710663</commentid>
    <comment_count>6</comment_count>
      <attachid>414812</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-11-30 10:23:53 -0800</bug_when>
    <thetext>Comment on attachment 414812
Patch

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

&gt; Source/WebKit/Platform/IPC/Connection.cpp:553
&gt; +        if (hasIncomingSynchronousMessage &amp;&amp; waitForOptions.contains(WaitForOption::InterruptWaitingIfSyncMessageArrives)) {

Since we needed to hold a lock while computing hasIncomingSynchronousMessage, it seems like it must be a bug to check hasIncomingSynchronousMessage after dropping the lock. Between dropping the lock and checking hasIncomingSynchronousMessage, the true value of hasIncomingSynchronousMessage may have changed (because a new incoming message may have arrived).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710666</commentid>
    <comment_count>7</comment_count>
      <attachid>414812</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2020-11-30 10:26:45 -0800</bug_when>
    <thetext>Comment on attachment 414812
Patch

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

&gt;&gt; Source/WebKit/Platform/IPC/Connection.cpp:553
&gt;&gt; +        if (hasIncomingSynchronousMessage &amp;&amp; waitForOptions.contains(WaitForOption::InterruptWaitingIfSyncMessageArrives)) {
&gt; 
&gt; Since we needed to hold a lock while computing hasIncomingSynchronousMessage, it seems like it must be a bug to check hasIncomingSynchronousMessage after dropping the lock. Between dropping the lock and checking hasIncomingSynchronousMessage, the true value of hasIncomingSynchronousMessage may have changed (because a new incoming message may have arrived).

But I guess this is OK because there is only one IPC thread, and we are running on it, and we know that only the IPC thread adds to m_incomingMessages?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1710669</commentid>
    <comment_count>8</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2020-11-30 10:44:11 -0800</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #7)
&gt; Comment on attachment 414812 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=414812&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebKit/Platform/IPC/Connection.cpp:553
&gt; &gt;&gt; +        if (hasIncomingSynchronousMessage &amp;&amp; waitForOptions.contains(WaitForOption::InterruptWaitingIfSyncMessageArrives)) {
&gt; &gt; 
&gt; &gt; Since we needed to hold a lock while computing hasIncomingSynchronousMessage, it seems like it must be a bug to check hasIncomingSynchronousMessage after dropping the lock. Between dropping the lock and checking hasIncomingSynchronousMessage, the true value of hasIncomingSynchronousMessage may have changed (because a new incoming message may have arrived).
&gt; 
&gt; But I guess this is OK because there is only one IPC thread, and we are
&gt; running on it, and we know that only the IPC thread adds to
&gt; m_incomingMessages?

2 things:
a. This is not new behavior in this patch
b. Yes, it is my understanding that incoming messages only get enqueued by the IPC thread and we are on the IPC thread here. The reason we have a lock is because the main thread dequeues those messages.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>414812</attachid>
            <date>2020-11-23 12:54:16 -0800</date>
            <delta_ts>2020-11-26 20:42:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-219240-20201123125415.patch</filename>
            <type>text/plain</type>
            <size>7870</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcwMTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGM1M2QyNGIyY2NlZWQ5MDIx
YzdhNTRjNTI0YzM4ODhiMTBjZDNiMzAuLmJiMTk0MDA5YzAxMDNjYjRlMTViMzQ1NTJiOWVjMGY0
NGIyMDQ1ODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTAgQEAKKzIwMjAtMTEtMjMgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgQ2FsbGluZyB3YWl0Rm9y
QW5kRGlzcGF0Y2hJbW1lZGlhdGVseTxNPiBvbiBhIGxvb3AgZmFpbHMgd2hlbiBtdWx0aXBsZSBN
IG1lc3NhZ2VzIGFycml2ZSBzaW11bHRhbmVvdXNseQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE5MjQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXMgYSByYWNlIHRoYXQgbWF5IG9jY3VyIHdoZW4g
Y2FsbGluZyBgd2FpdEZvckFuZERpc3BhdGNoSW1tZWRpYXRlbHk8Tj5gIGluIGEgbG9vcCwgd2hl
biBtdWx0aXBsZSBtZXNzYWdlcworICAgICAgICBgTmAgYXJyaXZlIG9uIHRoZSBJUEMgdGhyZWFk
IHNpbXVsdGFuZW91c2x5LiBUaGlzIG1heSByZXN1bHQgZnJvbSB0aGUgZm9sbG93aW5nIHNlcXVl
bmNlIG9mIGV2ZW50cyAobm90ZSB0aGF0CisgICAgICAgIChNYWluKSBhbmQgKElQQykgaW4gdGhl
IHRpbWVsaW5lIGJlbG93IHJlZmVyIHRvIHRoZSBtYWluIHRocmVhZCBhbmQgSVBDIGJhY2tncm91
bmQgdGhyZWFkLCByZXNwZWN0aXZlbHkpOgorCisgICAgICAgIChNYWluKSAgQ2FsbCBgd2FpdEZv
ckFuZERpc3BhdGNoSW1tZWRpYXRlbHlgLCBhbmQgYmVnaW4gd2FpdGluZy4KKworICAgICAgICAo
SVBDKSAgIEEgbWVzc2FnZSBgTmAgYXJyaXZlcywgYW5kIGlzIGhhbmRsZWQgaW4gYHByb2Nlc3NJ
bmNvbWluZ01lc3NhZ2VgIGJ5IHNldHRpbmcgdGhlIGRlY29kZXIgb2YKKyAgICAgICAgICAgICAg
ICBgbV93YWl0aW5nRm9yTWVzc2FnZWAgYW5kIG5vdGlmeWluZyB0aGUgY29uZGl0aW9uIHZhcmlh
YmxlLgorCisgICAgICAgIChNYWluKSAgVGhlIG1haW4gdGhyZWFkIHdha2VzIHVwIGFuZCBzdGFy
dHMgdG8gcHJvY2VzcyBgTmAsIGNsZWFyaW5nIG91dCBgbV93YWl0aW5nRm9yTWVzc2FnZWAgaW4g
dGhlIHByb2Nlc3MuCisKKyAgICAgICAgKElQQykgICBBIHNlY29uZCBtZXNzYWdlIGBOYCBhcnJp
dmVzLiBXZSBzZWUgdGhhdCBgbV93YWl0aW5nRm9yTWVzc2FnZWAgaXMgbnVsbCwgc28gd2UgZG9u
J3Qgc2V0IHRoZSBkZWNvZGVyCisgICAgICAgICAgICAgICAgYW5kIGJhaWwuIEluc3RlYWQsIHdl
IHByZXBhcmUgdG8gY2FsbCBgZW5xdWV1ZUluY29taW5nTWVzc2FnZWAgYW5kIHB1c2ggdGhlIG1l
c3NhZ2Ugb250byB0aGUgbWFpbgorICAgICAgICAgICAgICAgIHRocmVhZCwgKmJ1dCBpbXBvcnRh
bnRseSosIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQuCisKKyAgICAgICAgKE1haW4pICBDYWxsIGB3
YWl0Rm9yQW5kRGlzcGF0Y2hJbW1lZGlhdGVseWAgYWdhaW4sIHNldCBgbV93YWl0aW5nRm9yTWVz
c2FnZWAsIGFuZCBiZWdpbiB3YWl0aW5nLiBTaW5jZSB0aGUKKyAgICAgICAgICAgICAgICBpbmNv
bWluZyBtZXNzYWdlIHRoYXQgd2FzIGp1c3QgcmVjZWl2ZWQgYWJvdmUgaGFzIG5vdCBiZWVuIGVu
cXVldWVkIHlldCwgd2UgYXJlIHVuYWJsZSB0byBhdm9pZCB3YWl0aW5nCisgICAgICAgICAgICAg
ICAgZHVlIHRvIHRoZSBpbmNvbWluZyBtZXNzYWdlLgorCisgICAgICAgIChJUEMpICAgV2UgZmlu
YWxseSBjYWxsIGBlbnF1ZXVlSW5jb21pbmdNZXNzYWdlYCwgd2hpY2ggcHVzaGVzIHRoZSBtZXNz
YWdlIGBOYCBpbnRvIGBtX2luY29taW5nTWVzc2FnZXNgIGFuZAorICAgICAgICAgICAgICAgIGRp
c3BhdGNoZXMgb250byB0aGUgbWFpbiB0aHJlYWQuIEhvd2V2ZXIsIHRoaXMgaXMgdG9vIGxhdGUs
IHNpbmNlIHRoZSBtYWluIHRocmVhZCBpcyBhbHJlYWR5IHN0dWNrCisgICAgICAgICAgICAgICAg
d2FpdGluZyBmb3IgdGhlIGluY29taW5nIElQQyBtZXNzYWdlIHRoYXQgd2UndmUgbm93IGp1c3Qg
ZW5xdWV1ZWQuCisKKyAgICAgICAgVHdvIG1pbm9yIGFkanVzdG1lbnRzIGFyZSByZXF1aXJlZCB0
byBmaXggdGhpcywgZGVzY3JpYmVkIGluIHRoZSBiZWxvdyBjb21tZW50cy4gVGhlIGNvbWJpbmF0
aW9uIG9mIHRoZXNlIHR3bworICAgICAgICBjaGFuZ2VzIGVuc3VyZXMgdGhhdCB0aGUgc2NlbmFy
aW8gZGVzY3JpYmVkIGFib3ZlIGlzIGltcG9zc2libGUsIHNpbmNlIHdlJ2xsIGVpdGhlciBzZXQg
YG1fd2FpdGluZ0Zvck1lc3NhZ2VgJ3MKKyAgICAgICAgZGVjb2RlciBhbmQgd2FrZSB1cCB0aGUg
bWFpbiB0aHJlYWQgaW4gdGhlIGNhc2Ugd2hlcmUgYHdhaXRGb3JNZXNzYWdlYCBpcyBjYWxsZWQg
YmVmb3JlIGBwcm9jZXNzSW5jb21pbmdNZXNzYWdlYCwKKyAgICAgICAgb3Igd2UnbGwgYmFpbCBl
YXJseSBpbiBgd2FpdEZvck1lc3NhZ2VgIHdpdGggdGhlIGVucXVldWVkIElQQyBtZXNzYWdlIGlu
IHRoZSBjYXNlIHdoZXJlIGBwcm9jZXNzSW5jb21pbmdNZXNzYWdlYAorICAgICAgICBydW5zIGJl
Zm9yZSBgd2FpdEZvck1lc3NhZ2VgLgorCisgICAgICAgICogUGxhdGZvcm0vSVBDL0Nvbm5lY3Rp
b24uY3BwOgorICAgICAgICAoSVBDOjpDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZSk6CisKKyAg
ICAgICAgTW92ZSBsb2dpYyB0aGF0IGNoZWNrcyB0aGUgaW5jb21pbmcgbWVzc2FnZXMgcXVldWUg
d2hlbiBjYWxsaW5nIGBDb25uZWN0aW9uOjp3YWl0Rm9yTWVzc2FnZWAgaW50byB0aGUKKyAgICAg
ICAgYG1fd2FpdEZvck1lc3NhZ2VNdXRleGAgY3JpdGljYWwgc2VjdGlvbi4KKworICAgICAgICAo
SVBDOjpDb25uZWN0aW9uOjpwcm9jZXNzSW5jb21pbmdNZXNzYWdlKToKKworICAgICAgICBFeHRl
bmQgdGhlIGNyaXRpY2FsIHNlY3Rpb24gb2YgYG1fd2FpdEZvck1lc3NhZ2VNdXRleGAgd2hlbiBw
cm9jZXNzaW5nIGFuIGluY29taW5nIG1lc3NhZ2UsIHN1Y2ggdGhhdCBpdAorICAgICAgICBlbmNv
bXBhc3NlcyB0aGUgcGFydCB0aGF0IGVucXVldWVzIHRoZSBpbmNvbWluZyBtZXNzYWdlLgorCiAy
MDIwLTExLTIzICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAg
ICAgIEludHJvZHVjZSBuZXcgZGlzcGxheSBsaXN0IG1ldGEgY29tbWFuZHMgaW4gcHJlcGFyYXRp
b24gZm9yIHdlYmtpdC5vcmcvYi8yMTkwOTEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvUGxh
dGZvcm0vSVBDL0Nvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29u
bmVjdGlvbi5jcHAKaW5kZXggYTZiOWJlMWExMzFiMWQ4ZWNkOTdiNmNhM2UwZDgyYWM3NDgzODY5
NC4uMzQ5NDVmYmE1NjdjZDkzNDg0MTY1MTdlZmE2MGFkNTg2OWRlNzI0OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9QbGF0Zm9ybS9JUEMvQ29ubmVjdGlvbi5jcHAKQEAgLTUxNCwzNyArNTE0LDYgQEAgc3Rk
Ojp1bmlxdWVfcHRyPERlY29kZXI+IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKE1lc3NhZ2VO
YW1lIG1lc3NhZ2VOYW1lLCB1aW4KIAogICAgIHRpbWVvdXQgPSB0aW1lb3V0UmVzcGVjdGluZ0ln
bm9yZVRpbWVvdXRzRm9yVGVzdGluZyh0aW1lb3V0KTsKIAotICAgIGJvb2wgaGFzSW5jb21pbmdT
eW5jaHJvbm91c01lc3NhZ2UgPSBmYWxzZTsKLQotICAgIC8vIEZpcnN0LCBjaGVjayBpZiB0aGlz
IG1lc3NhZ2UgaXMgYWxyZWFkeSBpbiB0aGUgaW5jb21pbmcgbWVzc2FnZXMgcXVldWUuCi0gICAg
ewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4
KTsKLQotICAgICAgICBmb3IgKGF1dG8gaXQgPSBtX2luY29taW5nTWVzc2FnZXMuYmVnaW4oKSwg
ZW5kID0gbV9pbmNvbWluZ01lc3NhZ2VzLmVuZCgpOyBpdCAhPSBlbmQ7ICsraXQpIHsKLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiYgbWVzc2FnZSA9ICppdDsKLQotICAgICAg
ICAgICAgaWYgKG1lc3NhZ2UtPm1lc3NhZ2VOYW1lKCkgPT0gbWVzc2FnZU5hbWUgJiYgbWVzc2Fn
ZS0+ZGVzdGluYXRpb25JRCgpID09IGRlc3RpbmF0aW9uSUQpIHsKLSAgICAgICAgICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8RGVjb2Rlcj4gcmV0dXJuZWRNZXNzYWdlID0gV1RGTW92ZShtZXNzYWdl
KTsKLQotICAgICAgICAgICAgICAgIG1faW5jb21pbmdNZXNzYWdlcy5yZW1vdmUoaXQpOwotICAg
ICAgICAgICAgICAgIHJldHVybiByZXR1cm5lZE1lc3NhZ2U7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChtZXNzYWdlLT5pc1N5bmNNZXNzYWdlKCkpCi0gICAgICAgICAgICAgICAg
aGFzSW5jb21pbmdTeW5jaHJvbm91c01lc3NhZ2UgPSB0cnVlOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgLy8gRG9uJ3QgZXZlbiBzdGFydCB3YWl0aW5nIGlmIHdlIGhhdmUgSW50ZXJydXB0V2Fp
dGluZ0lmU3luY01lc3NhZ2VBcnJpdmVzIGFuZCB0aGVyZSdzIGEgc3luYyBtZXNzYWdlIGFscmVh
ZHkgaW4gdGhlIHF1ZXVlLgotICAgIGlmIChoYXNJbmNvbWluZ1N5bmNocm9ub3VzTWVzc2FnZSAm
JiB3YWl0Rm9yT3B0aW9ucy5jb250YWlucyhXYWl0Rm9yT3B0aW9uOjpJbnRlcnJ1cHRXYWl0aW5n
SWZTeW5jTWVzc2FnZUFycml2ZXMpKSB7Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgYXV0
byBsb2NrZXIgPSBob2xkTG9jayhtX3dhaXRGb3JNZXNzYWdlTXV0ZXgpOwotICAgICAgICAvLyBX
ZSBkb24ndCBzdXBwb3J0IGhhdmluZyBtdWx0aXBsZSBjbGllbnRzIHdhaXRpbmcgZm9yIG1lc3Nh
Z2VzLgotICAgICAgICBBU1NFUlQoIW1fd2FpdGluZ0Zvck1lc3NhZ2UpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQogICAgIFdhaXRGb3JNZXNzYWdlU3RhdGUgd2Fp
dGluZ0Zvck1lc3NhZ2UobWVzc2FnZU5hbWUsIGRlc3RpbmF0aW9uSUQsIHdhaXRGb3JPcHRpb25z
KTsKIAogICAgIHsKQEAgLTU2MCw2ICs1MjksMzUgQEAgc3RkOjp1bmlxdWVfcHRyPERlY29kZXI+
IENvbm5lY3Rpb246OndhaXRGb3JNZXNzYWdlKE1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1lLCB1aW4K
ICAgICAgICAgaWYgKCFtX3Nob3VsZFdhaXRGb3JNZXNzYWdlcykKICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwogCisgICAgICAgIGJvb2wgaGFzSW5jb21pbmdTeW5jaHJvbm91c01lc3NhZ2Ug
PSBmYWxzZTsKKworICAgICAgICAvLyBGaXJzdCwgY2hlY2sgaWYgdGhpcyBtZXNzYWdlIGlzIGFs
cmVhZHkgaW4gdGhlIGluY29taW5nIG1lc3NhZ2VzIHF1ZXVlLgorICAgICAgICB7CisgICAgICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1faW5jb21pbmdNZXNzYWdlc011dGV4KTsKKyAg
ICAgICAgICAgIGZvciAoYXV0byBpdCA9IG1faW5jb21pbmdNZXNzYWdlcy5iZWdpbigpLCBlbmQg
PSBtX2luY29taW5nTWVzc2FnZXMuZW5kKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiYgbWVzc2FnZSA9ICppdDsKKworICAgICAg
ICAgICAgICAgIGlmIChtZXNzYWdlLT5tZXNzYWdlTmFtZSgpID09IG1lc3NhZ2VOYW1lICYmIG1l
c3NhZ2UtPmRlc3RpbmF0aW9uSUQoKSA9PSBkZXN0aW5hdGlvbklEKSB7CisgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxEZWNvZGVyPiByZXR1cm5lZE1lc3NhZ2UgPSBXVEZNb3Zl
KG1lc3NhZ2UpOworCisgICAgICAgICAgICAgICAgICAgIG1faW5jb21pbmdNZXNzYWdlcy5yZW1v
dmUoaXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuZWRNZXNzYWdlOworICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChtZXNzYWdlLT5pc1N5bmNNZXNz
YWdlKCkpCisgICAgICAgICAgICAgICAgICAgIGhhc0luY29taW5nU3luY2hyb25vdXNNZXNzYWdl
ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8vIERvbid0IGV2
ZW4gc3RhcnQgd2FpdGluZyBpZiB3ZSBoYXZlIEludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdl
QXJyaXZlcyBhbmQgdGhlcmUncyBhIHN5bmMgbWVzc2FnZSBhbHJlYWR5IGluIHRoZSBxdWV1ZS4K
KyAgICAgICAgaWYgKGhhc0luY29taW5nU3luY2hyb25vdXNNZXNzYWdlICYmIHdhaXRGb3JPcHRp
b25zLmNvbnRhaW5zKFdhaXRGb3JPcHRpb246OkludGVycnVwdFdhaXRpbmdJZlN5bmNNZXNzYWdl
QXJyaXZlcykpIHsKKyNpZiBBU1NFUlRfRU5BQkxFRAorICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
c3VwcG9ydCBoYXZpbmcgbXVsdGlwbGUgY2xpZW50cyB3YWl0aW5nIGZvciBtZXNzYWdlcy4KKyAg
ICAgICAgICAgIEFTU0VSVCghbV93YWl0aW5nRm9yTWVzc2FnZSk7CisjZW5kaWYKKyAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisKICAgICAgICAgbV93YWl0aW5nRm9yTWVz
c2FnZSA9ICZ3YWl0aW5nRm9yTWVzc2FnZTsKICAgICB9CiAKQEAgLTc4MSwxNSArNzc5LDE1IEBA
IHZvaWQgQ29ubmVjdGlvbjo6cHJvY2Vzc0luY29taW5nTWVzc2FnZShzdGQ6OnVuaXF1ZV9wdHI8
RGVjb2Rlcj4gbWVzc2FnZSkKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgIH0KLSAgICB9CiAKLSAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGEgc3luYyBtZXNz
YWdlIG9yIGlmIGl0J3MgYSBtZXNzYWdlIHRoYXQgc2hvdWxkIGJlIGRpc3BhdGNoZWQgZXZlbiB3
aGVuIHdhaXRpbmcgZm9yCi0gICAgLy8gYSBzeW5jIHJlcGx5LiBJZiBpdCBpcywgYW5kIHdlJ3Jl
IHdhaXRpbmcgZm9yIGEgc3luYyByZXBseSB0aGlzIG1lc3NhZ2UgbmVlZHMgdG8gYmUgZGlzcGF0
Y2hlZC4KLSAgICAvLyBJZiB3ZSBkb24ndCB3ZSdsbCBlbmQgdXAgd2l0aCBhIGRlYWRsb2NrIHdo
ZXJlIGJvdGggc3luYyBtZXNzYWdlIHNlbmRlcnMgYXJlIHN0dWNrIHdhaXRpbmcgZm9yIGEgcmVw
bHkuCi0gICAgaWYgKFN5bmNNZXNzYWdlU3RhdGU6OnNpbmdsZXRvbigpLnByb2Nlc3NJbmNvbWlu
Z01lc3NhZ2UoKnRoaXMsIG1lc3NhZ2UpKQotICAgICAgICByZXR1cm47CisgICAgICAgIC8vIENo
ZWNrIGlmIHRoaXMgaXMgYSBzeW5jIG1lc3NhZ2Ugb3IgaWYgaXQncyBhIG1lc3NhZ2UgdGhhdCBz
aG91bGQgYmUgZGlzcGF0Y2hlZCBldmVuIHdoZW4gd2FpdGluZyBmb3IKKyAgICAgICAgLy8gYSBz
eW5jIHJlcGx5LiBJZiBpdCBpcywgYW5kIHdlJ3JlIHdhaXRpbmcgZm9yIGEgc3luYyByZXBseSB0
aGlzIG1lc3NhZ2UgbmVlZHMgdG8gYmUgZGlzcGF0Y2hlZC4KKyAgICAgICAgLy8gSWYgd2UgZG9u
J3Qgd2UnbGwgZW5kIHVwIHdpdGggYSBkZWFkbG9jayB3aGVyZSBib3RoIHN5bmMgbWVzc2FnZSBz
ZW5kZXJzIGFyZSBzdHVjayB3YWl0aW5nIGZvciBhIHJlcGx5LgorICAgICAgICBpZiAoU3luY01l
c3NhZ2VTdGF0ZTo6c2luZ2xldG9uKCkucHJvY2Vzc0luY29taW5nTWVzc2FnZSgqdGhpcywgbWVz
c2FnZSkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBlbnF1ZXVlSW5jb21pbmdNZXNzYWdl
KFdURk1vdmUobWVzc2FnZSkpOworICAgICAgICBlbnF1ZXVlSW5jb21pbmdNZXNzYWdlKFdURk1v
dmUobWVzc2FnZSkpOworICAgIH0KIH0KIAogdWludDY0X3QgQ29ubmVjdGlvbjo6aW5zdGFsbElu
Y29taW5nU3luY01lc3NhZ2VDYWxsYmFjayhXVEY6OkZ1bmN0aW9uPHZvaWQgKCk+JiYgY2FsbGJh
Y2spCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>