<?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>208876</bug_id>
          
          <creation_ts>2020-03-10 12:40:12 -0700</creation_ts>
          <short_desc>[GPU Process] RemoteImageBufferProxy should ensure the state stack of the context is cleared before destruction</short_desc>
          <delta_ts>2020-09-29 16:39:16 -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>Canvas</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="Said Abou-Hallawa">sabouhallawa</reporter>
          <assigned_to name="Said Abou-Hallawa">sabouhallawa</assigned_to>
          <cc>dino</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1628360</commentid>
    <comment_count>0</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-10 12:40:12 -0700</bug_when>
    <thetext>For any reason, if the GraphicsContext::save() did not get a matching GraphicsContext::restore(), the destructor of GraphicsContext will assert: the state stack is not empty. In some cases, the GPU Process may terminate before receiving the matching restore() for the RemoteImageBufferProxy. This can depend on when CanvasRenderingContext2D.save() and its matching restore() are called.

This causes many failures in the canvas layout tests. Currently running &apos;run-webkit-tests --debug --no-retry LayoutTests/canvas/ LayoutTests/fast/canvas  --internal-feature RenderCanvasInGPUProcessEnabled&apos; results 255 failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628361</commentid>
    <comment_count>1</comment_count>
      <attachid>393173</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-10 12:47:10 -0700</bug_when>
    <thetext>Created attachment 393173
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628362</commentid>
    <comment_count>2</comment_count>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-10 12:48:27 -0700</bug_when>
    <thetext>This patch lowers the number of failures in the above command from 255 to 100 failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1628889</commentid>
    <comment_count>3</comment_count>
      <attachid>393173</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2020-03-11 15:54:48 -0700</bug_when>
    <thetext>Comment on attachment 393173
Patch

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

&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBufferProxy.h:58
&gt; +        // destruction, to avoid assertions in the GraphicsContext dtor.

Does it make sense to delete the assertion instead? The purpose of assertions is to find bugs, not to force us to do busywork.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629014</commentid>
    <comment_count>4</comment_count>
      <attachid>393173</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-11 20:32:58 -0700</bug_when>
    <thetext>Comment on attachment 393173
Patch

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

&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBufferProxy.h:58
&gt;&gt; +        // destruction, to avoid assertions in the GraphicsContext dtor.
&gt; 
&gt; Does it make sense to delete the assertion instead? The purpose of assertions is to find bugs, not to force us to do busywork.

I think the assertion is important to have. I hit this assertion only when running layout tests. When reloading the same page or load different pages, I see we are doing the right thing: the restore commands are pushed from the WebProcess to the GPUProcess and the loop below, does not execute even once. This is the same we do in CanvasRenderingContext2DBase::unwindStateStack().

I can do the same thing that other function is doing:

#if ASSERT_ENABLED
    while (context().stackSize())
        context().restore();
#endif</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629019</commentid>
    <comment_count>5</comment_count>
      <attachid>393173</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-11 20:42:04 -0700</bug_when>
    <thetext>Comment on attachment 393173
Patch

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

&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBufferProxy.h:58
&gt;&gt;&gt; +        // destruction, to avoid assertions in the GraphicsContext dtor.
&gt;&gt; 
&gt;&gt; Does it make sense to delete the assertion instead? The purpose of assertions is to find bugs, not to force us to do busywork.
&gt; 
&gt; I think the assertion is important to have. I hit this assertion only when running layout tests. When reloading the same page or load different pages, I see we are doing the right thing: the restore commands are pushed from the WebProcess to the GPUProcess and the loop below, does not execute even once. This is the same we do in CanvasRenderingContext2DBase::unwindStateStack().
&gt; 
&gt; I can do the same thing that other function is doing:
&gt; 
&gt; #if ASSERT_ENABLED
&gt;     while (context().stackSize())
&gt;         context().restore();
&gt; #endif

I don&apos;t think we should have different behavior in debug builds vs. release. Either always clear the stack, or remove the assertion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629250</commentid>
    <comment_count>6</comment_count>
      <attachid>393389</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-12 10:54:21 -0700</bug_when>
    <thetext>Created attachment 393389
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629254</commentid>
    <comment_count>7</comment_count>
      <attachid>393389</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2020-03-12 10:57:38 -0700</bug_when>
    <thetext>Comment on attachment 393389
Patch

We should not have different behavior in debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1629268</commentid>
    <comment_count>8</comment_count>
      <attachid>393173</attachid>
    <who name="Said Abou-Hallawa">sabouhallawa</who>
    <bug_when>2020-03-12 11:09:57 -0700</bug_when>
    <thetext>Comment on attachment 393173
Patch

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

&gt;&gt;&gt;&gt; Source/WebKit/GPUProcess/graphics/RemoteImageBufferProxy.h:58
&gt;&gt;&gt;&gt; +        // destruction, to avoid assertions in the GraphicsContext dtor.
&gt;&gt;&gt; 
&gt;&gt;&gt; Does it make sense to delete the assertion instead? The purpose of assertions is to find bugs, not to force us to do busywork.
&gt;&gt; 
&gt;&gt; I think the assertion is important to have. I hit this assertion only when running layout tests. When reloading the same page or load different pages, I see we are doing the right thing: the restore commands are pushed from the WebProcess to the GPUProcess and the loop below, does not execute even once. This is the same we do in CanvasRenderingContext2DBase::unwindStateStack().
&gt;&gt; 
&gt;&gt; I can do the same thing that other function is doing:
&gt;&gt; 
&gt;&gt; #if ASSERT_ENABLED
&gt;&gt;     while (context().stackSize())
&gt;&gt;         context().restore();
&gt;&gt; #endif
&gt; 
&gt; I don&apos;t think we should have different behavior in debug builds vs. release. Either always clear the stack, or remove the assertion.

-- I think the assertion is very useful for the render tree rendering where we control the save/restore. This assertion will detect if we miss a restore.
-- In CanvasRenderingContext2DBase, the save and restore are controlled by the javascript. If the javascript missed a restore, the assertion should not fire.
-- In RemoteImageBufferProxy, the restore might be lost because the connection between the GPUProcess and the WebProcess is terminated. In this case the assertion should not fire.

In the three cases the code to unwind the state stack and check the state stack is empty is only under #if ASSERT_ENABLED.

If this is not the right approach, I think we can do one of the following:

1. Remove the assertion and CanvasRenderingContext2DBase::unwindStateStack() also.
2. Add a flag to GraphicsContext like m_externalSaveRestoreControl. It will be true for the ImageBuffer context of CanvasRenderingContext2DBase and for the graphics context of RemoteImageBufferProxy. In the destructor of GraphicsContext. We can assert

ASSERT_IMPLIES(!m_externalSaveRestoreControl, m_stack.isEmpty());</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693168</commentid>
    <comment_count>9</comment_count>
      <attachid>410054</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2020-09-29 14:46:26 -0700</bug_when>
    <thetext>Created attachment 410054
Reupload Said’s patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693216</commentid>
    <comment_count>10</comment_count>
      <attachid>410054</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2020-09-29 16:31:50 -0700</bug_when>
    <thetext>Comment on attachment 410054
Reupload Said’s patch

As I said on Slack... &quot;seems a little funky, but OK&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693223</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-29 16:38:23 -0700</bug_when>
    <thetext>Committed r267772: &lt;https://trac.webkit.org/changeset/267772&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 410054.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1693224</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-29 16:39:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/69769208&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393173</attachid>
            <date>2020-03-10 12:47:10 -0700</date>
            <delta_ts>2020-03-12 10:54:20 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208876-20200310124709.patch</filename>
            <type>text/plain</type>
            <size>2456</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MjE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDc4M2EwYTBmOWI5ZWZhZTZl
NzM4MGMzMTc0YjVjOThmZDM2MTlhOTMuLjNlYzUwNGJkYWE1ZWMwNDk5YjcxZjU5ODgzOGU2Yzhl
MGE1ZjM0Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDMtMTAgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nl
c3NdIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgc2hvdWxkIGVuc3VyZSB0aGUgc3RhdGUgc3RhY2sg
aW4gdGhlIGNvbnRleHQgaXMgY2xlYXJlZCBiZWZvcmUgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODg3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuc3VyZSB0aGF0IHRoZSBzdGF0
ZSBzdGFjayBpbiB0aGUgY29udGV4dCBvZiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IGlzCisgICAg
ICAgIGNsZWFyZWQgYmVmb3JlIGRlc3RydWN0aW9uLgorCisgICAgICAgIFRoZSBjb25uZWN0aW9u
IGJldHdlZW4gR1BVUHJvY2VzcyBhbmQgV2ViUHJvY2VzcyBtYXkgaGF2ZSBiZWVuIHRlcm1pbmF0
ZWQKKyAgICAgICAgYmVmb3JlIGEgc2F2ZSgpIHJlY2VpdmVzIGl0cyBtYXRjaGluZyByZXN0b3Jl
LgorCisgICAgICAgICogR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5
Lmg6CisgICAgICAgIChXZWJLaXQ6OlJlbW90ZUltYWdlQnVmZmVyUHJveHk6On5SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5KToKKwogMjAyMC0wMy0xMCAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBs
ZS5jb20+CiAKICAgICAgICAgRG8gbm90IGNyZWF0ZSBhIHNlcnZpY2Ugd29ya2VyIGNvbm5lY3Rp
b24gaWYgc2VydmljZSB3b3JrZXIgaXMgbm90IGVuYWJsZWQgaW4gbmV0d29yayBwcm9jZXNzCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUlt
YWdlQnVmZmVyUHJveHkuaAppbmRleCA2Yzk2Y2ViOGFlMDU1NmVmZDBhYThjMDQyMDI3OGEzMWRj
ZjM5OTNmLi5lZDcyMDAzNjY5ZTA4NTYzNjE3YmQwMjQ3OWJjY2QwNGM2YjkxYTZhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFn
ZUJ1ZmZlclByb3h5LmgKQEAgLTM2LDYgKzM2LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiB0ZW1w
bGF0ZTx0eXBlbmFtZSBCYWNrZW5kVHlwZT4KIGNsYXNzIFJlbW90ZUltYWdlQnVmZmVyUHJveHkg
OiBwdWJsaWMgV2ViQ29yZTo6Q29uY3JldGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT4sIHB1Ymxp
YyBSZW1vdGVJbWFnZUJ1ZmZlck1lc3NhZ2VIYW5kbGVyUHJveHksIHB1YmxpYyBEaXNwbGF5TGlz
dDo6UmVwbGF5ZXI6OkRlbGVnYXRlIHsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZl
ciA9IFdlYkNvcmU6OkNvbmNyZXRlSW1hZ2VCdWZmZXI8QmFja2VuZFR5cGU+OworICAgIHVzaW5n
IEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyOjpjb250ZXh0OwogICAgIHVzaW5nIEJhc2VDb25jcmV0
ZUltYWdlQnVmZmVyOjptX2JhY2tlbmQ7CiAKIHB1YmxpYzoKQEAgLTUxLDYgKzUyLDE0IEBAIHB1
YmxpYzoKICAgICAgICAgY3JlYXRlQmFja2VuZChtX2JhY2tlbmQtPmxvZ2ljYWxTaXplKCksIG1f
YmFja2VuZC0+YmFja2VuZFNpemUoKSwgbV9iYWNrZW5kLT5yZXNvbHV0aW9uU2NhbGUoKSwgbV9i
YWNrZW5kLT5jb2xvclNwYWNlKCksIG1fYmFja2VuZC0+Y3JlYXRlSW1hZ2VCdWZmZXJCYWNrZW5k
SGFuZGxlKCkpOwogICAgIH0KIAorICAgIH5SZW1vdGVJbWFnZUJ1ZmZlclByb3h5KCkKKyAgICB7
CisgICAgICAgIC8vIEVuc3VyZSB0aGF0IHRoZSBzdGF0ZSBzdGFjayBpbiB0aGUgY29udGV4dCBp
cyBjbGVhcmVkIGJlZm9yZQorICAgICAgICAvLyBkZXN0cnVjdGlvbiwgdG8gYXZvaWQgYXNzZXJ0
aW9ucyBpbiB0aGUgR3JhcGhpY3NDb250ZXh0IGR0b3IuCisgICAgICAgIHdoaWxlIChjb250ZXh0
KCkuc3RhY2tTaXplKCkpCisgICAgICAgICAgICBjb250ZXh0KCkucmVzdG9yZSgpOworICAgIH0K
KwogcHJpdmF0ZToKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6Zmx1c2hEcmF3
aW5nQ29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6cHV0SW1hZ2VE
YXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>393389</attachid>
            <date>2020-03-12 10:54:21 -0700</date>
            <delta_ts>2020-09-29 14:46:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-208876-20200312105420.patch</filename>
            <type>text/plain</type>
            <size>2522</size>
            <attacher name="Said Abou-Hallawa">sabouhallawa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU4MzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDZlNDZkMjMwZDlhNjY5NDAw
MzBkZDdlNzgxNmQ0ZTlhZDdjYTgzMDIuLjJhM2U4MGY1ODQ4MDNkOWUxZDUxZTY3MmZkYzBlMDM3
MDM2NzM1Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMjAtMDMtMTIgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KKworICAgICAgICBbR1BVIFByb2Nl
c3NdIFJlbW90ZUltYWdlQnVmZmVyUHJveHkgc2hvdWxkIGVuc3VyZSB0aGUgc3RhdGUgc3RhY2sg
aW4gdGhlIGNvbnRleHQgaXMgY2xlYXJlZCBiZWZvcmUgZGVzdHJ1Y3Rpb24KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwODg3NgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuc3VyZSB0aGF0IHRoZSBzdGF0
ZSBzdGFjayBpbiB0aGUgY29udGV4dCBvZiBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IGlzCisgICAg
ICAgIGNsZWFyZWQgYmVmb3JlIGRlc3RydWN0aW9uLgorCisgICAgICAgIFRoZSBjb25uZWN0aW9u
IGJldHdlZW4gR1BVUHJvY2VzcyBhbmQgV2ViUHJvY2VzcyBtYXkgaGF2ZSBiZWVuIHRlcm1pbmF0
ZWQKKyAgICAgICAgYmVmb3JlIGEgR3JhcGhpY3NDb250ZXh0OjpzYXZlKCkgcmVjZWl2ZXMgaXRz
IG1hdGNoaW5nIHJlc3RvcmUoKS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVJbWFnZUJ1ZmZl
clByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisKIDIwMjAtMDMtMTEgIFNhaWQgQWJv
dS1IYWxsYXdhICA8c2Fib3VoYWxsYXdhQGFwcGxlLmNvbT4KIAogICAgICAgICBbR1BVIFByb2Nl
c3NdIGVuY29kZU5hdGl2ZUltYWdlKCkgc2hvdWxkIHBhc3MgaW1hZ2VTaXplIHRvIEdyYXBoaWNz
Q29udGV4dDo6ZHJhd05hdGl2ZUltYWdlKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmggYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCmluZGV4IDE3ZDg3
YzU2ZGE4ZWZlZjg5OTJhNWNkMGMxNTVkODU3NmJmZWQzZDEuLjNkMTIxYTcyNDM1NzY5Y2RhZjFi
NDIwM2E2YmNjNzVkZmZmMTk3OGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaApAQCAtMzYsNiArMzYs
NyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIHRlbXBsYXRlPHR5cGVuYW1lIEJhY2tlbmRUeXBlPgog
Y2xhc3MgUmVtb3RlSW1hZ2VCdWZmZXJQcm94eSA6IHB1YmxpYyBXZWJDb3JlOjpDb25jcmV0ZUlt
YWdlQnVmZmVyPEJhY2tlbmRUeXBlPiwgcHVibGljIFJlbW90ZUltYWdlQnVmZmVyTWVzc2FnZUhh
bmRsZXJQcm94eSwgcHVibGljIFdlYkNvcmU6OkRpc3BsYXlMaXN0OjpSZXBsYXllcjo6RGVsZWdh
dGUgewogICAgIHVzaW5nIEJhc2VDb25jcmV0ZUltYWdlQnVmZmVyID0gV2ViQ29yZTo6Q29uY3Jl
dGVJbWFnZUJ1ZmZlcjxCYWNrZW5kVHlwZT47CisgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VC
dWZmZXI6OmNvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6Om1fYmFj
a2VuZDsKIAogcHVibGljOgpAQCAtNTEsNiArNTIsMTYgQEAgcHVibGljOgogICAgICAgICBjcmVh
dGVCYWNrZW5kKG1fYmFja2VuZC0+bG9naWNhbFNpemUoKSwgbV9iYWNrZW5kLT5iYWNrZW5kU2l6
ZSgpLCBtX2JhY2tlbmQtPnJlc29sdXRpb25TY2FsZSgpLCBtX2JhY2tlbmQtPmNvbG9yU3BhY2Uo
KSwgbV9iYWNrZW5kLT5jcmVhdGVJbWFnZUJ1ZmZlckJhY2tlbmRIYW5kbGUoKSk7CiAgICAgfQog
CisgICAgflJlbW90ZUltYWdlQnVmZmVyUHJveHkoKQorICAgIHsKKyNpZiBBU1NFUlRfRU5BQkxF
RAorICAgICAgICAvLyBFbnN1cmUgdGhhdCB0aGUgc3RhdGUgc3RhY2sgaW4gdGhlIGNvbnRleHQg
aXMgY2xlYXJlZCBiZWZvcmUKKyAgICAgICAgLy8gZGVzdHJ1Y3Rpb24sIHRvIGF2b2lkIGFzc2Vy
dGlvbnMgaW4gdGhlIEdyYXBoaWNzQ29udGV4dCBkdG9yLgorICAgICAgICB3aGlsZSAoY29udGV4
dCgpLnN0YWNrU2l6ZSgpKQorICAgICAgICAgICAgY29udGV4dCgpLnJlc3RvcmUoKTsKKyNlbmRp
ZgorICAgIH0KKwogcHJpdmF0ZToKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
Zmx1c2hEcmF3aW5nQ29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6
cHV0SW1hZ2VEYXRhOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>410054</attachid>
            <date>2020-09-29 14:46:26 -0700</date>
            <delta_ts>2020-09-29 16:38:23 -0700</delta_ts>
            <desc>Reupload Said’s patch</desc>
            <filename>bug-208876-20200929144625.patch</filename>
            <type>text/plain</type>
            <size>2802</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3NzQ0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGU5ZDk3MTNkZDIzMGFkNzFj
YWI3ZjY3MDkyMmJiNzE0YzY3ZTFhOWQuLjExMDEyNzdkMzg3OWE3MDQwZDk3ZmM2OTdhZjYyMDRj
NDQ4MTYyOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjEgQEAKKzIwMjAtMDktMjkgIFdlbnNvbiBI
c2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVSBQcm9jZXNzXSBS
ZW1vdGVJbWFnZUJ1ZmZlclByb3h5IHNob3VsZCBlbnN1cmUgdGhlIHN0YXRlIHN0YWNrIG9mIHRo
ZSBjb250ZXh0IGlzIGNsZWFyZWQgYmVmb3JlIGRlc3RydWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDg4NzYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIHJ1bm5pbmcgY2FudmFzIGxheW91
dCB0ZXN0cyBpbiBkZWJ1ZyBXZWJLaXQsIHRoZSBhc3NlcnRpb24gaW4gYH5HcmFwaGljc0NvbnRl
eHQoKWAgd2hpY2ggdmVyaWZpZXMgdGhhdAorICAgICAgICBgbV9zdGFjay5pc0VtcHR5KClgIGZp
cmVzLiBUaGlzIG9jY3VycyBiZWNhdXNlIHRoZSBtYXRjaGluZyBjYWxsIHRvIHJlc3RvcmUgbWF5
IHN0aWxsIGJlIGJ1ZmZlcmVkIGluIHRoZSB3ZWIKKyAgICAgICAgcHJvY2VzcyB3aGVuIHRoZSBy
ZW1vdGUgaW1hZ2UgYnVmZmVyIHByb3h5IGluIHRoZSBHUFUgcHJvY2VzcyBpcyBkZXN0cm95ZWQ7
IGhvd2V2ZXIsIHRoaXMgbWF5IGFsc28gb2NjdXIgaWYgdGhlCisgICAgICAgIHdlYiBwcm9jZXNz
IHRlcm1pbmF0ZXMgd2l0aG91dCBoYXZpbmcgc2VudCB0aGUgbWF0Y2hpbmcgY2FsbHMgdG8gcmVz
dG9yZSB0aGUgZ3JhcGhpY3MgY29udGV4dC4KKworICAgICAgICBXZSBjYW4gZml4IGJvdGggb2Yg
dGhlc2Ugc2NlbmFyaW9zIGJ5IG1hbnVhbGx5IHVud2luZGluZyB0aGUgY29udGV4dCdzIHN0YXRl
IHN0YWNrIHdoZW4gZGVzdHJveWluZyB0aGUKKyAgICAgICAgYFJlbW90ZUltYWdlQnVmZmVyUHJv
eHlgLiBPcmlnaW5hbCBwYXRjaCBieSBTYWlkIEFib3UtSGFsbGF3YS4KKworICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVJbWFnZUJ1ZmZlclByb3h5Ojp+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSk6CisK
IDIwMjAtMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgc3R1YnMgZm9yIEF1ZGlvV29ya2xldApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVJbWFnZUJ1ZmZlclByb3h5LmgKaW5kZXggOGViOTc5
Zjg5MWRhMjY5YjI2Yjc2ZDc4MDIwOWNmODViY2MxMTE3Yi4uODFiODk3OGQwZTc5MTE1N2Y5Yzdl
NDk3MDM5ODE3ZTQ3OTU5ZTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNz
L2dyYXBoaWNzL1JlbW90ZUltYWdlQnVmZmVyUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L0dQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlSW1hZ2VCdWZmZXJQcm94eS5oCkBAIC0zNiw2ICszNiw3
IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogdGVtcGxhdGU8dHlwZW5hbWUgQmFja2VuZFR5cGU+CiBj
bGFzcyBSZW1vdGVJbWFnZUJ1ZmZlclByb3h5IDogcHVibGljIFdlYkNvcmU6OkNvbmNyZXRlSW1h
Z2VCdWZmZXI8QmFja2VuZFR5cGU+LCBwdWJsaWMgUmVtb3RlSW1hZ2VCdWZmZXJNZXNzYWdlSGFu
ZGxlclByb3h5LCBwdWJsaWMgV2ViQ29yZTo6RGlzcGxheUxpc3Q6OlJlcGxheWVyOjpEZWxlZ2F0
ZSB7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXIgPSBXZWJDb3JlOjpDb25jcmV0
ZUltYWdlQnVmZmVyPEJhY2tlbmRUeXBlPjsKKyAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1
ZmZlcjo6Y29udGV4dDsKICAgICB1c2luZyBCYXNlQ29uY3JldGVJbWFnZUJ1ZmZlcjo6bV9iYWNr
ZW5kOwogCiBwdWJsaWM6CkBAIC01MSw2ICs1MiwxNCBAQCBwdWJsaWM6CiAgICAgICAgIGNyZWF0
ZUJhY2tlbmQobV9iYWNrZW5kLT5sb2dpY2FsU2l6ZSgpLCBtX2JhY2tlbmQtPmJhY2tlbmRTaXpl
KCksIG1fYmFja2VuZC0+cmVzb2x1dGlvblNjYWxlKCksIG1fYmFja2VuZC0+Y29sb3JTcGFjZSgp
LCBtX2JhY2tlbmQtPmNyZWF0ZUltYWdlQnVmZmVyQmFja2VuZEhhbmRsZSgpKTsKICAgICB9CiAK
KyAgICB+UmVtb3RlSW1hZ2VCdWZmZXJQcm94eSgpCisgICAgeworICAgICAgICAvLyBVbndpbmQg
dGhlIGNvbnRleHQncyBzdGF0ZSBzdGFjayBiZWZvcmUgZGVzdHJ1Y3Rpb24sIHNpbmNlIGNhbGxz
IHRvIHJlc3RvcmUgbWF5IG5vdCBoYXZlCisgICAgICAgIC8vIGJlZW4gZmx1c2hlZCB5ZXQsIG9y
IHRoZSB3ZWIgcHJvY2VzcyBtYXkgaGF2ZSB0ZXJtaW5hdGVkLgorICAgICAgICB3aGlsZSAoY29u
dGV4dCgpLnN0YWNrU2l6ZSgpKQorICAgICAgICAgICAgY29udGV4dCgpLnJlc3RvcmUoKTsKKyAg
ICB9CisKIHByaXZhdGU6CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OmZsdXNo
RHJhd2luZ0NvbnRleHQ7CiAgICAgdXNpbmcgQmFzZUNvbmNyZXRlSW1hZ2VCdWZmZXI6OnB1dElt
YWdlRGF0YTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>