<?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>101132</bug_id>
          
          <creation_ts>2012-11-02 17:12:59 -0700</creation_ts>
          <short_desc>[EFL] Use mutex locker in wakeUp() to ensure thread-safety.</short_desc>
          <delta_ts>2012-11-28 06:39:27 -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>WebKit EFL</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>101135</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Byungwoo Lee">bw80.lee</reporter>
          <assigned_to name="Byungwoo Lee">bw80.lee</assigned_to>
          <cc>cdumez</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>levin+threading</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rakuco</cc>
    
    <cc>sw0524.lee</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>youngtaeck.song</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>757775</commentid>
    <comment_count>0</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-11-02 17:12:59 -0700</bug_when>
    <thetext>RunLoop::wakeUp() can be called by multiple thread.
but ecore_pipe_write() function itself doesn&apos;t consider the thread-safety.

Additional locking for the ecore pipe is needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757851</commentid>
    <comment_count>1</comment_count>
      <attachid>172193</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-11-02 19:16:35 -0700</bug_when>
    <thetext>Created attachment 172193
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>770114</commentid>
    <comment_count>2</comment_count>
      <attachid>172193</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-18 05:24:42 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

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

&gt; Source/WebCore/platform/efl/RunLoopEfl.cpp:105
&gt; +    MutexLocker locker(m_pipeLock);

The caller (RunLoop::dispatch()) seems to be already thread safe (using m_functionQueueLock mutex). Could you elaborate why we need an additional mutex in RunLoop::wakeUp()?
Also note that no other port seems to be using a mutex in RunLoop::wakeUp(). We should avoid mutexes unless strictly required as it may impact performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>773460</commentid>
    <comment_count>3</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-11-21 18:12:45 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 172193 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172193&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/efl/RunLoopEfl.cpp:105
&gt; &gt; +    MutexLocker locker(m_pipeLock);
&gt; 
&gt; The caller (RunLoop::dispatch()) seems to be already thread safe (using m_functionQueueLock mutex). Could you elaborate why we need an additional mutex in RunLoop::wakeUp()?
The mutex that is used in RunLoop::dispatch() is not for the wakeUp() but for the m_functionQueue. So I have a patch about this. (You can see the details in Bug 98580)
As you can see in the comment of the bug, RunLoop::wakeUp() is used in the Connection::wakeUpRunLoop() without any protection.
So protecting wakeUp() itself is needed.

&gt; Also note that no other port seems to be using a mutex in RunLoop::wakeUp(). We should avoid mutexes unless strictly required as it may impact performance.
Yes, protecting with mutex can make some performance issue.
But as I know, other ports use thread-safe function for wake up loop.
Unfortunately, EFL doesn&apos;t provide such thing for now.
(And if it provide such API, the API will use mutex or some other protection mechanism to ensure the thread-safety)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774222</commentid>
    <comment_count>4</comment_count>
      <attachid>172193</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-22 22:36:56 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/efl/RunLoopEfl.cpp:105
&gt;&gt;&gt; +    MutexLocker locker(m_pipeLock);
&gt;&gt; 
&gt;&gt; The caller (RunLoop::dispatch()) seems to be already thread safe (using m_functionQueueLock mutex). Could you elaborate why we need an additional mutex in RunLoop::wakeUp()?
&gt;&gt; Also note that no other port seems to be using a mutex in RunLoop::wakeUp(). We should avoid mutexes unless strictly required as it may impact performance.
&gt; 
&gt; The mutex that is used in RunLoop::dispatch() is not for the wakeUp() but for the m_functionQueue. So I have a patch about this. (You can see the details in Bug 98580)
&gt; As you can see in the comment of the bug, RunLoop::wakeUp() is used in the Connection::wakeUpRunLoop() without any protection.
&gt; So protecting wakeUp() itself is needed.

Byungwoo, I asked to raster if ecore_pipe_write is thread-safety. According to raster, ecore_pipe_write is intended for the thread. As far as I understand, ecore_pipe_write is one-way communication from thread to mainloop which created a pipe. Then, thread just writes data to the pipe. So, raster said ecore_pipe_write is thread safety. How do you think ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774235</commentid>
    <comment_count>5</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-11-22 23:14:51 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 172193 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=172193&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebCore/platform/efl/RunLoopEfl.cpp:105
&gt; &gt;&gt;&gt; +    MutexLocker locker(m_pipeLock);
&gt; &gt;&gt; 
&gt; &gt;&gt; The caller (RunLoop::dispatch()) seems to be already thread safe (using m_functionQueueLock mutex). Could you elaborate why we need an additional mutex in RunLoop::wakeUp()?
&gt; &gt;&gt; Also note that no other port seems to be using a mutex in RunLoop::wakeUp(). We should avoid mutexes unless strictly required as it may impact performance.
&gt; &gt; 
&gt; &gt; The mutex that is used in RunLoop::dispatch() is not for the wakeUp() but for the m_functionQueue. So I have a patch about this. (You can see the details in Bug 98580)
&gt; &gt; As you can see in the comment of the bug, RunLoop::wakeUp() is used in the Connection::wakeUpRunLoop() without any protection.
&gt; &gt; So protecting wakeUp() itself is needed.
&gt; 
&gt; Byungwoo, I asked to raster if ecore_pipe_write is thread-safety. According to raster, ecore_pipe_write is intended for the thread. As far as I understand, ecore_pipe_write is one-way communication from thread to mainloop which created a pipe. Then, thread just writes data to the pipe. So, raster said ecore_pipe_write is thread safety. How do you think ?

Really? I checked the ecore_pipe_write() in ecore v1.7.1.

First of all, there is no locking in the function.
And the function has two parts.
  1. writing the length of data to the pipe.
  2. writing the data to the pipe.

As my understanding,
to ensure thread-safety of the ecore_pipe_write(),
the writing operation of all those ([data length][raw data]) should be atomic.

If multiple threads call the ecore_pipe_write() at one time, the order of pipe data can be invalid - like [length of A][length of B][data of B][data of A].

I&apos;m not sure that _ecore_pipe_read has some protection or recovery logic about this situation.

Please let me know if there are some misunderstanding.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774252</commentid>
    <comment_count>6</comment_count>
    <who name="Seung-Woo Lee">sw0524.lee</who>
    <bug_when>2012-11-22 23:48:11 -0800</bug_when>
    <thetext>
I agree with Byungwoo Lee. It seems to me that ecore_pipe_write() in ecore v1.7.1 is not thread-safe because it has the possibility of message format broken when writing messages at the same times.

It is my opinion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774282</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-23 00:46:18 -0800</bug_when>
    <thetext>For the record, I agree with byungwoo as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>774297</commentid>
    <comment_count>8</comment_count>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-23 01:18:32 -0800</bug_when>
    <thetext>According to raster, ecore_pipe_write is intended for a thread. So, he recommends to make an ecore_pipe per thread. I also think we need to use a lock for current usage. But, I&apos;m not clear to use ecore_pipe_write here yet. If this is urgent issue, I don&apos;t mind to land this code at the moment. If not, I would like to dig this a little further. I wanna check why ecore_pipe_write is used here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776376</commentid>
    <comment_count>9</comment_count>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-11-26 22:53:26 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; According to raster, ecore_pipe_write is intended for a thread. So, he recommends to make an ecore_pipe per thread. I also think we need to use a lock for current usage. But, I&apos;m not clear to use ecore_pipe_write here yet. If this is urgent issue, I don&apos;t mind to land this code at the moment. If not, I would like to dig this a little further. I wanna check why ecore_pipe_write is used here.

Yes, it is the fundamental question that &apos;Why EFL WebKit uses the ecore pipe to wake up main loop?&apos; :)

Maybe there are many people who have the same question, and so do I.

Is there anyone who knows the history about this?
(Maybe it is related with some priority between the loop event items, but I&apos;m not sure)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776382</commentid>
    <comment_count>10</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-26 22:57:51 -0800</bug_when>
    <thetext>(In reply to comment #9)
&gt; (In reply to comment #8)
&gt; &gt; According to raster, ecore_pipe_write is intended for a thread. So, he recommends to make an ecore_pipe per thread. I also think we need to use a lock for current usage. But, I&apos;m not clear to use ecore_pipe_write here yet. If this is urgent issue, I don&apos;t mind to land this code at the moment. If not, I would like to dig this a little further. I wanna check why ecore_pipe_write is used here.
&gt; 
&gt; Yes, it is the fundamental question that &apos;Why EFL WebKit uses the ecore pipe to wake up main loop?&apos; :)
&gt; 
&gt; Maybe there are many people who have the same question, and so do I.
&gt; 
&gt; Is there anyone who knows the history about this?
&gt; (Maybe it is related with some priority between the loop event items, but I&apos;m not sure)

Well, EFL also uses ecore pipe to wake up the main loop it seems so WebKit is no different. See for example the implementation of ecore_main_loop_thread_safe_call_async(): it is using ecore pipe if not in the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776395</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-26 23:09:02 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; (In reply to comment #8)
&gt; &gt; &gt; According to raster, ecore_pipe_write is intended for a thread. So, he recommends to make an ecore_pipe per thread. I also think we need to use a lock for current usage. But, I&apos;m not clear to use ecore_pipe_write here yet. If this is urgent issue, I don&apos;t mind to land this code at the moment. If not, I would like to dig this a little further. I wanna check why ecore_pipe_write is used here.
&gt; &gt; 
&gt; &gt; Yes, it is the fundamental question that &apos;Why EFL WebKit uses the ecore pipe to wake up main loop?&apos; :)
&gt; &gt; 
&gt; &gt; Maybe there are many people who have the same question, and so do I.
&gt; &gt; 
&gt; &gt; Is there anyone who knows the history about this?
&gt; &gt; (Maybe it is related with some priority between the loop event items, but I&apos;m not sure)
&gt; 
&gt; Well, EFL also uses ecore pipe to wake up the main loop it seems so WebKit is no different. See for example the implementation of ecore_main_loop_thread_safe_call_async(): it is using ecore pipe if not in the main thread.

Also note that _ecore_main_loop_thread_safe_call() is protecting pipe write with a mutex as well. I think Byungwoo&apos;s patch is good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776414</commentid>
    <comment_count>12</comment_count>
      <attachid>172193</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-11-26 23:42:17 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

This patch is fine for current implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777583</commentid>
    <comment_count>13</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-27 23:54:55 -0800</bug_when>
    <thetext>Byungwoo, are you landing this? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777616</commentid>
    <comment_count>14</comment_count>
      <attachid>172193</attachid>
    <who name="Byungwoo Lee">bw80.lee</who>
    <bug_when>2012-11-28 01:12:06 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

Yes please :)
I tested and there was no regression on layout test and API test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777620</commentid>
    <comment_count>15</comment_count>
      <attachid>172193</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 01:18:51 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

Rejecting attachment 172193 from commit-queue.

christophe.dumez@intel.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777622</commentid>
    <comment_count>16</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2012-11-28 01:21:38 -0800</bug_when>
    <thetext>I&apos;m in committers.py but apparently the commit queue has not restarted yet :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777644</commentid>
    <comment_count>17</comment_count>
      <attachid>172193</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 01:53:27 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

Rejecting attachment 172193 from commit-queue.

christophe.dumez@intel.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777673</commentid>
    <comment_count>18</comment_count>
      <attachid>172193</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 02:51:35 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

Rejecting attachment 172193 from commit-queue.

christophe.dumez@intel.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777831</commentid>
    <comment_count>19</comment_count>
      <attachid>172193</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 06:02:12 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

Rejecting attachment 172193 from commit-queue.

christophe.dumez@intel.com does not have committer permissions according to http://trac.webkit.org/browser/trunk/Tools/Scripts/webkitpy/common/config/committers.py.

- If you do not have committer rights please read http://webkit.org/coding/contributing.html for instructions on how to use bugzilla flags.

- If you have committer rights please correct the error in Tools/Scripts/webkitpy/common/config/committers.py by adding yourself to the file (no review needed).  The commit-queue restarts itself every 2 hours.  After restart the commit-queue will correctly respect your committer rights.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777865</commentid>
    <comment_count>20</comment_count>
      <attachid>172193</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 06:39:21 -0800</bug_when>
    <thetext>Comment on attachment 172193
Patch

Clearing flags on attachment: 172193

Committed r136006: &lt;http://trac.webkit.org/changeset/136006&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>777866</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-28 06:39:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172193</attachid>
            <date>2012-11-02 19:16:35 -0700</date>
            <delta_ts>2012-11-28 06:39:21 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-101132-20121103111452.patch</filename>
            <type>text/plain</type>
            <size>2033</size>
            <attacher name="Byungwoo Lee">bw80.lee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMzM0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzQ4YTk3MWI2ZWY5Nzhk
ODM4MzJjNjkxNWY4N2QzN2ZjN2M0M2UzMC4uNDlmZTg0M2VlNmNmMmVkMDk2YmNlZTg3Y2MxZWMz
MWNkNGM0OTQxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTExLTAyICBCeXVu
Z3dvbyBMZWUgIDxidzgwLmxlZUBzYW1zdW5nLmNvbT4KKworICAgICAgICBbRUZMXSBVc2UgbXV0
ZXggbG9ja2VyIGluIHdha2VVcCgpIHRvIGVuc3VyZSB0aHJlYWQtc2FmZXR5LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAxMTMyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG11dGV4IGxvY2tlciBm
b3IgdGhlIGVjb3JlIHBpcGUgdG8gZW5zdXJlIHRocmVhZC1zYWZldHkgb2YKKyAgICAgICAgUnVu
TG9vcDo6d2FrZVVwKCkuCisKKyAgICAgICAgUnVuTG9vcDo6d2FrZVVwKCkgY2FuIGJlIGNhbGxl
ZCBieSBtdWx0aXBsZSB0aHJlYWQuIEl0IHVzZXMKKyAgICAgICAgZWNvcmVfcGlwZV93cml0ZSgp
IGZ1bmN0aW9uIGJ1dCB0aGUgZnVuY3Rpb24gaXMgbm90IHRocmVhZC1zYWZlLgorCisgICAgICAg
ICogcGxhdGZvcm0vUnVuTG9vcC5oOgorICAgICAgICAoUnVuTG9vcCk6CisgICAgICAgICogcGxh
dGZvcm0vZWZsL1J1bkxvb3BFZmwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UnVuTG9vcDo6d2Fr
ZVVwKToKKwogMjAxMi0xMS0wMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICB2aXNpdGVkSGFzaExpbmsoKSBjb252ZXJ0cyA4IGJpdCBVUkxzIGFuZCBhdHRy
aWJ1dGVzIHRvIDE2IGJpdHMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9S
dW5Mb29wLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9SdW5Mb29wLmgKaW5kZXggY2U5ODQ1
ZTJhNTc1OTIxYTlmMTVmZTU1ZjliMWNiZWU4YWY0MWE4Ni4uZmJmYjgzN2YxM2I5N2RkNGNkODc0
MDllOWQ4YjdiOTVmYWI1OGJlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UnVuTG9vcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1J1bkxvb3AuaApAQCAtMTY3
LDcgKzE2NywxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxHUmVmUHRyPEdNYWluTG9vcD4gPiBt
X3J1bkxvb3BNYWluTG9vcHM7CiAjZWxpZiBQTEFURk9STShFRkwpCiAgICAgYm9vbCBtX2luaXRF
Zmw7CisKKyAgICBNdXRleCBtX3BpcGVMb2NrOwogICAgIE93blB0cjxFY29yZV9QaXBlPiBtX3Bp
cGU7CisKICAgICBzdGF0aWMgdm9pZCB3YWtlVXBFdmVudCh2b2lkKiBkYXRhLCB2b2lkKiwgdW5z
aWduZWQgaW50KTsKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2VmbC9SdW5Mb29wRWZsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2VmbC9SdW5M
b29wRWZsLmNwcAppbmRleCBmMjk5ZDhlY2YyNjgyNDBiZGQyNjY2YmE1MmE0NGJjY2JhMTllMjJk
Li44ODY4NWUwZTkyMzBmNDA5ZjRlZDZmNGJkNDczNzdhMjU5YjIzYzcwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9lZmwvUnVuTG9vcEVmbC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZWZsL1J1bkxvb3BFZmwuY3BwCkBAIC0xMDIsNiArMTAyLDcgQEAgdm9p
ZCBSdW5Mb29wOjp3YWtlVXBFdmVudCh2b2lkKiBkYXRhLCB2b2lkKiwgdW5zaWduZWQgaW50KQog
CiB2b2lkIFJ1bkxvb3A6Ondha2VVcCgpCiB7CisgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1fcGlw
ZUxvY2spOwogICAgIGVjb3JlX3BpcGVfd3JpdGUobV9waXBlLmdldCgpLCB3YWt1cEVjb3JlUGlw
ZU1lc3NhZ2UsIGVjb3JlUGlwZU1lc3NhZ2VTaXplKTsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>