<?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>95833</bug_id>
          
          <creation_ts>2012-09-05 02:12:40 -0700</creation_ts>
          <short_desc>[GStreamer] GstBuffer ref race in WebKitWebAudioSrcLoop</short_desc>
          <delta_ts>2012-10-16 11:23: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>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Blocker</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="kdj">kdj.tikka</reporter>
          <assigned_to name="Zan Dobersek">zan</assigned_to>
          <cc>crogers</cc>
    
    <cc>dw.im</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>gouache95</cc>
    
    <cc>pnormand</cc>
    
    <cc>s.choi</cc>
    
    <cc>sh9.choi</cc>
    
    <cc>slomo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>711854</commentid>
    <comment_count>0</comment_count>
    <who name="kdj">kdj.tikka</who>
    <bug_when>2012-09-05 02:12:40 -0700</bug_when>
    <thetext>Hi Mr.Phillipe Normand,

I have found the Gst implementation issue with WebAudio usage.

In WebKitWebAudioSourceGStreamer:WebKitWebAudioSrcLoop(), the data from Audio-Bus is being assigned to Gst local buffer, and respective offset, size is being set.
But on my linux system, I observed the glitch is coming over the usage of simple webaudio app. This app works fine with other browsers.

After taking data dumps at various places, I found that before going to queue-pad, one local gst-buffer pointer is used for getting data from bus. And directly the bus-&gt;data() pointer is assigned to gst-buffer.

So here after doing following my glitch went-off

1. gst-allocation done for the one more gst8 buffer of buffer size.
2. data copied from bus to new buffer
3. then assigned pointer of this new buffer to existing gst-buffer

Please let me know your views over this fix.

Thanks and Regards,
kdj
kdj.tikka@gmail.com</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711861</commentid>
    <comment_count>1</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-05 02:23:43 -0700</bug_when>
    <thetext>What do you mean by glitch? Something similar to bug 82347 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711864</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-05 02:28:57 -0700</bug_when>
    <thetext>Thanks for investigating this issue btw, I&apos;d be happy to review your patch, feel free to attach it and following our contributor guidelines, http://www.webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711875</commentid>
    <comment_count>3</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-05 02:55:06 -0700</bug_when>
    <thetext>I&apos;m not sure doing a copy is the most efficient approach though, maybe the loop is spinning too fast and we&apos;d need to wait for each buffer to be properly processed. Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>711901</commentid>
    <comment_count>4</comment_count>
    <who name="kdj">kdj.tikka</who>
    <bug_when>2012-09-05 03:29:28 -0700</bug_when>
    <thetext>Thanks Mr.Normand for replying,
Yes, thinking on same line; trying one optimized solution; &apos;ll update as get it working.
 
(In reply to comment #3)
&gt; I&apos;m not sure doing a copy is the most efficient approach though, maybe the loop is spinning too fast and we&apos;d need to wait for each buffer to be properly processed. Not sure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717942</commentid>
    <comment_count>5</comment_count>
      <attachid>163522</attachid>
    <who name="kdj">kdj.tikka</who>
    <bug_when>2012-09-11 23:09:57 -0700</bug_when>
    <thetext>Created attachment 163522
The webaudio glitch issue went-off with gst-buffer-allocation and data copy from bus to new buffer. Using this new buffer to connect to queue-pad 

To Webkit.org: Mr. Phillipe Normand.
Please review the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>717948</commentid>
    <comment_count>6</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-11 23:20:25 -0700</bug_when>
    <thetext>So you&apos;re sure doing a buffer copy is the only viable solution?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>718027</commentid>
    <comment_count>7</comment_count>
    <who name="kdj">kdj.tikka</who>
    <bug_when>2012-09-12 01:09:31 -0700</bug_when>
    <thetext>With the constraints, as of now it seems the solution.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719312</commentid>
    <comment_count>8</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-13 03:56:41 -0700</bug_when>
    <thetext>the call to AudioIOCallback::render should correctly fill-in the AudioBus channels during all the time needed. Maybe we should keep a buffer list around instead of re-creating the GstBuffer at each iteration of the loop.

Sebastian, wdyt?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719318</commentid>
    <comment_count>9</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-13 04:10:25 -0700</bug_when>
    <thetext>&lt; slomo&gt; philn: re bug #95833, yes sounds like a good idea</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719451</commentid>
    <comment_count>10</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-13 07:36:44 -0700</bug_when>
    <thetext>*** Bug 82347 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>719456</commentid>
    <comment_count>11</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-13 07:38:09 -0700</bug_when>
    <thetext>kaustubh, would you mind trying the buffer list approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>720243</commentid>
    <comment_count>12</comment_count>
    <who name="kdj">kdj.tikka</who>
    <bug_when>2012-09-13 19:44:59 -0700</bug_when>
    <thetext>Actually I am busy with Convolver Node issue, want to get first working Convolver Node, Bug 96644. Bit difficult to get time for &apos;efficient approach&apos; implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722539</commentid>
    <comment_count>13</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-09-18 00:08:45 -0700</bug_when>
    <thetext>Zan, would you be interested to work on this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>722915</commentid>
    <comment_count>14</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-09-18 11:12:03 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Zan, would you be interested to work on this patch?

OK, I&apos;ll have a look and produce something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>725230</commentid>
    <comment_count>15</comment_count>
    <who name="kdj">kdj.tikka</who>
    <bug_when>2012-09-21 00:34:51 -0700</bug_when>
    <thetext>Thanks Mr.Zen and Mr.Philippe, for taking it. I am patched up with other issues. Definitely will come back after getting over it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738097</commentid>
    <comment_count>16</comment_count>
      <attachid>167826</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-09 12:54:11 -0700</bug_when>
    <thetext>Created attachment 167826
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>738121</commentid>
    <comment_count>17</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-09 13:12:39 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; Created an attachment (id=167826) [details]
&gt; Patch

This patch takes a bit different approach. In each src loop GstBuffer is created for each channel, with the channel data being set to point to the allocated data of the corresponding buffer.

After rendering each buffer is chained to the appropriate GstPad. It works as well, the popping noise is gone.

I&apos;ll look further into possibly just creating a permanent GstBuffer for each channel before the looping even begins, zeroing it out before each rendering. It would spare a lot of malloc calls, but the main problem is how exactly gst_pad_chain behaves with the same buffer being passed to it each time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>741793</commentid>
    <comment_count>18</comment_count>
      <attachid>167826</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-10-15 00:08:40 -0700</bug_when>
    <thetext>Comment on attachment 167826
Patch

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

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:322
&gt; +    GSList* channelBufferList = 0;

What about using a GstBufferList? Seems like it would fit here instead of a GSList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743275</commentid>
    <comment_count>19</comment_count>
      <attachid>167826</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-16 10:39:40 -0700</bug_when>
    <thetext>Comment on attachment 167826
Patch

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

&gt;&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:322
&gt;&gt; +    GSList* channelBufferList = 0;
&gt; 
&gt; What about using a GstBufferList? Seems like it would fit here instead of a GSList.

I think it&apos;s not worth the trouble. The current approach pushes just a buffer to each pad while the buffer list is most helpful when pushing a bunch of buffers to the pad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743286</commentid>
    <comment_count>20</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-16 10:45:28 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; I&apos;ll look further into possibly just creating a permanent GstBuffer for each channel before the looping even begins, zeroing it out before each rendering. It would spare a lot of malloc calls, but the main problem is how exactly gst_pad_chain behaves with the same buffer being passed to it each time.

Using only one specific GstBuffer for each channel doesn&apos;t seem to work because the sound is again distorted.

In discussion on IRC Philippe recommended using GstBufferPool which seems ideal. Unfortunately it&apos;s a new addition to GStreamer, available from 1.0 onwards.

I&apos;m recommending the approach in the latest patch as the one to use for now, until migration to GStreamer 1.0 is done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743315</commentid>
    <comment_count>21</comment_count>
      <attachid>167826</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2012-10-16 11:04:00 -0700</bug_when>
    <thetext>Comment on attachment 167826
Patch

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

Alright, thanks a lot Zan :) We should indeed port this code to 1.0 soon. I started a branch but haven&apos;t got far yet... too busy :(

&gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:325
&gt; +        GstBuffer* channelBuffer = gst_buffer_new_and_alloc(bufferSize);

It&apos;d be good to have an ASSERT(channelBuffer) here I think</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>743339</commentid>
    <comment_count>22</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2012-10-16 11:23:16 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; &gt; Source/WebCore/platform/audio/gstreamer/WebKitWebAudioSourceGStreamer.cpp:325
&gt; &gt; +        GstBuffer* channelBuffer = gst_buffer_new_and_alloc(bufferSize);
&gt; 
&gt; It&apos;d be good to have an ASSERT(channelBuffer) here I think

Done. Landed in r131478.
http://trac.webkit.org/changeset/131478</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>163522</attachid>
            <date>2012-09-11 23:09:57 -0700</date>
            <delta_ts>2012-10-09 12:54:03 -0700</delta_ts>
            <desc>The webaudio glitch issue went-off with gst-buffer-allocation and data copy from bus to new buffer. Using this new buffer to connect to queue-pad </desc>
            <filename>patch.log</filename>
            <type>text/plain</type>
            <size>3112</size>
            <attacher name="kdj">kdj.tikka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyODI2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEyLTA5LTExICBrYXVzdHVi
aCBqICA8a2F1c3R1YmguakBzYW1zdW5nLmNvbT4KKworICAgICAgICBXZWJBdWRpbyBXZWJLaXRX
ZWJBdWRpb1NyY0xvb3AoKSBoYXMgZ3N0LWJ1ZmZlciBpbXBsZW1lbnRhdGlvbiBpc3N1ZSBjYXVz
aW5nIGdsaXRjaAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9OTU4MzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBCZWZvcmUgZ29pbmcgdG8gcXVldWUtcGFkLCBvbmUgbG9jYWwgZ3N0LWJ1ZmZlciBwb2ludGVy
IGlzIHVzZWQgZm9yIGdldHRpbmcgZGF0YSBmcm9tIGJ1cywgcmF0aGVyIGdpdmluZyBkaXJlY3Rs
eSBhc3NpZ25pbmcgQnVzIGRhdGEgcG9pbnRlci4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJLaXRXZWJBdWRp
b1NvdXJjZUdTdHJlYW1lci5jcHA6CisgICAgICAgIChfV2ViS2l0V2ViQXVkaW9Tb3VyY2VQcml2
YXRlKToKKyAgICAgICAgKHdlYmtpdF93ZWJfYXVkaW9fc3JjX2luaXQpOgorICAgICAgICAod2Vi
S2l0V2ViQXVkaW9TcmNMb29wKToKKwogMjAxMi0wOS0xMSAgUnl1YW4gQ2hvaSAgPHJ5dWFuLmNo
b2lAc2Ftc3VuZy5jb20+CiAKICAgICAgICAgW0NNQUtFXSBTdXBwbHkgZmVhdHVyZSBkZWZpbmVz
IHRvIENvZGVHZW5lcmF0b3JUZXN0UnVubmVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0
V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCShyZXZpc2lvbiAxMjgyNTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw2IEBACiAgICAgQXVkaW9CdXMq
IGJ1czsKICAgICBBdWRpb0lPQ2FsbGJhY2sqIHByb3ZpZGVyOwogICAgIGd1aW50IGZyYW1lc1Rv
UHVsbDsKLSAgICBndWludDY0IGN1cnJlbnRCdWZmZXJPZmZzZXQ7CiAKICAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IGludGVybGVhdmU7CiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiB3YXZFbmNvZGVy
OwpAQCAtMTg1LDcgKzE4NCw3IEBACiAKICAgICBwcml2LT5wcm92aWRlciA9IDA7CiAgICAgcHJp
di0+YnVzID0gMDsKLSAgICBwcml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0ID0gMDsKKyAgICBwcml2
LT5wYWRzID0gMDsKIAogICAgIHByaXYtPm11dGV4ID0gZ19uZXcoR1N0YXRpY1JlY011dGV4LCAx
KTsKICAgICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5pdChwcml2LT5tdXRleCk7CkBAIC0zMzEsMTMg
KzMzMCwxOCBAQAogICAgICAgICBHc3RQYWQqIHBhZCA9IHN0YXRpY19jYXN0PEdzdFBhZCo+KGdf
c2xpc3RfbnRoX2RhdGEocHJpdi0+cGFkcywgaW5kZXgpKTsKIAogICAgICAgICBHc3RCdWZmZXIq
IGJ1ZmZlciA9IGdzdF9idWZmZXJfbmV3KCk7CisKKyAgICAgICAgLy8gQ3JlYXRpbmcgR3N0LWJ1
ZmZlciBmb3IgY29weWluZyBwdWxsZWQgZGF0YSBmcm9tIGF1ZGlvLWJ1cywKKyAgICAgICAgLy8g
QWxsb2NhdGlvbiBvZiB0aGlzIGJ1ZmZlciBpcyBiYXNlZCBvbiB0aGUgTnVtYmVyIG9mIGF1ZGlv
IGZyYW1lcyB0byBwdWxsIGF0IGVhY2ggaXRlcmF0aW9uLgorICAgICAgICBndWludDgqIGNvcHlC
dWZmZXJBc3luYyA9IChndWludDggKilnX21hbGxvYyhidWZmZXJTaXplKTsKKworICAgICAgICBB
U1NFUlQoY29weUJ1ZmZlckFzeW5jKTsKICAgICAgICAgQVNTRVJUKGJ1ZmZlcik7CiAgICAgICAg
IEFTU0VSVCghR1NUX0JVRkZFUl9NQUxMT0NEQVRBKGJ1ZmZlcikpOwogCi0gICAgICAgIEdTVF9C
VUZGRVJfREFUQShidWZmZXIpID0gcmVpbnRlcnByZXRfY2FzdDxndWludDgqPihjb25zdF9jYXN0
PGZsb2F0Kj4ocHJpdi0+YnVzLT5jaGFubmVsKGluZGV4KS0+ZGF0YSgpKSk7CisgICAgICAgIG1l
bWNweShjb3B5QnVmZmVyQXN5bmMsIHJlaW50ZXJwcmV0X2Nhc3Q8Z3VpbnQ4Kj4oY29uc3RfY2Fz
dDxmbG9hdCo+KHByaXYtPmJ1cy0+Y2hhbm5lbChpbmRleCktPmRhdGEoKSkpLCBidWZmZXJTaXpl
KTsKKyAgICAgICAgR1NUX0JVRkZFUl9EQVRBKGJ1ZmZlcikgPSBjb3B5QnVmZmVyQXN5bmM7CiAg
ICAgICAgIEdTVF9CVUZGRVJfU0laRShidWZmZXIpID0gYnVmZmVyU2l6ZTsKLSAgICAgICAgR1NU
X0JVRkZFUl9PRkZTRVQoYnVmZmVyKSA9IHByaXYtPmN1cnJlbnRCdWZmZXJPZmZzZXQ7Ci0gICAg
ICAgIEdTVF9CVUZGRVJfT0ZGU0VUX0VORChidWZmZXIpID0gcHJpdi0+Y3VycmVudEJ1ZmZlck9m
ZnNldCArIHByaXYtPmZyYW1lc1RvUHVsbDsKIAogICAgICAgICBHUmVmUHRyPEdzdENhcHM+IG1v
bm9DYXBzID0gYWRvcHRHUmVmKGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2FtcGxl
UmF0ZSkpOwogICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9z
dHJ1Y3R1cmUobW9ub0NhcHMuZ2V0KCksIDApOwpAQCAtMzQ3LDggKzM1MSw2IEBACiAKICAgICAg
ICAgZ3N0X3BhZF9jaGFpbihwYWQsIGJ1ZmZlcik7CiAgICAgfQotCi0gICAgcHJpdi0+Y3VycmVu
dEJ1ZmZlck9mZnNldCArPSBwcml2LT5mcmFtZXNUb1B1bGw7CiB9CiAKIHN0YXRpYyBHc3RTdGF0
ZUNoYW5nZVJldHVybiB3ZWJLaXRXZWJBdWRpb1NyY0NoYW5nZVN0YXRlKEdzdEVsZW1lbnQqIGVs
ZW1lbnQsIEdzdFN0YXRlQ2hhbmdlIHRyYW5zaXRpb24pCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167826</attachid>
            <date>2012-10-09 12:54:11 -0700</date>
            <delta_ts>2012-10-16 11:04:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-95833-20121009125313.patch</filename>
            <type>text/plain</type>
            <size>6804</size>
            <attacher name="Zan Dobersek">zan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwNzI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGFjNzViYTA5MmM1OWI4
MTFlNjRmNGZiMzgzN2JiZDI1ZTBlNmU3NS4uMzg4NGEwYzQ3NDFmNGU5NmExYjMxNDcxYjQ4ZGEy
MWQyNWY0NDc5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDEyLTEwLTA5ICBaYW4g
RG9iZXJzZWsgIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
R3N0QnVmZmVyIHJlZiByYWNlIGluIFdlYktpdFdlYkF1ZGlvU3JjTG9vcAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTU4MzMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGUgcmVuZGVyIGJ1cyB1c2VkIGlu
IEdTdHJlYW1lcidzIGltcGxlbWVudGF0aW9uIG9mIEF1ZGlvRGVzdGluYXRpb24gbm8gbG9uZ2Vy
CisgICAgICAgIGFsbG9jYXRlcyBtZW1vcnkgZm9yIGVhY2ggb2YgaXRzIGNoYW5uZWxzLiBSYXRo
ZXIgdGhhbiB0aGF0LCB3aGVuIGxvb3BpbmcsIHRoZQorICAgICAgICBkYXRhIGlzIHJlbmRlcmVk
IGludG8gYSBjaGFubmVsLXNwZWNpZmljIEdzdEJ1ZmZlci4gRWFjaCBidWZmZXIgaXMgdGhlbiBj
aGFpbmVkCisgICAgICAgIHRvIHRoZSBhcHByb3ByaWF0ZSBHc3RQYWQsIGFzIGhhcyBiZWVuIHRo
ZSBjYXNlIGJlZm9yZS4KKworICAgICAgICBObyBuZXcgdGVzdHMgLSB0aGVyZSBhcmUgdGVzdHMg
Y292ZXJpbmcgdGhpcyBjaGFuZ2UgYnV0IHRoZXkgYXJlIG5vdCB5ZXQgd29ya2luZworICAgICAg
ICBvbiB0aGUgR1RLIHBvcnQgb3IgYW55IG90aGVyIEdTdHJlYW1lciBpbXBsZW1lbnRhdGlvbiBv
ZiBXZWIgQXVkaW8uCisKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9E
ZXN0aW5hdGlvbkdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb0Rlc3RpbmF0
aW9uR1N0cmVhbWVyOjpBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOgor
ICAgICAgICAoX1dlYktpdFdlYkF1ZGlvU291cmNlUHJpdmF0ZSk6IFJlbW92ZSBhbiB1bnVzZWQg
bWVtYmVyIHZhcmlhYmxlLgorICAgICAgICAod2Via2l0X3dlYl9hdWRpb19zcmNfaW5pdCk6IFJl
bW92ZSBhbiB1bm5lY2Vzc2FyeSBsaW5lLgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNDb25z
dHJ1Y3RlZCk6IERpdHRvLgorICAgICAgICAod2ViS2l0V2ViQXVkaW9TcmNMb29wKToKKwogMjAx
Mi0xMC0wOCAgU2ltb24gSGF1c21hbm4gIDxzaW1vbi5oYXVzbWFubkBkaWdpYS5jb20+CiAKICAg
ICAgICAgW1F0XSBNYWtlIFJlbmRlclRoZW1lUVN0eWxlL1Njcm9sbGJhclRoZW1lUVN0eWxlIGNv
bXBpbGUgd2l0aG91dCBRU3R5bGUvUXRXaWRnZXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9EZXN0aW5hdGlv
bkdTdHJlYW1lci5jcHAKaW5kZXggMDFhYTM3MWNmNjU5MDVlMzNhNDA1MDFjZGE1YWE0ZTYzMmFh
MGQxZS4uNTQxYjI2ZDljYThkMWQyMzRlYjFiYWI3NTc4NDAxOWQxMjUyYTYzZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRp
b25HU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmNwcApAQCAtNTMsNyArNTMsNyBAQCBzdGF0
aWMgdm9pZCBvbkdTdHJlYW1lcldhdnBhcnNlUGFkQWRkZWRDYWxsYmFjayhHc3RFbGVtZW50KiBl
bGVtZW50LCBHc3RQYWQqIHBhZAogCiBBdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyOjpBdWRpb0Rl
c3RpbmF0aW9uR1N0cmVhbWVyKEF1ZGlvSU9DYWxsYmFjayYgY2FsbGJhY2ssIGZsb2F0IHNhbXBs
ZVJhdGUpCiAgICAgOiBtX2NhbGxiYWNrKGNhbGxiYWNrKQotICAgICwgbV9yZW5kZXJCdXMoMiwg
ZnJhbWVzVG9QdWxsLCB0cnVlKQorICAgICwgbV9yZW5kZXJCdXMoMiwgZnJhbWVzVG9QdWxsLCBm
YWxzZSkKICAgICAsIG1fc2FtcGxlUmF0ZShzYW1wbGVSYXRlKQogICAgICwgbV9pc1BsYXlpbmco
ZmFsc2UpCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL1dlYktpdFdlYkF1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cAppbmRleCBjM2JjYmJlZWFmMjI1NTJhZDBkMmE5MWM1Njg2M2ZlODU1NDFiNWU2Li41MWJmMWRk
NmZmN2ExYTNlNjQyZjEzZDc4YjEyZGY4YTY1MGI5MzlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvV2ViS2l0V2ViQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9XZWJL
aXRXZWJBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTQ5LDcgKzQ5LDYgQEAgc3RydWN0IF9X
ZWJLaXRXZWJBdWRpb1NvdXJjZVByaXZhdGUgewogICAgIEF1ZGlvQnVzKiBidXM7CiAgICAgQXVk
aW9JT0NhbGxiYWNrKiBwcm92aWRlcjsKICAgICBndWludCBmcmFtZXNUb1B1bGw7Ci0gICAgZ3Vp
bnQ2NCBjdXJyZW50QnVmZmVyT2Zmc2V0OwogCiAgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBpbnRl
cmxlYXZlOwogICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gd2F2RW5jb2RlcjsKQEAgLTE4NSw3ICsx
ODQsNiBAQCBzdGF0aWMgdm9pZCB3ZWJraXRfd2ViX2F1ZGlvX3NyY19pbml0KFdlYktpdFdlYkF1
ZGlvU3JjKiBzcmMpCiAKICAgICBwcml2LT5wcm92aWRlciA9IDA7CiAgICAgcHJpdi0+YnVzID0g
MDsKLSAgICBwcml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0ID0gMDsKIAogICAgIHByaXYtPm11dGV4
ID0gZ19uZXcoR1N0YXRpY1JlY011dGV4LCAxKTsKICAgICBnX3N0YXRpY19yZWNfbXV0ZXhfaW5p
dChwcml2LT5tdXRleCk7CkBAIC0yMTksNyArMjE3LDYgQEAgc3RhdGljIHZvaWQgd2ViS2l0V2Vi
QXVkaW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgZ3N0X2Jpbl9hZGRfbWFu
eShHU1RfQklOKHNyYyksIHByaXYtPmludGVybGVhdmUuZ2V0KCksIHByaXYtPndhdkVuY29kZXIu
Z2V0KCksIE5VTEwpOwogICAgIGdzdF9lbGVtZW50X2xpbmtfcGFkc19mdWxsKHByaXYtPmludGVy
bGVhdmUuZ2V0KCksICJzcmMiLCBwcml2LT53YXZFbmNvZGVyLmdldCgpLCAic2luayIsIEdTVF9Q
QURfTElOS19DSEVDS19OT1RISU5HKTsKIAotCiAgICAgLy8gRm9yIGVhY2ggY2hhbm5lbCBvZiB0
aGUgYnVzIGNyZWF0ZSBhIG5ldyB1cHN0cmVhbSBicmFuY2ggZm9yIGludGVybGVhdmUsIGxpa2U6
CiAgICAgLy8gcXVldWUgISBjYXBzZmlsdGVyICEgYXVkaW9jb252ZXJ0LiB3aGljaCBpcyBwbHVn
Z2VkIHRvIGEgbmV3IGludGVybGVhdmUgcmVxdWVzdCBzaW5rcGFkLgogICAgIGZvciAodW5zaWdu
ZWQgY2hhbm5lbEluZGV4ID0gMDsgY2hhbm5lbEluZGV4IDwgcHJpdi0+YnVzLT5udW1iZXJPZkNo
YW5uZWxzKCk7IGNoYW5uZWxJbmRleCsrKSB7CkBAIC0yNDcsNyArMjQ0LDYgQEAgc3RhdGljIHZv
aWQgd2ViS2l0V2ViQXVkaW9TcmNDb25zdHJ1Y3RlZChHT2JqZWN0KiBvYmplY3QpCiAgICAgfQog
ICAgIHByaXYtPnBhZHMgPSBnX3NsaXN0X3JldmVyc2UocHJpdi0+cGFkcyk7CiAKLQogICAgIC8v
IHdhdmVuYydzIHNyYyBwYWQgaXMgdGhlIG9ubHkgdmlzaWJsZSBwYWQgb2Ygb3VyIGVsZW1lbnQu
CiAgICAgR1JlZlB0cjxHc3RQYWQ+IHRhcmdldFBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChwcml2LT53YXZFbmNvZGVyLmdldCgpLCAic3JjIikpOwogICAgIGdzdF9n
aG9zdF9wYWRfc2V0X3RhcmdldChHU1RfR0hPU1RfUEFEKHByaXYtPnNvdXJjZVBhZCksIHRhcmdl
dFBhZC5nZXQoKSk7CkBAIC0zMjMsMzIgKzMxOSwzMiBAQCBzdGF0aWMgdm9pZCB3ZWJLaXRXZWJB
dWRpb1NyY0xvb3AoV2ViS2l0V2ViQXVkaW9TcmMqIHNyYykKICAgICBpZiAoIXByaXYtPnByb3Zp
ZGVyIHx8ICFwcml2LT5idXMpCiAgICAgICAgIHJldHVybjsKIAotICAgIC8vIEZJWE1FOiBBZGQg
c3VwcG9ydCBmb3IgbG9jYWwvbGl2ZSBhdWRpbyBpbnB1dC4KLSAgICBwcml2LT5wcm92aWRlci0+
cmVuZGVyKDAsIHByaXYtPmJ1cywgcHJpdi0+ZnJhbWVzVG9QdWxsKTsKLQorICAgIEdTTGlzdCog
Y2hhbm5lbEJ1ZmZlckxpc3QgPSAwOwogICAgIHVuc2lnbmVkIGJ1ZmZlclNpemUgPSBwcml2LT5m
cmFtZXNUb1B1bGwgKiBzaXplb2YoZmxvYXQpOwotICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAw
OyBpbmRleCA8IGdfc2xpc3RfbGVuZ3RoKHByaXYtPnBhZHMpOyBpbmRleCsrKSB7Ci0gICAgICAg
IEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8R3N0UGFkKj4oZ19zbGlzdF9udGhfZGF0YShwcml2
LT5wYWRzLCBpbmRleCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnX3NsaXN0X2xl
bmd0aChwcml2LT5wYWRzKTsgaSsrKSB7CisgICAgICAgIEdzdEJ1ZmZlciogY2hhbm5lbEJ1ZmZl
ciA9IGdzdF9idWZmZXJfbmV3X2FuZF9hbGxvYyhidWZmZXJTaXplKTsKKyAgICAgICAgY2hhbm5l
bEJ1ZmZlckxpc3QgPSBnX3NsaXN0X3ByZXBlbmQoY2hhbm5lbEJ1ZmZlckxpc3QsIGNoYW5uZWxC
dWZmZXIpOworICAgICAgICBwcml2LT5idXMtPnNldENoYW5uZWxNZW1vcnkoaSwgcmVpbnRlcnBy
ZXRfY2FzdDxmbG9hdCo+KEdTVF9CVUZGRVJfREFUQShjaGFubmVsQnVmZmVyKSksIHByaXYtPmZy
YW1lc1RvUHVsbCk7CisgICAgfQorICAgIGNoYW5uZWxCdWZmZXJMaXN0ID0gZ19zbGlzdF9yZXZl
cnNlKGNoYW5uZWxCdWZmZXJMaXN0KTsKIAotICAgICAgICBHc3RCdWZmZXIqIGJ1ZmZlciA9IGdz
dF9idWZmZXJfbmV3KCk7Ci0gICAgICAgIEFTU0VSVChidWZmZXIpOwotICAgICAgICBBU1NFUlQo
IUdTVF9CVUZGRVJfTUFMTE9DREFUQShidWZmZXIpKTsKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIGxvY2FsL2xpdmUgYXVkaW8gaW5wdXQuCisgICAgcHJpdi0+cHJvdmlkZXItPnJlbmRl
cigwLCBwcml2LT5idXMsIHByaXYtPmZyYW1lc1RvUHVsbCk7CiAKLSAgICAgICAgR1NUX0JVRkZF
Ul9EQVRBKGJ1ZmZlcikgPSByZWludGVycHJldF9jYXN0PGd1aW50OCo+KGNvbnN0X2Nhc3Q8Zmxv
YXQqPihwcml2LT5idXMtPmNoYW5uZWwoaW5kZXgpLT5kYXRhKCkpKTsKLSAgICAgICAgR1NUX0JV
RkZFUl9TSVpFKGJ1ZmZlcikgPSBidWZmZXJTaXplOwotICAgICAgICBHU1RfQlVGRkVSX09GRlNF
VChidWZmZXIpID0gcHJpdi0+Y3VycmVudEJ1ZmZlck9mZnNldDsKLSAgICAgICAgR1NUX0JVRkZF
Ul9PRkZTRVRfRU5EKGJ1ZmZlcikgPSBwcml2LT5jdXJyZW50QnVmZmVyT2Zmc2V0ICsgcHJpdi0+
ZnJhbWVzVG9QdWxsOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBnX3NsaXN0X2xlbmd0
aChwcml2LT5wYWRzKTsgaSsrKSB7CisgICAgICAgIEdzdFBhZCogcGFkID0gc3RhdGljX2Nhc3Q8
R3N0UGFkKj4oZ19zbGlzdF9udGhfZGF0YShwcml2LT5wYWRzLCBpKSk7CisgICAgICAgIEdzdEJ1
ZmZlciogY2hhbm5lbEJ1ZmZlciA9IHN0YXRpY19jYXN0PEdzdEJ1ZmZlcio+KGdfc2xpc3RfbnRo
X2RhdGEoY2hhbm5lbEJ1ZmZlckxpc3QsIGkpKTsKIAogICAgICAgICBHUmVmUHRyPEdzdENhcHM+
IG1vbm9DYXBzID0gYWRvcHRHUmVmKGdldEdTdHJlYW1lck1vbm9BdWRpb0NhcHMocHJpdi0+c2Ft
cGxlUmF0ZSkpOwogICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dl
dF9zdHJ1Y3R1cmUobW9ub0NhcHMuZ2V0KCksIDApOwotICAgICAgICBHc3RBdWRpb0NoYW5uZWxQ
b3NpdGlvbiBjaGFubmVsUG9zaXRpb24gPSB3ZWJLaXRXZWJBdWRpb0dTdHJlYW1lckNoYW5uZWxQ
b3NpdGlvbihpbmRleCk7CisgICAgICAgIEdzdEF1ZGlvQ2hhbm5lbFBvc2l0aW9uIGNoYW5uZWxQ
b3NpdGlvbiA9IHdlYktpdFdlYkF1ZGlvR1N0cmVhbWVyQ2hhbm5lbFBvc2l0aW9uKGkpOwogICAg
ICAgICBnc3RfYXVkaW9fc2V0X2NoYW5uZWxfcG9zaXRpb25zKHN0cnVjdHVyZSwgJmNoYW5uZWxQ
b3NpdGlvbik7Ci0gICAgICAgIGdzdF9idWZmZXJfc2V0X2NhcHMoYnVmZmVyLCBtb25vQ2Fwcy5n
ZXQoKSk7CisgICAgICAgIGdzdF9idWZmZXJfc2V0X2NhcHMoY2hhbm5lbEJ1ZmZlciwgbW9ub0Nh
cHMuZ2V0KCkpOwogCi0gICAgICAgIGdzdF9wYWRfY2hhaW4ocGFkLCBidWZmZXIpOworICAgICAg
ICBnc3RfcGFkX2NoYWluKHBhZCwgY2hhbm5lbEJ1ZmZlcik7CiAgICAgfQogCi0gICAgcHJpdi0+
Y3VycmVudEJ1ZmZlck9mZnNldCArPSBwcml2LT5mcmFtZXNUb1B1bGw7CisgICAgZ19zbGlzdF9m
cmVlKGNoYW5uZWxCdWZmZXJMaXN0KTsKIH0KIAogc3RhdGljIEdzdFN0YXRlQ2hhbmdlUmV0dXJu
IHdlYktpdFdlYkF1ZGlvU3JjQ2hhbmdlU3RhdGUoR3N0RWxlbWVudCogZWxlbWVudCwgR3N0U3Rh
dGVDaGFuZ2UgdHJhbnNpdGlvbikK
</data>
<flag name="review"
          id="180606"
          type_id="1"
          status="+"
          setter="pnormand"
    />
    <flag name="commit-queue"
          id="182109"
          type_id="3"
          status="-"
          setter="pnormand"
    />
          </attachment>
      

    </bug>

</bugzilla>