<?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>199998</bug_id>
          
          <creation_ts>2019-07-22 07:00:13 -0700</creation_ts>
          <short_desc>REGRESSION(r243058): [GStreamer] WebKitWebSrc&apos;s internal queue can exhaust the WebProcess memory</short_desc>
          <delta_ts>2019-07-29 07:35:18 -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>Platform</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="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>calvaris</cc>
    
    <cc>cturner</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1554678</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-07-22 07:00:13 -0700</bug_when>
    <thetext>We need a mechanism similar to appsrc&apos;s enough-data and need-data signals because currently if a large media is played from the network, webkitwebsrc will download it as fast as possible, even if the element is paused and the adapter size can easily run out of control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555024</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-07-23 01:43:39 -0700</bug_when>
    <thetext>I have started a patch btw.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1555755</commentid>
    <comment_count>2</comment_count>
      <attachid>374885</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-07-25 03:40:26 -0700</bug_when>
    <thetext>Created attachment 374885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556507</commentid>
    <comment_count>3</comment_count>
      <attachid>374885</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-07-29 00:19:14 -0700</bug_when>
    <thetext>Comment on attachment 374885
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:50
&gt; +// Never pause download of media resources smaller than 2MiB.
&gt; +#define SMALL_MEDIA_RESOURCE_MAX_SIZE 2 * 1024 * 1024
&gt; +
&gt; +// Keep at most 2% of the full, non-small, media resource buffered. When this
&gt; +// threshold is reached, the download task is paused.
&gt; +#define HIGH_QUEUE_FACTOR_THRESHOLD 0.02
&gt; +
&gt; +// Keep at least 20% of maximum queue size buffered. When this threshold is
&gt; +// reached, the download task resumes.
&gt; +#define LOW_QUEUE_FACTOR_THRESHOLD 0.2

I am not against this now, but maybe in the medium-short term we could make this a websetting?

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:143
&gt; +    bool downloadingSuspended { false };

isDownloadSuspended

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:466
&gt; +            if (!priv-&gt;doesHaveEOS &amp;&amp; priv-&gt;haveSize &amp;&amp; priv-&gt;isSeekable
&gt; +                &amp;&amp; (priv-&gt;size &gt; SMALL_MEDIA_RESOURCE_MAX_SIZE) &amp;&amp; priv-&gt;readPosition
&gt; +                &amp;&amp; (priv-&gt;readPosition != priv-&gt;size)
&gt; +                &amp;&amp; (priv-&gt;queueSize &lt; (priv-&gt;size * HIGH_QUEUE_FACTOR_THRESHOLD * LOW_QUEUE_FACTOR_THRESHOLD))
&gt; +                &amp;&amp; (GST_STATE(src) == GST_STATE_PLAYING) &amp;&amp; priv-&gt;downloadingSuspended) {

You can use longer lines here.

&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:1121
&gt; +        if (priv-&gt;haveSize &amp;&amp; (priv-&gt;size &gt; SMALL_MEDIA_RESOURCE_MAX_SIZE) &amp;&amp; (priv-&gt;queueSize &gt; (priv-&gt;size * HIGH_QUEUE_FACTOR_THRESHOLD))
&gt; +            &amp;&amp; !priv-&gt;downloadingSuspended &amp;&amp; priv-&gt;isSeekable) {

Maybe a longer line?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556519</commentid>
    <comment_count>4</comment_count>
      <attachid>374885</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-07-29 01:29:07 -0700</bug_when>
    <thetext>Comment on attachment 374885
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:50
&gt;&gt; +#define LOW_QUEUE_FACTOR_THRESHOLD 0.2
&gt; 
&gt; I am not against this now, but maybe in the medium-short term we could make this a websetting?

&quot;this&quot; being? Maybe it makes sense for the &quot;small media resource max-size&quot; define, but I&apos;m not sure about the 2 others.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556521</commentid>
    <comment_count>5</comment_count>
      <attachid>374885</attachid>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-07-29 01:35:28 -0700</bug_when>
    <thetext>Comment on attachment 374885
Patch

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

I&apos;m interested how you experimentally came up with these heuristics. If it&apos;s just of a local disk load as described in the commit message, that seems unrealistic. Did you consult any prior arts for their magical numbers at all?

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:466
&gt;&gt; +                &amp;&amp; (GST_STATE(src) == GST_STATE_PLAYING) &amp;&amp; priv-&gt;downloadingSuspended) {
&gt; 
&gt; You can use longer lines here.

Id vote against that, if it must be changed a function or two would be more comfortable. It&apos;s much easier to scan for the conditional parts when they are indented vertically like this than mixed up in a very long line imo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556522</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-07-29 01:47:15 -0700</bug_when>
    <thetext>(In reply to Charlie Turner from comment #5)
&gt; Comment on attachment 374885 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374885&amp;action=review
&gt; 
&gt; I&apos;m interested how you experimentally came up with these heuristics. If it&apos;s
&gt; just of a local disk load as described in the commit message, that seems
&gt; unrealistic.

Why?

&gt; Did you consult any prior arts for their magical numbers at all?
&gt; 

No. I couldn&apos;t find &quot;prior arts&quot; beyond the appsrc-based webkitwebsrc element which was maintaining an even smaller internal queue.

This was tested with huge resources (1.3GiB) and smaller resources (up to a few hundreds MiB). The most important issue is fixed (download never pausing), I agree the &quot;magic&quot; values can be refined but I would defer it to a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556524</commentid>
    <comment_count>7</comment_count>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2019-07-29 02:01:29 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #4)
&gt; Comment on attachment 374885 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=374885&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:50
&gt; &gt;&gt; +#define LOW_QUEUE_FACTOR_THRESHOLD 0.2
&gt; &gt; 
&gt; &gt; I am not against this now, but maybe in the medium-short term we could make this a websetting?
&gt; 
&gt; &quot;this&quot; being? Maybe it makes sense for the &quot;small media resource max-size&quot;
&gt; define, but I&apos;m not sure about the 2 others.

Well, I don&apos;t have a strong opinion on this but it looks to me like these three values could be configurable in runtime. I am not against setting them on compile time though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556528</commentid>
    <comment_count>8</comment_count>
    <who name="Charlie Turner">cturner</who>
    <bug_when>2019-07-29 02:10:14 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #6)
&gt; (In reply to Charlie Turner from comment #5)
&gt; &gt; Comment on attachment 374885 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=374885&amp;action=review
&gt; &gt; 
&gt; &gt; I&apos;m interested how you experimentally came up with these heuristics. If it&apos;s
&gt; &gt; just of a local disk load as described in the commit message, that seems
&gt; &gt; unrealistic.
&gt; 
&gt; Why?

It&apos;s an ideal environment where the network is not changing in quality. I&apos;d intuit that the values would be dynamic rather than static to account for network fluctations, perhaps based on moving averages. But...

&gt; 
&gt; &gt; Did you consult any prior arts for their magical numbers at all?
&gt; &gt; 
&gt; 
&gt; No. I couldn&apos;t find &quot;prior arts&quot; beyond the appsrc-based webkitwebsrc
&gt; element which was maintaining an even smaller internal queue.
&gt; 
&gt; This was tested with huge resources (1.3GiB) and smaller resources (up to a
&gt; few hundreds MiB). The most important issue is fixed (download never
&gt; pausing), I agree the &quot;magic&quot; values can be refined but I would defer it to
&gt; a follow-up patch.

OK then, I guess you&apos;ve done some manual testing on a variety of resources and network conditions. It is hard to add tests for the sorts of things I mention above so we&apos;ll address them as-and-when.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556552</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2019-07-29 07:34:14 -0700</bug_when>
    <thetext>Committed r247903: &lt;https://trac.webkit.org/changeset/247903&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1556553</commentid>
    <comment_count>10</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-29 07:35:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/53661333&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374885</attachid>
            <date>2019-07-25 03:40:26 -0700</date>
            <delta_ts>2019-07-29 00:19:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-199998-20190725114024.patch</filename>
            <type>text/plain</type>
            <size>7161</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ3ODE5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjEzN2ZhMDIwY2I5MzM3
ZGRkY2Q3ZGJjYTdkYWM1MDBjMmYwZTg5OS4uYzU0YmYyZDBjMjE3ZmEwOGYxNjY2YjIyMmJmY2Uw
MDIxZWMyYTI3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMzIEBACisyMDE5LTA3LTI1ICBQaGls
aXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBSRUdSRVNTSU9O
KHIyNDMwNTgpOiBbR1N0cmVhbWVyXSBXZWJLaXRXZWJTcmMncyBpbnRlcm5hbCBxdWV1ZSBjYW4g
ZXhoYXVzdCB0aGUgV2ViUHJvY2VzcyBtZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE5OTk5OAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFdpdGggdGhlIHdlYmtpdHdlYnNyYyByZXdyaXRlIHRoZSBl
bGVtZW50IGxvc3QgaXRzIGFiaWxpdHkgdG8gdGVsbAorICAgICAgICB0aGUgcmVzb3VyY2UgbG9h
ZGVyIHdoZW4gdG8gcGF1c2UgYW5kIHJlc3VtZSBkb3dubG9hZGluZyBiZWNhdXNlCisgICAgICAg
IHdlIGRvbid0IHVzZSBhcHBzcmMgYW5kIGl0cyBlbm91Z2gtZGF0YS9uZWVkLWRhdGEgc2lnbmFs
cyBhbnltb3JlLgorICAgICAgICBTbyBuZXcgaGV1cmlzdGljcyBhcmUgaW50cm9kdWNlZCB3aXRo
IHRoaXMgcGF0Y2guIERvd25sb2FkaW5nIG9mCisgICAgICAgIHJlc291cmNlcyBiaWdnZXIgdGhh
biAyTWlCIG1pZ2h0IHBhdXNlIHdoZW4gdGhlIGludGVybmFsIGFkYXB0ZXIKKyAgICAgICAgaGFz
IGVub3VnaCBkYXRhICgyJSBvZiB0aGUgZnVsbCByZXNvdXJjZSkgYW5kIHJlc3VtZSB3aGVuIHRo
ZQorICAgICAgICBhZGFwdGVyIHNpemUgZ29lcyBiZWxvdyAyMCUgb2YgdGhvc2UgMiUuCisKKyAg
ICAgICAgTm8gbmV3IHRlc3RzLCB0aGUgbWVkaWEgZWxlbWVudCBzcGVjIGRvZXNuJ3QgY2xlYXJs
eSBtYW5kYXRlIGhvdworICAgICAgICB0aGUgcmVzb3VyY2UgbG9hZGluZyBzaG91bGQgYmVoYXZl
IHdoZW4gdGhlIGVsZW1lbnQgaXMgcGF1c2VkIG9yCisgICAgICAgIGhvdyBhZ2dyZXNzaXZlbHkg
dGhlIHJlc291cmNlIHNob3VsZCBiZSBkb3dubG9hZGVkIGR1cmluZworICAgICAgICBwbGF5YmFj
ay4KKworICAgICAgICBUaGlzIHBhdGNoIHdhcyBmdW5jdGlvbmFsbHkgdGVzdGVkIHdpdGggYSAx
LjNHaUIgcmVzb3VyY2UgbG9hZGVkCisgICAgICAgIG92ZXIgdGhlIGxvY2FsIG5ldHdvcmssIHRo
ZSByZXNvdXJjZSB3YXMgZG93bmxvYWRlZCBpbiB+MzBNaUIKKyAgICAgICAgY2h1bmtzLCBzdG9w
cGluZyBhbmQgcmVzdW1pbmcgZXZlcnkgMjAgc2Vjb25kcywgYXBwcm94aW1hdGVseS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9XZWJLaXRXZWJTb3VyY2VHU3RyZWFt
ZXIuY3BwOgorICAgICAgICAod2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdCk6CisgICAgICAgICh3
ZWJLaXRXZWJTcmNDcmVhdGUpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGll
bnQ6OnJlc3BvbnNlUmVjZWl2ZWQpOgorICAgICAgICAoQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdD
bGllbnQ6OmRhdGFSZWNlaXZlZCk6CisKIDIwMTktMDctMjQgIFl1c3VrZSBTdXp1a2kgIDx5c3V6
dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbYm1hbGxvY10gQWRkIElzb0hlYXAgdGVzdCB0byBl
bnN1cmUgdGhhdCBJc29IZWFwIHBhZ2VzIGFyZSBub3QgYWxsb2NhdGluZyB0b28gbGFyZ2UgVkEK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9X
ZWJLaXRXZWJTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKaW5kZXggNWY0YzZm
YmZjMWY5ZGMzZjg2NzRhNWRiZTIwZDQyNGQ1OGZkMzkzZS4uOGIzNmM0ZmIxZjA1MzgyMGY3OWMx
NGRmMGJkN2I0YWYxZGE3MTUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdT
dHJlYW1lci5jcHAKQEAgLTM4LDYgKzM4LDE3IEBACiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCisvLyBOZXZlciBwYXVzZSBkb3dubG9hZCBvZiBtZWRpYSByZXNvdXJjZXMgc21hbGxlciB0
aGFuIDJNaUIuCisjZGVmaW5lIFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFIDIgKiAxMDI0
ICogMTAyNAorCisvLyBLZWVwIGF0IG1vc3QgMiUgb2YgdGhlIGZ1bGwsIG5vbi1zbWFsbCwgbWVk
aWEgcmVzb3VyY2UgYnVmZmVyZWQuIFdoZW4gdGhpcworLy8gdGhyZXNob2xkIGlzIHJlYWNoZWQs
IHRoZSBkb3dubG9hZCB0YXNrIGlzIHBhdXNlZC4KKyNkZWZpbmUgSElHSF9RVUVVRV9GQUNUT1Jf
VEhSRVNIT0xEIDAuMDIKKworLy8gS2VlcCBhdCBsZWFzdCAyMCUgb2YgbWF4aW11bSBxdWV1ZSBz
aXplIGJ1ZmZlcmVkLiBXaGVuIHRoaXMgdGhyZXNob2xkIGlzCisvLyByZWFjaGVkLCB0aGUgZG93
bmxvYWQgdGFzayByZXN1bWVzLgorI2RlZmluZSBMT1dfUVVFVUVfRkFDVE9SX1RIUkVTSE9MRCAw
LjIKKwogY2xhc3MgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQgZmluYWwgOiBwdWJsaWMg
UGxhdGZvcm1NZWRpYVJlc291cmNlQ2xpZW50IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShD
YWNoZWRSZXNvdXJjZVN0cmVhbWluZ0NsaWVudCk7CiBwdWJsaWM6CkBAIC0xMjksNiArMTQwLDcg
QEAgc3RydWN0IF9XZWJLaXRXZWJTcmNQcml2YXRlIHsKICAgICBMb2NrIGFkYXB0ZXJMb2NrOwog
ICAgIENvbmRpdGlvbiBhZGFwdGVyQ29uZGl0aW9uOwogICAgIHVpbnQ2NF90IHF1ZXVlU2l6ZSB7
IDAgfTsKKyAgICBib29sIGRvd25sb2FkaW5nU3VzcGVuZGVkIHsgZmFsc2UgfTsKICAgICBHUmVm
UHRyPEdzdEFkYXB0ZXI+IGFkYXB0ZXI7CiAgICAgR1JlZlB0cjxHc3RFdmVudD4gaHR0cEhlYWRl
cnNFdmVudDsKICAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaHR0cEhlYWRlcnM7CkBAIC0x
ODUsNyArMTk3LDcgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYl9zcmNfY2xhc3NfaW5pdChXZWJL
aXRXZWJTcmNDbGFzcyoga2xhc3MpCiAgICAgR3N0RWxlbWVudENsYXNzKiBla2xhc3MgPSBHU1Rf
RUxFTUVOVF9DTEFTUyhrbGFzcyk7CiAgICAgZ3N0X2VsZW1lbnRfY2xhc3NfYWRkX3N0YXRpY19w
YWRfdGVtcGxhdGUoZWtsYXNzLCAmc3JjVGVtcGxhdGUpOwogCi0gICAgZ3N0X2VsZW1lbnRfY2xh
c3Nfc2V0X21ldGFkYXRhKGVrbGFzcywgIldlYktpdCBXZWIgc291cmNlIGVsZW1lbnQiLCAiU291
cmNlIiwgIkhhbmRsZXMgSFRUUC9IVFRQUyB1cmlzIiwKKyAgICBnc3RfZWxlbWVudF9jbGFzc19z
ZXRfbWV0YWRhdGEoZWtsYXNzLCAiV2ViS2l0IFdlYiBzb3VyY2UgZWxlbWVudCIsICJTb3VyY2Uv
TmV0d29yayIsICJIYW5kbGVzIEhUVFAvSFRUUFMgdXJpcyIsCiAgICAgICAgICJQaGlsaXBwZSBO
b3JtYW5kIDxwaGlsbkBpZ2FsaWEuY29tPiIpOwogCiAgICAgLyogQWxsb3dzIHNldHRpbmcgdGhl
IHVyaSB1c2luZyB0aGUgJ2xvY2F0aW9uJyBwcm9wZXJ0eSwgd2hpY2ggaXMgdXNlZApAQCAtMzc4
LDcgKzM5MCw5IEBAIHN0YXRpYyBHc3RGbG93UmV0dXJuIHdlYktpdFdlYlNyY0NyZWF0ZShHc3RQ
dXNoU3JjKiBwdXNoU3JjLCBHc3RCdWZmZXIqKiBidWZmZXIpCiAgICAgICAgIH0pOwogICAgIH0K
IAotICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiZmx1c2hpbmc6ICVzLCBkb2VzSGF2ZUVPUzog
JXMsIHF1ZXVlU2l6ZTogJSIgR19HU0laRV9GT1JNQVQsIGJvb2xGb3JQcmludGluZyhwcml2LT5p
c0ZsdXNoaW5nKSwgYm9vbEZvclByaW50aW5nKHByaXYtPmRvZXNIYXZlRU9TKSwgcHJpdi0+cXVl
dWVTaXplKTsKKyAgICBHU1RfVFJBQ0VfT0JKRUNUKHNyYywgImZsdXNoaW5nOiAlcywgZG9lc0hh
dmVFT1M6ICVzLCBxdWV1ZVNpemU6ICUiIEdfR1NJWkVfRk9STUFUICIsIGRvd25sb2FkaW5nU3Vz
cGVuZGVkOiAlcyIsCisgICAgICAgIGJvb2xGb3JQcmludGluZyhwcml2LT5pc0ZsdXNoaW5nKSwg
Ym9vbEZvclByaW50aW5nKHByaXYtPmRvZXNIYXZlRU9TKSwgcHJpdi0+cXVldWVTaXplLAorICAg
ICAgICBib29sRm9yUHJpbnRpbmcocHJpdi0+ZG93bmxvYWRpbmdTdXNwZW5kZWQpKTsKIAogICAg
IGlmIChwcml2LT5pc0ZsdXNoaW5nKSB7CiAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAi
Rmx1c2hpbmciKTsKQEAgLTQxMCw3ICs0MjQsNyBAQCBzdGF0aWMgR3N0Rmxvd1JldHVybiB3ZWJL
aXRXZWJTcmNDcmVhdGUoR3N0UHVzaFNyYyogcHVzaFNyYywgR3N0QnVmZmVyKiogYnVmZmVyKQog
ICAgIH0KIAogICAgIGlmIChpc0FkYXB0ZXJEcmFpbmVkKSB7Ci0gICAgICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc3JjLCAiQWRhcHRlciBzdGlsbCBlbXB0eSBhZnRlciAzIHNlY29uZHMgb2Ygd2FpdGlu
ZywgYXNzdW1pbmcgRU9TIik7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1Qoc3JjLCAiQWRhcHRl
ciBzdGlsbCBlbXB0eSBhZnRlciA4MDAgbWlsbGktc2Vjb25kcyBvZiB3YWl0aW5nLCBhc3N1bWlu
ZyBFT1MiKTsKICAgICAgICAgcmV0dXJuIEdTVF9GTE9XX0VPUzsKICAgICB9CiAKQEAgLTQ0NCw2
ICs0NTgsMTcgQEAgc3RhdGljIEdzdEZsb3dSZXR1cm4gd2ViS2l0V2ViU3JjQ3JlYXRlKEdzdFB1
c2hTcmMqIHB1c2hTcmMsIEdzdEJ1ZmZlcioqIGJ1ZmZlcikKICAgICAgICAgICAgICAgICAgICAg
cHJpdi0+ZG9lc0hhdmVFT1MgPSB0cnVlOwogICAgICAgICAgICAgfSBlbHNlIGlmIChwcml2LT53
YXNTZWVraW5nKQogICAgICAgICAgICAgICAgIHByaXYtPndhc1NlZWtpbmcgPSBmYWxzZTsKKwor
ICAgICAgICAgICAgaWYgKCFwcml2LT5kb2VzSGF2ZUVPUyAmJiBwcml2LT5oYXZlU2l6ZSAmJiBw
cml2LT5pc1NlZWthYmxlCisgICAgICAgICAgICAgICAgJiYgKHByaXYtPnNpemUgPiBTTUFMTF9N
RURJQV9SRVNPVVJDRV9NQVhfU0laRSkgJiYgcHJpdi0+cmVhZFBvc2l0aW9uCisgICAgICAgICAg
ICAgICAgJiYgKHByaXYtPnJlYWRQb3NpdGlvbiAhPSBwcml2LT5zaXplKQorICAgICAgICAgICAg
ICAgICYmIChwcml2LT5xdWV1ZVNpemUgPCAocHJpdi0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFDVE9S
X1RIUkVTSE9MRCAqIExPV19RVUVVRV9GQUNUT1JfVEhSRVNIT0xEKSkKKyAgICAgICAgICAgICAg
ICAmJiAoR1NUX1NUQVRFKHNyYykgPT0gR1NUX1NUQVRFX1BMQVlJTkcpICYmIHByaXYtPmRvd25s
b2FkaW5nU3VzcGVuZGVkKSB7CisgICAgICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChzcmMs
ICJbQnVmZmVyaW5nXSBBZGFwdGVyIHJ1bm5pbmcgb3V0IG9mIGRhdGEsIHJlc3RhcnRpbmcgZG93
bmxvYWQiKTsKKyAgICAgICAgICAgICAgICBwcml2LT5kb3dubG9hZGluZ1N1c3BlbmRlZCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIHdlYktpdFdlYlNyY01ha2VSZXF1ZXN0KGJhc2VTcmMsIGZh
bHNlKTsKKyAgICAgICAgICAgIH0KKwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1Qoc3JjLCAiRW1wdHkgYWRhcHRlcj8iKTsKICAgICB9CkBAIC0xMDE2LDcgKzEw
NDEsOCBAQCB2b2lkIENhY2hlZFJlc291cmNlU3RyZWFtaW5nQ2xpZW50OjpyZXNwb25zZVJlY2Vp
dmVkKFBsYXRmb3JtTWVkaWFSZXNvdXJjZSYsIGNvbgogICAgICAgICAgICAgcHJpdi0+c2l6ZSA9
IGxlbmd0aDsKICAgICAgICAgICAgIHByaXYtPmlzRHVyYXRpb25TZXQgPSBmYWxzZTsKICAgICAg
ICAgfQotICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgcHJpdi0+aGF2ZVNpemUgPSBmYWxzZTsK
IAogICAgIC8vIFNpZ25hbCB0byBkb3duc3RyZWFtIGlmIHRoaXMgaXMgYW4gSWNlY2FzdCBzdHJl
YW0uCiAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOwpAQCAtMTA5MCw2ICsxMTE2LDE2IEBAIHZv
aWQgQ2FjaGVkUmVzb3VyY2VTdHJlYW1pbmdDbGllbnQ6OmRhdGFSZWNlaXZlZChQbGF0Zm9ybU1l
ZGlhUmVzb3VyY2UmLCBjb25zdCBjCiAgICAgICAgIEdzdEJ1ZmZlciogYnVmZmVyID0gZ3N0X2J1
ZmZlcl9uZXdfd3JhcHBlZChnX21lbWR1cChkYXRhLCBsZW5ndGgpLCBsZW5ndGgpOwogICAgICAg
ICBwcml2LT5xdWV1ZVNpemUgKz0gbGVuZ3RoOwogICAgICAgICBnc3RfYWRhcHRlcl9wdXNoKHBy
aXYtPmFkYXB0ZXIuZ2V0KCksIGJ1ZmZlcik7CisgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3Jj
LCAiW0J1ZmZlcmluZ10gZG93bmxvYWRpbmdTdXNwZW5kZWQ6ICVzIiwgYm9vbEZvclByaW50aW5n
KHByaXYtPmRvd25sb2FkaW5nU3VzcGVuZGVkKSk7CisgICAgICAgIGlmIChwcml2LT5oYXZlU2l6
ZSAmJiAocHJpdi0+c2l6ZSA+IFNNQUxMX01FRElBX1JFU09VUkNFX01BWF9TSVpFKSAmJiAocHJp
di0+cXVldWVTaXplID4gKHByaXYtPnNpemUgKiBISUdIX1FVRVVFX0ZBQ1RPUl9USFJFU0hPTEQp
KQorICAgICAgICAgICAgJiYgIXByaXYtPmRvd25sb2FkaW5nU3VzcGVuZGVkICYmIHByaXYtPmlz
U2Vla2FibGUpIHsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qoc3JjLCAiW0J1ZmZlcmlu
Z10gcXVldWVTaXplOiAlIiBHX0dVSU5UNjRfRk9STUFUICIsIHRocmVzaG9sZDogJWYiLCBwcml2
LT5xdWV1ZVNpemUsCisgICAgICAgICAgICAgICAgcHJpdi0+c2l6ZSAqIEhJR0hfUVVFVUVfRkFD
VE9SX1RIUkVTSE9MRCk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHNyYywgIltCdWZm
ZXJpbmddIFN0b3BwaW5nIHJlc291cmNlIGxvYWRlciIpOworICAgICAgICAgICAgcHJpdi0+ZG93
bmxvYWRpbmdTdXNwZW5kZWQgPSB0cnVlOworICAgICAgICAgICAgcHJpdi0+cmVzb3VyY2UtPnN0
b3AoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQogICAgICAgICBwcml2LT5hZGFw
dGVyQ29uZGl0aW9uLm5vdGlmeU9uZSgpOwogICAgIH0KIH0K
</data>
<flag name="review"
          id="390662"
          type_id="1"
          status="+"
          setter="calvaris"
    />
    <flag name="commit-queue"
          id="390854"
          type_id="3"
          status="-"
          setter="calvaris"
    />
          </attachment>
      

    </bug>

</bugzilla>