<?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>171159</bug_id>
          
          <creation_ts>2017-04-22 01:02:10 -0700</creation_ts>
          <short_desc>REGRESSION(r215638): [Linux] Several worker tests are crashing in Thread::signalHandlerSuspendResume after r215638</short_desc>
          <delta_ts>2017-04-23 09:45:20 -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>Web Template Framework</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=170976</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, LayoutTestFailure, Regression</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>170976</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>saam</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1300160</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-22 01:02:10 -0700</bug_when>
    <thetext>You can see backtraces in GTK+ bots:

https://build.webkit.org/results/GTK Linux 64-bit Release (Tests)/r215663 (693)/results.html

For example:

https://build.webkit.org/results/GTK Linux 64-bit Release (Tests)/r215663 (693)/fast/workers/worker-document-leak-crash-log.txt</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300171</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 02:19:23 -0700</bug_when>
    <thetext>Super curious thing is that there is no user of calling Thread::suspend / Thread::resume. I&apos;m still investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300172</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 02:23:04 -0700</bug_when>
    <thetext>I guess this is related to bug 170976. Before starting using signaling APIs, WTF in Linux uses SIGUSR2 to suspend and resume threads. I guess this suspend/resume handler is incorrectly routed from jscSignalHandler. Investigating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300173</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 02:25:16 -0700</bug_when>
    <thetext>We should use Signaling APIs to set up suspend / resume signals I guess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300176</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 02:28:00 -0700</bug_when>
    <thetext>OK, signaling API uses SIGUSR2 for there purpose, but it is already used in Linux to suspend and resume threads.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300179</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 03:20:49 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)
&gt; OK, signaling API uses SIGUSR2 for there purpose, but it is already used in
&gt; Linux to suspend and resume threads.

suspend / resume is a bit tricky operation. We should use dedicated signal for this operation.
Now SIGUSR2 is used by ThreadMessage. But SIGUSR1 becomes empty. We should use it instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300182</commentid>
    <comment_count>6</comment_count>
      <attachid>307904</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 03:33:08 -0700</bug_when>
    <thetext>Created attachment 307904
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300183</commentid>
    <comment_count>7</comment_count>
      <attachid>307905</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 03:35:04 -0700</bug_when>
    <thetext>Created attachment 307905
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300187</commentid>
    <comment_count>8</comment_count>
      <attachid>307905</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-04-22 06:28:07 -0700</bug_when>
    <thetext>Comment on attachment 307905
Patch

I don&apos;t think it&apos;s possible to use UNIX signals for any purpose without introducing subtle race conditions that are extremely hard to detect or reason about. Is it possible to eventually eliminate our use of UNIX signals for thread suspension, or is there just no other way to accomplish this than by using signals?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300191</commentid>
    <comment_count>9</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 06:54:12 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; Comment on attachment 307905 [details]
&gt; Patch
&gt; 
&gt; I don&apos;t think it&apos;s possible to use UNIX signals for any purpose without
&gt; introducing subtle race conditions that are extremely hard to detect or
&gt; reason about. Is it possible to eventually eliminate our use of UNIX signals
&gt; for thread suspension, or is there just no other way to accomplish this than
&gt; by using signals?

If we want to have the identical mechanism (ability to suspend and resume threads),
I believe we do not have a non-signal way in Linux. For non Linux env,
sometimes an alternative is offered, like pthread_suspend_np. But it also has a
problem that we cannot retrieve register sets from a suspended thread.

If we do not want to have the current strong mechanism, the simplest way is
something like safepoint approach. Maybe current CheckTrap op can be used.
safepoint repeatedly appears in JIT code and JS mutators will park if the ccollector requires. Then, the stop the world op works.
But to make it efficiently implemented, yet it involves SEGV signal handler :P
Wihout it, I think it&apos;s not as efficient as is...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300192</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-22 07:07:38 -0700</bug_when>
    <thetext>Committed r215665: &lt;http://trac.webkit.org/changeset/215665&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300332</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-04-23 08:37:36 -0700</bug_when>
    <thetext>I have some thoughts:

- MachineStackMarker should switch to using this new mechanism.  You would use the functional message API to send a Function that scans the stack.  We should test whether this is perf-neutral on macOS/iOS/etc, and if it is, then we should get rid of the thread_suspend/resume code and just use this.  It&apos;s better if all OSes use the same approach because then we share test coverage, ideas, etc.  We should only use different APIs on different OSes if it gives us some measurable progression.

- You don&apos;t need the full CheckTraps mechanism, since that&apos;s more of a safepoint - you stop at a place where the JIT is able to vend additional information.  We don&apos;t really need safepoints for stack scanning.  One thread holds the JSLock, and that thread does need to be safepointed but it&apos;s already at a safepoint anytime the GC requests a stack scan.  None of the other threads that MachineStackMarker looks at hold the JSLock and so they don&apos;t need to be safepointed.  In fact, all we really need is a ragged safepoint, where the thread requesting scanning signals all of the threads and then waits for them to return with stack scan results. 

(In reply to Michael Catanzaro from comment #8)
&gt; Comment on attachment 307905 [details]
&gt; Patch
&gt; 
&gt; I don&apos;t think it&apos;s possible to use UNIX signals for any purpose without
&gt; introducing subtle race conditions that are extremely hard to detect or
&gt; reason about. 

That&apos;s not true.  Two sound uses are:

- pthread_kill, as we are doing.

- handling a signal that originated as a CPU trap, like SEGV, BUS, TRAP, ILL, FPE, etc.  

We use signal handling for those purposes.

&gt; Is it possible to eventually eliminate our use of UNIX signals
&gt; for thread suspension, or is there just no other way to accomplish this than
&gt; by using signals?

It&apos;s not possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1300337</commentid>
    <comment_count>12</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-04-23 09:45:20 -0700</bug_when>
    <thetext>Interesting.

(In reply to Filip Pizlo from comment #11)
&gt; I have some thoughts:
&gt; 
&gt; - MachineStackMarker should switch to using this new mechanism.  You would
&gt; use the functional message API to send a Function that scans the stack.  We
&gt; should test whether this is perf-neutral on macOS/iOS/etc, and if it is,
&gt; then we should get rid of the thread_suspend/resume code and just use this. 
&gt; It&apos;s better if all OSes use the same approach because then we share test
&gt; coverage, ideas, etc.  We should only use different APIs on different OSes
&gt; if it gives us some measurable progression.

From the point of cross-platform view, one obstacle is that ThreadMessage
is not implemented in Windows since it does not have identical mechanism to
pthread_kill. I&apos;m not sure there is a good mechanism in Windows to implement
such semantics.

&gt; - You don&apos;t need the full CheckTraps mechanism, since that&apos;s more of a
&gt; safepoint - you stop at a place where the JIT is able to vend additional
&gt; information.  We don&apos;t really need safepoints for stack scanning.  One
&gt; thread holds the JSLock, and that thread does need to be safepointed but
&gt; it&apos;s already at a safepoint anytime the GC requests a stack scan.  None of
&gt; the other threads that MachineStackMarker looks at hold the JSLock and so
&gt; they don&apos;t need to be safepointed.  In fact, all we really need is a ragged
&gt; safepoint, where the thread requesting scanning signals all of the threads
&gt; and then waits for them to return with stack scan results. 

Right, make sense. Mutator already has JSLock when performing GC, and other
ones do not have JSLock for that VM.

It sounds like similar to TLB shootdown implementation. One thread broadcasts
the request for the stack scan, threads perform it and return the result.
The requester waits for the results, then, all the threads start executing.

&gt; (In reply to Michael Catanzaro from comment #8)
&gt; &gt; Comment on attachment 307905 [details]
&gt; &gt; Patch
&gt; &gt; 
&gt; &gt; I don&apos;t think it&apos;s possible to use UNIX signals for any purpose without
&gt; &gt; introducing subtle race conditions that are extremely hard to detect or
&gt; &gt; reason about. 
&gt; 
&gt; That&apos;s not true.  Two sound uses are:
&gt; 
&gt; - pthread_kill, as we are doing.
&gt; 
&gt; - handling a signal that originated as a CPU trap, like SEGV, BUS, TRAP,
&gt; ILL, FPE, etc.  
&gt; 
&gt; We use signal handling for those purposes.
&gt; 
&gt; &gt; Is it possible to eventually eliminate our use of UNIX signals
&gt; &gt; for thread suspension, or is there just no other way to accomplish this than
&gt; &gt; by using signals?
&gt; 
&gt; It&apos;s not possible.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307904</attachid>
            <date>2017-04-22 03:33:08 -0700</date>
            <delta_ts>2017-04-22 03:35:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171159-20170422193307.patch</filename>
            <type>text/plain</type>
            <size>2734</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM1ZTQyYTY4NzEzMDI0OTBjNWNjMjJi
ZmFjNmJiM2ZjZTg0ZDY1MWEuLmVlMjI3NDgxNjZhMDJmOTcyM2UxMjRiNmQxZjE0NDcwYmRmM2Q3
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMjIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjE1NjM4KTogW0xpbnV4
XSBTZXZlcmFsIHdvcmtlciB0ZXN0cyBhcmUgY3Jhc2hpbmcgaW4gVGhyZWFkOjpzaWduYWxIYW5k
bGVyU3VzcGVuZFJlc3VtZSBhZnRlciByMjE1NjM4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOb3csIFNJR1VTUjIgaXMgdXNlZCBieSBUaHJlYWRNZXNz
YWdlLiBJbnN0ZWFkIFNJR1VTUjEgYmVjb21lcyBlbXB0eS4KKyAgICAgICAgV2Ugc2hvdWxkIHVz
ZSBzb21lIHNpZ25hbCwgdGhhdCBpcyBub3QgbWFuYWdlZCBieSBXVEYgU2lnbmFsIG1lY2hhbmlz
bQorICAgICAgICBiZWNhdXNlIHRoZSBiZWhhaXZvciBvZiB0aGlzIHN1c3BlbmQgYW5kIHJlc3Vt
ZSBpcyBhIGJpdCB0cmlja3kuCisgICAgICAgIEZvciBleGFtcGxlLCB3ZSBzZXQgYSBiaXQgdHJp
Y2t5IHNpZ25hbCBtYXNrIHRvIHNpZ2FjdGlvbiB0byB0ZW1wb3JhcnkKKyAgICAgICAgYmxvY2sg
U0lHVVNSMiBpbiB0aGUgaGFuZGxlciB0byBhdm9pZCBuZXN0ZWQgU0lHVVNSMi4gQW5kIHdlIGNh
bm5vdAorICAgICAgICB1c2UgVGhyZWFkTWVzc2FnZSB0byBpbXBsZW1lbnQgdGhpcyBtZWNoYW5p
c20gYmVjYXVzZSB0aGlzIHN1c3BlbmQKKyAgICAgICAgYW5kIHJlc3VtZSBoYW5kbGVyIHdpbGwg
c3RvcCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCisgICAgICAg
IEl0IGlzIG5vdCB0aGUgZXhwZWN0ZWQgc2VtYW50aWNzIGJ5IFRocmVhZE1lc3NhZ2UuCisKKyAg
ICAgICAgU28gbm93LCB3ZSB1c2UgU0lHVVNSMSBpbnN0ZWFkLiBBbmQgd2Ugbm90ZSB0aGF0IFNJ
R1VTUjEgaXMgdXNlZCBmb3IKKyAgICAgICAgcHRocmVhZCBwb3J0cy4KKworICAgICAgICAqIHd0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5o
OgorCiAyMDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
U3BsaXQgY3J5cHRvZ3JhcGhpYyBkaWdlc3QgY29tcHV0YXRpb24gYW5kIHBhcnNpbmcgb3V0IG9m
IENTUCBjb2RlIHNvIGl0IGNhbiBiZSByZXVzZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRz
LmNwcAppbmRleCAxYTVkOTlmNjE0ZjVkOTVhY2Y2MTcxZWYwMWQwM2QxNGMyMWM3ZmQwLi4xMzc4
NDNjZTM0MDIwMWJmYjg1ZjcwODYzNTc1Y2VkZTBhNzY5MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nUHRocmVhZHMuY3BwCkBAIC04OSw4ICs4OSw4IEBAIFRocmVhZDo6flRocmVhZCgpCiAKICNp
ZiAhT1MoREFSV0lOKQogCi0vLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUg
bWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgotc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7CisvLyBXZSB1c2UgU0lHVVNS
MSB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3Jl
Lgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJ
R1VTUjE7CiBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVsbHB0
ciB9Owogc3RhdGljIFN0YXRpY1dvcmRMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5oCmluZGV4IDAzYTFkMmU1ODA4ODFiYWU5MzM5ZTE2NzgxOGE3YjllZjFi
ODBmYzIuLjNmYmI0MDA2OGQ4NjgxZjgyMWIyMmZkZTc5M2Y2NGE5YTBhMzY0ZjYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RocmVhZHMvU2lnbmFscy5oCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewog
CisvLyBOb3RlIHRoYXQgU0lHVVNSMSBpcyB1c2VkIGluIFB0aHJlYWQtYmFzZWQgcG9ydHMgb3Ro
ZXIgdGhhbiBEYXJ3aW4gdG8gc3VzcGVuZCBhbmQgcmVzdW1lIHRocmVhZHMuCiBlbnVtIGNsYXNz
IFNpZ25hbCB7CiAgICAgLy8gVXNyIHdpbGwgYWx3YXlzIGNoYWluIHRvIGFueSBub24tZGVmYXVs
dCBoYW5kbGVyIGluc3RhbGwgYmVmb3JlIHVzLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8ga25v
dwogICAgIC8vIGlmIGEgc2lnbmFsIHdhcyBpbnRlbmRlZCBleGNsdXNpdmVseSBmb3IgdXMuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>307905</attachid>
            <date>2017-04-22 03:35:04 -0700</date>
            <delta_ts>2017-04-22 06:28:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171159-20170422193503.patch</filename>
            <type>text/plain</type>
            <size>2734</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE1NjY0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGM1ZTQyYTY4NzEzMDI0OTBjNWNjMjJi
ZmFjNmJiM2ZjZTg0ZDY1MWEuLmVlMjI3NDgxNjZhMDJmOTcyM2UxMjRiNmQxZjE0NDcwYmRmM2Q3
OGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMTctMDQtMjIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0
YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgUkVHUkVTU0lPTihyMjE1NjM4KTogW0xpbnV4
XSBTZXZlcmFsIHdvcmtlciB0ZXN0cyBhcmUgY3Jhc2hpbmcgaW4gVGhyZWFkOjpzaWduYWxIYW5k
bGVyU3VzcGVuZFJlc3VtZSBhZnRlciByMjE1NjM4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzExNTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBOb3csIFNJR1VTUjIgaXMgdXNlZCBieSBUaHJlYWRNZXNz
YWdlLiBJbnN0ZWFkIFNJR1VTUjEgYmVjb21lcyBlbXB0eS4KKyAgICAgICAgV2Ugc2hvdWxkIHVz
ZSBzb21lIHNpZ25hbCwgdGhhdCBpcyBub3QgbWFuYWdlZCBieSBXVEYgU2lnbmFsIG1lY2hhbmlz
bQorICAgICAgICBiZWNhdXNlIHRoZSBiZWhhaXZvciBvZiB0aGlzIHN1c3BlbmQgYW5kIHJlc3Vt
ZSBpcyBhIGJpdCB0cmlja3kuCisgICAgICAgIEZvciBleGFtcGxlLCB3ZSBzZXQgYSBiaXQgdHJp
Y2t5IHNpZ25hbCBtYXNrIHRvIHNpZ2FjdGlvbiB0byB0ZW1wb3JhcnkKKyAgICAgICAgYmxvY2sg
U0lHVVNSMiBpbiB0aGUgaGFuZGxlciB0byBhdm9pZCBuZXN0ZWQgU0lHVVNSMi4gQW5kIHdlIGNh
bm5vdAorICAgICAgICB1c2UgVGhyZWFkTWVzc2FnZSB0byBpbXBsZW1lbnQgdGhpcyBtZWNoYW5p
c20gYmVjYXVzZSB0aGlzIHN1c3BlbmQKKyAgICAgICAgYW5kIHJlc3VtZSBoYW5kbGVyIHdpbGwg
c3RvcCBpbiB0aGUgbWlkZGxlIG9mIHRoZSBoYW5kbGVyIGJ5IHNpZ3N1c3BlbmQuCisgICAgICAg
IEl0IGlzIG5vdCB0aGUgZXhwZWN0ZWQgc2VtYW50aWNzIGJ5IFRocmVhZE1lc3NhZ2UuCisKKyAg
ICAgICAgU28gbm93LCB3ZSB1c2UgU0lHVVNSMSBpbnN0ZWFkLiBBbmQgd2Ugbm90ZSB0aGF0IFNJ
R1VTUjEgaXMgdXNlZCBmb3IKKyAgICAgICAgcHRocmVhZCBwb3J0cy4KKworICAgICAgICAqIHd0
Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHA6CisgICAgICAgICogd3RmL3RocmVhZHMvU2lnbmFscy5o
OgorCiAyMDE3LTA0LTIwICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
U3BsaXQgY3J5cHRvZ3JhcGhpYyBkaWdlc3QgY29tcHV0YXRpb24gYW5kIHBhcnNpbmcgb3V0IG9m
IENTUCBjb2RlIHNvIGl0IGNhbiBiZSByZXVzZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3Rm
L1RocmVhZGluZ1B0aHJlYWRzLmNwcCBiL1NvdXJjZS9XVEYvd3RmL1RocmVhZGluZ1B0aHJlYWRz
LmNwcAppbmRleCAxYTVkOTlmNjE0ZjVkOTVhY2Y2MTcxZWYwMWQwM2QxNGMyMWM3ZmQwLi4xMzc4
NDNjZTM0MDIwMWJmYjg1ZjcwODYzNTc1Y2VkZTBhNzY5MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V1RGL3d0Zi9UaHJlYWRpbmdQdGhyZWFkcy5jcHAKKysrIGIvU291cmNlL1dURi93dGYvVGhyZWFk
aW5nUHRocmVhZHMuY3BwCkBAIC04OSw4ICs4OSw4IEBAIFRocmVhZDo6flRocmVhZCgpCiAKICNp
ZiAhT1MoREFSV0lOKQogCi0vLyBXZSB1c2UgU0lHVVNSMiB0byBzdXNwZW5kIGFuZCByZXN1bWUg
bWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3JlLgotc3RhdGljIGNvbnN0ZXhwciBjb25z
dCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJR1VTUjI7CisvLyBXZSB1c2UgU0lHVVNS
MSB0byBzdXNwZW5kIGFuZCByZXN1bWUgbWFjaGluZSB0aHJlYWRzIGluIEphdmFTY3JpcHRDb3Jl
Lgorc3RhdGljIGNvbnN0ZXhwciBjb25zdCBpbnQgU2lnVGhyZWFkU3VzcGVuZFJlc3VtZSA9IFNJ
R1VTUjE7CiBzdGF0aWMgc3RkOjphdG9taWM8VGhyZWFkKj4gdGFyZ2V0VGhyZWFkIHsgbnVsbHB0
ciB9Owogc3RhdGljIFN0YXRpY1dvcmRMb2NrIGdsb2JhbFN1c3BlbmRMb2NrOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV1RGL3d0Zi90aHJlYWRzL1NpZ25hbHMuaCBiL1NvdXJjZS9XVEYvd3RmL3Ro
cmVhZHMvU2lnbmFscy5oCmluZGV4IDAzYTFkMmU1ODA4ODFiYWU5MzM5ZTE2NzgxOGE3YjllZjFi
ODBmYzIuLjFlNGViNDZlYWE3NzRhMWVlODlmNmZiMmRhZWYzMzI2OGNlNTY3NzkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL3RocmVhZHMvU2lnbmFscy5oCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L3RocmVhZHMvU2lnbmFscy5oCkBAIC0zMiw2ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewog
CisvLyBOb3RlIHRoYXQgU0lHVVNSMSBpcyB1c2VkIGluIFB0aHJlYWQtYmFzZWQgcG9ydHMgZXhj
ZXB0IGZvciBEYXJ3aW4gdG8gc3VzcGVuZCBhbmQgcmVzdW1lIHRocmVhZHMuCiBlbnVtIGNsYXNz
IFNpZ25hbCB7CiAgICAgLy8gVXNyIHdpbGwgYWx3YXlzIGNoYWluIHRvIGFueSBub24tZGVmYXVs
dCBoYW5kbGVyIGluc3RhbGwgYmVmb3JlIHVzLiBTaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8ga25v
dwogICAgIC8vIGlmIGEgc2lnbmFsIHdhcyBpbnRlbmRlZCBleGNsdXNpdmVseSBmb3IgdXMuCg==
</data>
<flag name="review"
          id="329109"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>