<?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>157973</bug_id>
          
          <creation_ts>2016-05-21 09:59:16 -0700</creation_ts>
          <short_desc>PlatformDisplay crash when calling egl_terminate</short_desc>
          <delta_ts>2023-04-19 15:16:01 -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>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=145832</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=174789</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=176490</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=255678</see_also>
          <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>81456</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>hur.ims</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1195357</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-21 09:59:16 -0700</bug_when>
    <thetext>We crash very often in the destructor of PlatformDisplayWayland when it runs in an exit handler. The effect is that the web process corresponding to a closed Epiphany tab crashes quite regularly immediately after closing tab. Normally when issues like this happen I just switch to use of NeverDestroyed, but I&apos;m not sure if that&apos;s correct in this case.

Incredibly enough, this is also somehow causing test-ephy-bookmarks to crash when run under Wayland:

$ jhbuild run valgrind ./test-ephy-bookmarks
==16259== Memcheck, a memory error detector
==16259== Copyright (C) 2002-2015, and GNU GPL&apos;d, by Julian Seward et al.
==16259== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==16259== Command: ./test-ephy-bookmarks
==16259== 
--16259-- warning: DiCfSI 0xa13c1e0 .. 0xa617b6f is huge; length = 5093776 (libwebkit2gtk-4.0.so.37)
==16259== Warning: set address range perms: large range [0x395d9000, 0x795db000) (noaccess)
/src/bookmarks/ephy-bookmarks/create: OK
/src/bookmarks/ephy-bookmarks/add: OK
/src/bookmarks/ephy-bookmarks/set_address: OK
==16259== Invalid write of size 4
==16259==    at 0x18E2586F: _eglError (eglcurrent.c:240)
==16259==    by 0x18E1F110: eglTerminate (eglapi.c:531)
==16259==    by 0xC2D8344: WebCore::PlatformDisplay::terminateEGLDisplay() (PlatformDisplay.cpp:168)
==16259==    by 0xC2D81C7: WebCore::PlatformDisplay::~PlatformDisplay() (PlatformDisplay.cpp:118)
==16259==    by 0xC1E2B4B: WebCore::PlatformDisplayWayland::~PlatformDisplayWayland() (PlatformDisplayWayland.cpp:108)
==16259==    by 0xC1E2B67: WebCore::PlatformDisplayWayland::~PlatformDisplayWayland() (PlatformDisplayWayland.cpp:118)
==16259==    by 0xC2D8E9B: std::default_delete&lt;WebCore::PlatformDisplay&gt;::operator()(WebCore::PlatformDisplay*) const (unique_ptr.h:76)
==16259==    by 0xC2D8952: std::unique_ptr&lt;WebCore::PlatformDisplay, std::default_delete&lt;WebCore::PlatformDisplay&gt; &gt;::~unique_ptr() (unique_ptr.h:236)
==16259==    by 0x17748947: __run_exit_handlers (exit.c:82)
==16259==    by 0x17748994: exit (exit.c:104)
==16259==    by 0x1772F737: (below main) (libc-start.c:323)
==16259==  Address 0x2909bf00 is 0 bytes inside a block of size 40 free&apos;d
==16259==    at 0x4C2CD5A: free (vg_replace_malloc.c:530)
==16259==    by 0x18E253C1: _eglFiniTSD (eglcurrent.c:80)
==16259==    by 0x18E267CA: _eglAtExit (eglglobals.c:68)
==16259==    by 0x17748947: __run_exit_handlers (exit.c:82)
==16259==    by 0x17748994: exit (exit.c:104)
==16259==    by 0x1772F737: (below main) (libc-start.c:323)
==16259==  Block was alloc&apos;d at
==16259==    at 0x4C2DA60: calloc (vg_replace_malloc.c:711)
==16259==    by 0x18E253F6: _eglCreateThreadInfo (eglcurrent.c:124)
==16259==    by 0x18E253F6: _eglGetCurrentThread.part.1 (eglcurrent.c:171)
==16259==    by 0x18E25915: _eglGetCurrentThread (eglcurrent.c:151)
==16259==    by 0x18E25915: _eglError (eglcurrent.c:235)
==16259==    by 0x18E2163F: eglInitialize (eglapi.c:521)
==16259==    by 0xC2D828E: WebCore::PlatformDisplay::initializeEGLDisplay() (PlatformDisplay.cpp:146)
==16259==    by 0xC1E2A0C: WebCore::PlatformDisplayWayland::PlatformDisplayWayland(wl_display*) (PlatformDisplayWayland.cpp:95)
==16259==    by 0xC1E28AC: WebCore::PlatformDisplayWayland::create() (PlatformDisplayWayland.cpp:67)
==16259==    by 0xC2D8067: WebCore::PlatformDisplay::createPlatformDisplay() (PlatformDisplay.cpp:79)
==16259==    by 0xC2D80D1: WebCore::PlatformDisplay::sharedDisplay()::{lambda()#1}::operator()() const (PlatformDisplay.cpp:101)
==16259==    by 0xC2D85D9: void std::_Bind_simple&lt;WebCore::PlatformDisplay::sharedDisplay()::{lambda()#1} ()&gt;::_M_invoke&lt;&gt;(std::_Index_tuple&lt;&gt;) (functional:1400)
==16259==    by 0xC2D8576: std::_Bind_simple&lt;WebCore::PlatformDisplay::sharedDisplay()::{lambda()#1} ()&gt;::operator()() (functional:1389)
==16259==    by 0xC2D84C0: void std::__once_call_impl&lt;std::_Bind_simple&lt;WebCore::PlatformDisplay::sharedDisplay()::{lambda()#1} ()&gt; &gt;() (mutex:587)
==16259== 
LEAK: 1 WebProcessPool
==16259== 
==16259== HEAP SUMMARY:
==16259==     in use at exit: 1,850,660 bytes in 12,382 blocks
==16259==   total heap usage: 43,709 allocs, 31,327 frees, 7,469,918 bytes allocated
==16259== 
==16259== LEAK SUMMARY:
==16259==    definitely lost: 600 bytes in 3 blocks
==16259==    indirectly lost: 1,089,886 bytes in 3,789 blocks
==16259==      possibly lost: 6,096 bytes in 29 blocks
==16259==    still reachable: 690,526 bytes in 8,026 blocks
==16259==                       of which reachable via heuristic:
==16259==                         length64           : 4,064 bytes in 71 blocks
==16259==                         newarray           : 2,128 bytes in 53 blocks
==16259==         suppressed: 0 bytes in 0 blocks
==16259== Rerun with --leak-check=full to see details of leaked memory
==16259== 
==16259== For counts of detected and suppressed errors, rerun with: -v
==16259== ERROR SUMMARY: 1 errors from 1 contexts (suppressed: 0 from 0)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195358</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-05-21 10:04:24 -0700</bug_when>
    <thetext>Most likely we need to add some PlatformDisplay::Destroy function to be called explicitly from... somewhere... that&apos;s not an exit handler, and switch to using NeverDestroyed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196997</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-27 00:50:57 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Most likely we need to add some PlatformDisplay::Destroy function to be
&gt; called explicitly from... somewhere... that&apos;s not an exit handler, and
&gt; switch to using NeverDestroyed.

To properly fix this we need to figure out why it&apos;s crashing. Workarounds will just hide the actual issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1196998</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-05-27 01:02:37 -0700</bug_when>
    <thetext>This is my guess looking at mesa egl code. _eglGlobal registers two at exist callbacks one to finish the display and another one to unload drivers, the one to finish the display happens first. When our destructor is called the _eglFiniDisplay callback has already been called, so we have a valid pointer for an already finished display. Then eglTerminate tries to find the display in the global display list, but fails and for some reason it crashes when trying to return an error. The error doesn&apos;t really depend on the display, it uses thread specific data I think. But _eglGetCurrentThread should never return null, so I don&apos;t understand why it&apos;s crashing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1197824</commentid>
    <comment_count>4</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-05-31 10:31:56 -0700</bug_when>
    <thetext>If we&apos;re committed to destructing the PlatformDisplay object, then using atexit() manually might work better than a static std::unique_ptr&lt;&gt; object.

The PlatformDisplayWayland constructor would do the EGL initialization, setting up exit-time callbacks in Mesa. We should register the destruction of this object with atexit() afterwards, since the callbacks passed to atexit() are called in reverse order.

This showcases the problem:
https://www.ibm.com/developerworks/community/blogs/5894415f-be62-4bc0-81c5-3956e82276f3/entry/be_careful_when_using_the_atexit_routine_with_static_objects?lang=en</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198119</commentid>
    <comment_count>5</comment_count>
      <attachid>280228</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-01 04:02:45 -0700</bug_when>
    <thetext>Created attachment 280228
Patch

Could someone try this to confirm it works?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198124</commentid>
    <comment_count>6</comment_count>
      <attachid>280228</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-06-01 05:27:35 -0700</bug_when>
    <thetext>Comment on attachment 280228
Patch

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

I confirm it fixes at least the crash running test-ephy-bookmarks. Awesome, thanks.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:171
&gt; +    std::atexit([] { PlatformDisplay::sharedDisplay().terminateEGLDisplay(); });

This is harmless, but not really great, since it means terminateEGLDisplay will be redundantly called on the sharedDisplay once for each time initializeEGLDisplay is called on ANY PlatformDisplay object. Perhaps it would it make sense to check if this == PlatformDisplay::sharedDisplay before registering the atexit handler here. Alternatively, and probably better, move this to inside the lambda in PlatformDisplay::sharedDisplay, where it will be called at most once. Or, perhaps the best option is to call terminateEGLDisplay on the current PlatformDisplay (i.e. |this| rather than the sharedDisplay) and remove the call to terminateEGLDisplay from the destructor.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198130</commentid>
    <comment_count>7</comment_count>
      <attachid>280228</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-06-01 06:30:07 -0700</bug_when>
    <thetext>Comment on attachment 280228
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:171
&gt;&gt; +    std::atexit([] { PlatformDisplay::sharedDisplay().terminateEGLDisplay(); });
&gt; 
&gt; This is harmless, but not really great, since it means terminateEGLDisplay will be redundantly called on the sharedDisplay once for each time initializeEGLDisplay is called on ANY PlatformDisplay object. Perhaps it would it make sense to check if this == PlatformDisplay::sharedDisplay before registering the atexit handler here. Alternatively, and probably better, move this to inside the lambda in PlatformDisplay::sharedDisplay, where it will be called at most once. Or, perhaps the best option is to call terminateEGLDisplay on the current PlatformDisplay (i.e. |this| rather than the sharedDisplay) and remove the call to terminateEGLDisplay from the destructor.

Only PlatformDisplay::sharedDisplay() should ever live during the program lifetime, so this method would only be called only once as well. Asserting !m_eglDisplayInitialized at the beginning here would be helpful in that regard.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198145</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-06-01 07:40:54 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Only PlatformDisplay::sharedDisplay() should ever live during the program
&gt; lifetime, so this method would only be called only once as well. Asserting
&gt; !m_eglDisplayInitialized at the beginning here would be helpful in that
&gt; regard.

Are you saying that this class is intended to be a singleton? If so, then it should use our normal singleton naming convention (PlatformDisplay::singleton rather than PlatformDisplay::sharedDisplay), and should have nothing in its destructor (as it would never make sense to call egl_terminate there if it&apos;s always scheduled by atexit), and terminateEGLDisplay should be called on the this pointer rather than sharedDisplay for readability. If it&apos;s not supposed to be a singleton, then the assert you suggested would be inappropriate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198152</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-01 08:45:30 -0700</bug_when>
    <thetext>The constructor is private (well, protected) so yes, it&apos;s indeed a singleton, but we really want to close displays, when needed, and that&apos;s why it&apos;s not NeverDestroyed. I agree that if we terminate in the atexit, it doesn&apos;t make sense to terminate again the destructor, since the atexit should always happen first. We can&apos;t capture this on a lambda for a pointer function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198156</commentid>
    <comment_count>10</comment_count>
      <attachid>280238</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-01 08:56:11 -0700</bug_when>
    <thetext>Created attachment 280238
Updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198173</commentid>
    <comment_count>11</comment_count>
      <attachid>280238</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-06-01 09:23:43 -0700</bug_when>
    <thetext>Comment on attachment 280238
Updated patch

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

OK.

&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:169
&gt; +    std::atexit([] { PlatformDisplay::sharedDisplay().terminateEGLDisplay(); });

Since this is not a static function, I think it make more sense to not use PlatformDisplay::sharedDisplay() here. You say you cannot capture |this| here, but I don&apos;t understand why not; did you try writing it this way:

std::atexit([this] { this-&gt;terminateEGLDisplay(); });</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198472</commentid>
    <comment_count>12</comment_count>
      <attachid>280238</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2016-06-02 00:04:42 -0700</bug_when>
    <thetext>Comment on attachment 280238
Updated patch

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

&gt;&gt; Source/WebCore/platform/graphics/PlatformDisplay.cpp:169
&gt;&gt; +    std::atexit([] { PlatformDisplay::sharedDisplay().terminateEGLDisplay(); });
&gt; 
&gt; Since this is not a static function, I think it make more sense to not use PlatformDisplay::sharedDisplay() here. You say you cannot capture |this| here, but I don&apos;t understand why not; did you try writing it this way:
&gt; 
&gt; std::atexit([this] { this-&gt;terminateEGLDisplay(); });

std::atexit() has to be passed a function pointer to a static function, since it only stores the pointer, not the whole function object.

Only capture-less lambdas can be passed as such arguments, since they have the conversion operator that converts to a function pointer.
http://en.cppreference.com/w/cpp/language/lambda -- see ClosureType::operator ret(*)(params)()

In such cases compiler simply generates a bare struct with the call operator and this conversion operator, since it has no state to manage because nothing is captured. You&apos;d basically be able to call the struct&apos;s call operator as if it was any other static non-method function. If anything is captured, then lambda implies an actual object of that helper struct type, generating all the relevant constructors and destructors, plus you have to address the lifetime management (limited to scope or storable to std::function&lt;&gt; for delayed use).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1198479</commentid>
    <comment_count>13</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-06-02 00:35:16 -0700</bug_when>
    <thetext>Committed r201595: &lt;http://trac.webkit.org/changeset/201595&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331654</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-24 09:47:16 -0700</bug_when>
    <thetext>Looks like this has somehow returned in bug #174789.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280228</attachid>
            <date>2016-06-01 04:02:45 -0700</date>
            <delta_ts>2016-06-01 08:56:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-wayland-display-crash.diff</filename>
            <type>text/plain</type>
            <size>2642</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzNDBiOWNjLi5jMTFlNzFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTYtMDYtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtXYXlsYW5kXSBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kIGRlc3RydWN0b3Ig
aXMgc3VwZXIgY3Jhc2h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFR0wgcmVnaXN0ZXJzIHR3byBhdCBleGlzdCBjYWxsYmFja3Mgb25lIHRvIGZpbmlz
aCB0aGUgZGlzcGxheSBhbmQgYW5vdGhlciBvbmUgdG8gdW5sb2FkIGRyaXZlcnMsIHRoZSBvbmUg
dG8KKyAgICAgICAgZmluaXNoIHRoZSBkaXNwbGF5IGhhcHBlbnMgZmlyc3QuIFdoZW4gb3VyIGRl
c3RydWN0b3IgaXMgY2FsbGVkIHRoZSBfZWdsRmluaURpc3BsYXkgY2FsbGJhY2sgaGFzIGFscmVh
ZHkgYmVlbgorICAgICAgICBjYWxsZWQsIHNvIHdlIGhhdmUgYSB2YWxpZCBwb2ludGVyIGZvciBh
biBhbHJlYWR5IGZpbmlzaGVkIGRpc3BsYXkuIFRoZW4gZWdsVGVybWluYXRlIHRyaWVzIHRvIGZp
bmQgdGhlIGRpc3BsYXkKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBkaXNwbGF5IGxpc3QsIGJ1dCBm
YWlscyBhbmQgZm9yIHNvbWUgcmVhc29uIGl0IGNyYXNoZXMgd2hlbiB0cnlpbmcgdG8gcmV0dXJu
IGFuIGVycm9yLgorICAgICAgICBJZiBhdGV4aXQgaXMgY2FsbGVkIGFmdGVyIHRoZSBnbG9iYWwg
UGxhdGZvcm1EaXNwbGF5IGNvbnN0cnVjdG9yLCB0aGUgYXRleGl0IGhhbmRsZXIgaXMgY2FsbGVk
IGJlZm9yZSB0aGUKKyAgICAgICAgZGVzdHJ1Y3Rvci4gVGhlIGF0ZXhpdCBjYWxsYmFja3MgYXJl
IGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyBpZiB3ZSByZWdpc3RlciBhbiBhdGV4aXQgaGFu
ZGxlciBhZnRlciB0aGUKKyAgICAgICAgZ2xvYmFsIGluc3RhY2UgaGFzIGJlZW4gY3JlYXRlZCBh
bmQgYWZ0ZXIgRUdMIGhhcyBiZWVuIGluaXRpYWxpemVkLCB3ZSBjb3VsZCB0ZXJtaW5hdGUgdGhl
IEVHTCBkaXNwbGF5IGJlZm9yZQorICAgICAgICB0aGUgRUdMIGF0ZXhpdCBoYW5kbGVycyBhbmQg
dGhlIGdsb2JhbCBQbGF0Zm9ybURpc3BsYXkgZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXk6OmluaXRpYWxpemVFR0xEaXNwbGF5KToKKwogMjAxNi0wNi0wMSAgUGVyIEFy
bmUgVm9sbGFuICA8cHZvbGxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW1dpbl1bSW5kZXhlZERC
XSBDcmFzaCB3aGVuIHJ1bm5pbmcgYmxvYiB0ZXN0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKaW5kZXggMTlhNmI5OS4uNzAx
YzAxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZv
cm1EaXNwbGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybURpc3BsYXkuY3BwCkBAIC0xNTksNiArMTU5LDE2IEBAIHZvaWQgUGxhdGZvcm1EaXNwbGF5
Ojppbml0aWFsaXplRUdMRGlzcGxheSgpCiAgICAgICAgIHRlcm1pbmF0ZUVHTERpc3BsYXkoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KKworICAgIC8vIEVHTCByZWdpc3RlcnMgYXRleGl0IGhh
bmRsZXJzIHRvIGNsZWFudXAgaXRzIGdsb2JhbCBkaXNwbGF5IGxpc3QuCisgICAgLy8gU2luY2Ug
dGhlIGdsb2JhbCBQbGF0Zm9ybURpc3BsYXkgaW5zdGFuY2UgaXMgY3JlYXRlZCBiZWZvcmUsCisg
ICAgLy8gd2hlbiB0aGUgUGxhdGZvcm1EaXNwbGF5IGRlc3RydWN0b3IgaXMgY2FsbGVkLCBFR0wg
aGFzIGFscmVhZHkgcmVtb3ZlZCB0aGUKKyAgICAvLyBkaXNwbGF5IGZyb20gdGhlIGxpc3QsIGNh
dXNpbmcgZWdsVGVybWluYXRlKCkgdG8gY3Jhc2guIFNvLCBoZXJlIHdlIHJlZ2lzdGVyCisgICAg
Ly8gb3VyIG93biBhdGV4aXQgaGFuZGxlciwgYWZ0ZXIgRUdMIGhhcyBiZWVuIGluaXRpYWxpemVk
IGFuZCBhZnRlciB0aGUgZ2xvYmFsCisgICAgLy8gaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCB0
byBlbnN1cmUgd2UgY2FsbCBlZ2xUZXJtaW5hdGUoKSBiZWZvcmUgdGhlIG90aGVyCisgICAgLy8g
RUdMIGF0ZXhpdCBoYW5kbGVycyBhbmQgdGhlIFBsYXRmb3JtRGlzcGxheSBkZXN0cnVjdG9yLgor
ICAgIC8vIFNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTcz
LgorICAgIHN0ZDo6YXRleGl0KFtdIHsgUGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCku
dGVybWluYXRlRUdMRGlzcGxheSgpOyB9KTsKIH0KIAogdm9pZCBQbGF0Zm9ybURpc3BsYXk6OnRl
cm1pbmF0ZUVHTERpc3BsYXkoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>280238</attachid>
            <date>2016-06-01 08:56:11 -0700</date>
            <delta_ts>2016-06-01 09:23:43 -0700</delta_ts>
            <desc>Updated patch</desc>
            <filename>wk2-wayland-display-crash.diff</filename>
            <type>text/plain</type>
            <size>3092</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA1ZWIwYjAwLi4xMTExOThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIg
QEAKKzIwMTYtMDYtMDEgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtXYXlsYW5kXSBQbGF0Zm9ybURpc3BsYXlXYXlsYW5kIGRlc3RydWN0b3Ig
aXMgc3VwZXIgY3Jhc2h5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNTc5NzMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFR0wgcmVnaXN0ZXJzIHR3byBhdCBleGlzdCBjYWxsYmFja3Mgb25lIHRvIGZpbmlz
aCB0aGUgZGlzcGxheSBhbmQgYW5vdGhlciBvbmUgdG8gdW5sb2FkIGRyaXZlcnMsIHRoZSBvbmUg
dG8KKyAgICAgICAgZmluaXNoIHRoZSBkaXNwbGF5IGhhcHBlbnMgZmlyc3QuIFdoZW4gb3VyIGRl
c3RydWN0b3IgaXMgY2FsbGVkIHRoZSBfZWdsRmluaURpc3BsYXkgY2FsbGJhY2sgaGFzIGFscmVh
ZHkgYmVlbgorICAgICAgICBjYWxsZWQsIHNvIHdlIGhhdmUgYSB2YWxpZCBwb2ludGVyIGZvciBh
biBhbHJlYWR5IGZpbmlzaGVkIGRpc3BsYXkuIFRoZW4gZWdsVGVybWluYXRlIHRyaWVzIHRvIGZp
bmQgdGhlIGRpc3BsYXkKKyAgICAgICAgaW4gdGhlIGdsb2JhbCBkaXNwbGF5IGxpc3QsIGJ1dCBm
YWlscyBhbmQgZm9yIHNvbWUgcmVhc29uIGl0IGNyYXNoZXMgd2hlbiB0cnlpbmcgdG8gcmV0dXJu
IGFuIGVycm9yLgorICAgICAgICBJZiBhdGV4aXQgaXMgY2FsbGVkIGFmdGVyIHRoZSBnbG9iYWwg
UGxhdGZvcm1EaXNwbGF5IGNvbnN0cnVjdG9yLCB0aGUgYXRleGl0IGhhbmRsZXIgaXMgY2FsbGVk
IGJlZm9yZSB0aGUKKyAgICAgICAgZGVzdHJ1Y3Rvci4gVGhlIGF0ZXhpdCBjYWxsYmFja3MgYXJl
IGNhbGxlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyBpZiB3ZSByZWdpc3RlciBhbiBhdGV4aXQgaGFu
ZGxlciBhZnRlciB0aGUKKyAgICAgICAgZ2xvYmFsIGluc3RhY2UgaGFzIGJlZW4gY3JlYXRlZCBh
bmQgYWZ0ZXIgRUdMIGhhcyBiZWVuIGluaXRpYWxpemVkLCB3ZSBjb3VsZCB0ZXJtaW5hdGUgdGhl
IEVHTCBkaXNwbGF5IGJlZm9yZQorICAgICAgICB0aGUgRUdMIGF0ZXhpdCBoYW5kbGVycyBhbmQg
dGhlIGdsb2JhbCBQbGF0Zm9ybURpc3BsYXkgZGVzdHJ1Y3Rvci4KKworICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybURpc3BsYXk6OmluaXRpYWxpemVFR0xEaXNwbGF5KToKKwogMjAxNi0wNi0wMSAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIGFjY2lkZW50YWwg
ZnByaW50Zi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Bs
YXRmb3JtRGlzcGxheS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9QbGF0
Zm9ybURpc3BsYXkuY3BwCmluZGV4IDE5YTZiOTkuLjhkNWM3ZDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1BsYXRmb3JtRGlzcGxheS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvUGxhdGZvcm1EaXNwbGF5LmNwcApAQCAtMTEy
LDEwICsxMTIsOCBAQCBQbGF0Zm9ybURpc3BsYXk6OlBsYXRmb3JtRGlzcGxheSgpCiAKIFBsYXRm
b3JtRGlzcGxheTo6flBsYXRmb3JtRGlzcGxheSgpCiB7Ci0gICAgLy8gV2luQ2Fpcm8gY3Jhc2hl
cyB3aGVuIHRlcm1pbmF0aW5nIEVHTCBvbiBleGl0LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDU4MzIKLSNpZiBVU0UoRUdMKSAmJiAhUExBVEZPUk0o
V0lOKQotICAgIHRlcm1pbmF0ZUVHTERpc3BsYXkoKTsKKyNpZiBVU0UoRUdMKQorICAgIEFTU0VS
VChtX2VnbERpc3BsYXkgPT0gRUdMX05PX0RJU1BMQVkpOwogI2VuZGlmCiB9CiAKQEAgLTE1OSwx
MCArMTU3LDIxIEBAIHZvaWQgUGxhdGZvcm1EaXNwbGF5Ojppbml0aWFsaXplRUdMRGlzcGxheSgp
CiAgICAgICAgIHRlcm1pbmF0ZUVHTERpc3BsYXkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
KworICAgIC8vIEVHTCByZWdpc3RlcnMgYXRleGl0IGhhbmRsZXJzIHRvIGNsZWFudXAgaXRzIGds
b2JhbCBkaXNwbGF5IGxpc3QuCisgICAgLy8gU2luY2UgdGhlIGdsb2JhbCBQbGF0Zm9ybURpc3Bs
YXkgaW5zdGFuY2UgaXMgY3JlYXRlZCBiZWZvcmUsCisgICAgLy8gd2hlbiB0aGUgUGxhdGZvcm1E
aXNwbGF5IGRlc3RydWN0b3IgaXMgY2FsbGVkLCBFR0wgaGFzIGFscmVhZHkgcmVtb3ZlZCB0aGUK
KyAgICAvLyBkaXNwbGF5IGZyb20gdGhlIGxpc3QsIGNhdXNpbmcgZWdsVGVybWluYXRlKCkgdG8g
Y3Jhc2guIFNvLCBoZXJlIHdlIHJlZ2lzdGVyCisgICAgLy8gb3VyIG93biBhdGV4aXQgaGFuZGxl
ciwgYWZ0ZXIgRUdMIGhhcyBiZWVuIGluaXRpYWxpemVkIGFuZCBhZnRlciB0aGUgZ2xvYmFsCisg
ICAgLy8gaW5zdGFuY2UgaGFzIGJlZW4gY3JlYXRlZCB0byBlbnN1cmUgd2UgY2FsbCBlZ2xUZXJt
aW5hdGUoKSBiZWZvcmUgdGhlIG90aGVyCisgICAgLy8gRUdMIGF0ZXhpdCBoYW5kbGVycyBhbmQg
dGhlIFBsYXRmb3JtRGlzcGxheSBkZXN0cnVjdG9yLgorICAgIC8vIFNlZSBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3OTczLgorICAgIHN0ZDo6YXRleGl0KFtdIHsg
UGxhdGZvcm1EaXNwbGF5OjpzaGFyZWREaXNwbGF5KCkudGVybWluYXRlRUdMRGlzcGxheSgpOyB9
KTsKIH0KIAogdm9pZCBQbGF0Zm9ybURpc3BsYXk6OnRlcm1pbmF0ZUVHTERpc3BsYXkoKQogewor
ICAgIEFTU0VSVChtX2VnbERpc3BsYXlJbml0aWFsaXplZCk7CiAgICAgaWYgKG1fZWdsRGlzcGxh
eSA9PSBFR0xfTk9fRElTUExBWSkKICAgICAgICAgcmV0dXJuOwogICAgIGVnbFRlcm1pbmF0ZSht
X2VnbERpc3BsYXkpOwo=
</data>
<flag name="review"
          id="304202"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>