<?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>209345</bug_id>
          
          <creation_ts>2020-03-20 09:53:24 -0700</creation_ts>
          <short_desc>[GTK][PSON] Crash in WaylandCompositor::Surface destructor with USE_WPE_RENDERER disabled</short_desc>
          <delta_ts>2020-04-12 02:26:33 -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>WebKit Local Build</version>
          <rep_platform>Unspecified</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=210287</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Дилян Палаузов">dpa-webkit</reporter>
          <assigned_to name="Michael Catanzaro">mcatanzaro</assigned_to>
          <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>guillaume.webkit</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1632135</commentid>
    <comment_count>0</comment_count>
    <who name="Дилян Палаузов">dpa-webkit</who>
    <bug_when>2020-03-20 09:53:24 -0700</bug_when>
    <thetext>With WebKitGTK 2.28 running under Epiphany, the latter crashes with this backtrace.

Moved from https://gitlab.gnome.org/GNOME/epiphany/issues/1132 .

Thread 1 (Thread 0x7f205dcdb280 (LWP 22706)):
#0  WebKit::WebPageProxy::viewWidget() (this=&lt;optimized out&gt;) at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h:59
#1  0x00007f206b7f70fc in WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*) (this=this@entry=0x7f204eeeb480, webPage=webPage@entry=0x0) at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:180
#2  0x00007f206b7f75b2 in WebKit::WaylandCompositor::Surface::~Surface() (this=0x7f204eeeb480, __in_chrg=&lt;optimized out&gt;) at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:158
        pendingList = &lt;optimized out&gt;
        list = &lt;optimized out&gt;
#3  0x00007f206b7f7706 in WebKit::&lt;lambda(wl_client*, wl_resource*, uint32_t)&gt;::&lt;lambda(wl_resource*)&gt;::operator() (__closure=0x0, resource=&lt;optimized out&gt;) at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:372
        surface = 0x7f204eeeb480
#4  WebKit::&lt;lambda(wl_client*, wl_resource*, uint32_t)&gt;::&lt;lambda(wl_resource*)&gt;::_FUN(wl_resource *) () at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:373
#5  0x00007f2061bfd1df in destroy_resource (element=0x568ae40, data=&lt;optimized out&gt;, flags=0) at ../src/wayland-server.c:724
        resource = 0x568ae40
#6  0x00007f2061c01631 in for_each_helper (func=func@entry=0x7f2061bfd180 &lt;destroy_resource&gt;, data=data@entry=0x7ffdc5d131bc, entries=&lt;optimized out&gt;, entries=&lt;optimized out&gt;) at ../src/wayland-util.c:372
        start = &lt;optimized out&gt;
        end = 0x2475ef0
        p = 0x2475ec8
        ret = WL_ITERATOR_CONTINUE
#7  0x00007f2061c01b10 in wl_map_for_each (map=map@entry=0x56c1030, func=func@entry=0x7f2061bfd180 &lt;destroy_resource&gt;, data=data@entry=0x7ffdc5d131bc) at ../src/wayland-util.c:385
        ret = &lt;optimized out&gt;
#8  0x00007f2061bfd35e in wl_client_destroy (client=client@entry=0x56c1000) at ../src/wayland-server.c:883
        serial = 0
#9  0x00007f2061bfd413 in destroy_client_with_error (reason=&lt;optimized out&gt;, client=&lt;optimized out&gt;) at ../src/wayland-server.c:319
        client = 0x56c1000
        connection = &lt;optimized out&gt;
        resource = &lt;optimized out&gt;
        object = &lt;optimized out&gt;
        closure = &lt;optimized out&gt;
        message = &lt;optimized out&gt;
        p = {1857958179, 32544}
        resource_flags = &lt;optimized out&gt;
        opcode = &lt;optimized out&gt;
        size = &lt;optimized out&gt;
        since = &lt;optimized out&gt;
        len = &lt;optimized out&gt;
#10 wl_client_connection_data (fd=&lt;optimized out&gt;, mask=&lt;optimized out&gt;, data=0x56c1000) at ../src/wayland-server.c:342
        client = 0x56c1000
        connection = &lt;optimized out&gt;
        resource = &lt;optimized out&gt;
        object = &lt;optimized out&gt;
        closure = &lt;optimized out&gt;
        message = &lt;optimized out&gt;
        p = {1857958179, 32544}
        resource_flags = &lt;optimized out&gt;
        opcode = &lt;optimized out&gt;
        size = &lt;optimized out&gt;
        since = &lt;optimized out&gt;
        len = &lt;optimized out&gt;
#11 0x00007f2061bff0a2 in wl_event_loop_dispatch (loop=0x22e7610, timeout=timeout@entry=0) at ../src/event-loop.c:1027
        ep = {{events = 25, data = {ptr = 0x3b3fae0, fd = 62126816, u32 = 62126816, u64 = 62126816}}, {events = 0, data = {ptr = 0x7ffdc5d131f0, fd = -976145936, u32 = 3318821360, u64 = 140727922274800}}, {events = 80, data = {ptr = 0x0, fd = 0, u32 = 0, u64 = 0}}, {events = 0, data = {ptr = 0x22b7e30, fd = 36404784, u32 = 36404784, u64 = 36404784}}, {events = 3318821688, data = {ptr = 0xc5d1333c00007ffd, fd = 32765, u32 = 32765, u64 = 14254230628395417597}}, {events = 32765, data = {ptr = 0x7ffdc5d13340, fd = -976145600, u32 = 3318821696, u64 = 140727922275136}}, {events = 4294967295, data = {ptr = 0xc5d1333000000000, fd = 0, u32 = 0, u64 = 14254230576855777280}}, {events = 32765, data = {ptr = 0x22b7fc0, fd = 36405184, u32 = 36405184, u64 = 36405184}}, {events = 36405192, data = {ptr = 0x22b7fc000000000, fd = 0, u32 = 0, u64 = 156359074684862464}}, {events = 11, data = {ptr = 0x7ffdc5d13360, fd = -976145568, u32 = 3318821728, u64 = 140727922275168}}, {events = 1601089651, data = {ptr = 0x7f20, fd = 32544, u32 = 32544, u64 = 32544}}, {events = 13893632, data = {ptr = 0x7f205f6f94d8 &lt;_dbus_platform_rmutex_unlock+24&gt;, fd = 1601148120, u32 = 1601148120, u64 = 139777016829144}}, {events = 3318821728, data = {ptr = 0xc5d1338800007ffd, fd = 32765, u32 = 32765, u64 = 14254230954812932093}}, {events = 32765, data = {ptr = 0x7ffdc5d13360, fd = -976145568, u32 = 3318821728, u64 = 140727922275168}}, {events = 1601106952, data = {ptr = 0xc5d1336000007f20, fd = 32544, u32 = 32544, u64 = 14254230783014240032}}, {events = 32765, data = {ptr = 0x7ffdc5d13388, fd = -976145528, u32 = 3318821768, u64 = 140727922275208}}, {events = 3318821792, data = {ptr = 0x5f6fcd5f00007ffd, fd = 32765, u32 = 32765, u64 = 6876940963923656701}}, {events = 32544, data = {ptr = 0x300000002, fd = 2, u32 = 2, u64 = 12884901890}}, {events = 36406400, data = {ptr = 0xc5d133a000000000, fd = 0, u32 = 0, u64 = 14254231057892114432}}, {events = 32765, data = {ptr = 0x7f205f6cb94e &lt;dbus_connection_unref+157&gt;, fd = 1600960846, u32 = 1600960846, u64 = 139777016641870}}, {events = 36405104, data = {ptr = 0x22b848000000000, fd = 0, u32 = 0, u64 = 156364297365094400}}, {events = 0, data = {ptr = 0xc5d133bc, fd = -976145476, u32 = 3318821820, u64 = 3318821820}}, {events = 0, data = {ptr = 0xc5d133e000000003, fd = 3, u32 = 3, u64 = 14254231332770021379}}, {events = 32765, data = {ptr = 0x7f205f6cd409 &lt;_dbus_connection_update_dispatch_status_and_unlock+257&gt;, fd = 1600967689, u32 = 1600967689, u64 = 139777016648713}}, {events = 3318821856, data = {ptr = 0x224402000000000, fd = 0, u32 = 0, u64 = 154318793420570624}}, {events = 0, data = {ptr = 0x22ba040, fd = 36413504, u32 = 36413504, u64 = 36413504}}, {events = 1863211885, data = {ptr = 0x7f20, fd = 32544, u32 = 32544, u64 = 32544}}, {events = 0, data = {ptr = 0x1022b8480, fd = 36406400, u32 = 36406400, u64 = 4331373696}}, {events = 3318821920, data = {ptr = 0x6ebd507c00007ffd, fd = 32765, u32 = 32765, u64 = 7979622608276586493}}, {events = 32544, data = {ptr = 0x7ffdc5d13410, fd = -976145392, u32 = 3318821904, u64 = 140727922275344}}, {events = 8, data = {ptr = 0x220974000000000, fd = 0, u32 = 0, u64 = 153288688464297984}}, {events = 0, data = {ptr = 0x7ffdc5d13428, fd = -976145368, u32 = 3318821928, u64 = 140727922275368}}}
        source = &lt;optimized out&gt;
        i = &lt;optimized out&gt;
        count = &lt;optimized out&gt;
        has_timers = &lt;optimized out&gt;
#12 0x00007f206b7f69c3 in WebKit::&lt;lambda(GSource*, GSourceFunc, gpointer)&gt;::operator() (__closure=0x0, callback=&lt;optimized out&gt;, userData=&lt;optimized out&gt;, source=0x2630980) at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:474
        wlLoopSource = 0x2630980
        events = &lt;optimized out&gt;
#13 WebKit::&lt;lambda(GSource*, GSourceFunc, gpointer)&gt;::_FUN(GSource *, GSourceFunc, gpointer) () at /src/gnome/webkitgtk-2.28.0/Source/WebKit/UIProcess/gtk/WaylandCompositor.cpp:476
#14 0x00007f206f0c8bad in g_main_dispatch (context=0x2244020) at ../glib/gmain.c:3179
        dispatch = 0x7f206b7f6980 &lt;WebKit::&lt;lambda(GSource*, GSourceFunc, gpointer)&gt;::_FUN(GSource *, GSourceFunc, gpointer)&gt;
        prev_source = 0x0
        was_in_call = 0
        user_data = 0x0
        callback = 0x0
        cb_funcs = 0x0
        cb_data = &lt;optimized out&gt;
        need_destroy = &lt;optimized out&gt;
        source = 0x2630980
        current = 0x2244110
        i = 2
        __FUNCTION__ = &quot;g_main_dispatch&quot;
#15 g_main_context_dispatch (context=context@entry=0x2244020) at ../glib/gmain.c:3844
#16 0x00007f206f0c8e00 in g_main_context_iterate (context=context@entry=0x2244020, block=block@entry=0, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at ../glib/gmain.c:3917
        max_priority = 0
        timeout = 0
        some_ready = 1
        nfds = &lt;optimized out&gt;
        allocated_nfds = &lt;optimized out&gt;
        fds = 0x2352db0
#17 0x00007f206f0c8e8f in g_main_context_iteration (context=context@entry=0x2244020, may_block=may_block@entry=0) at ../glib/gmain.c:3978
        retval = &lt;optimized out&gt;
#18 0x00007f206f2cbdca in g_application_run (application=0x223a720 [EphyShell], argc=&lt;optimized out&gt;, argv=&lt;optimized out&gt;) at ../gio/gapplication.c:2583
        arguments = 0x238a810
        status = 0
        context = 0x2244020
        acquired_context = 1
        __FUNCTION__ = &quot;g_application_run&quot;
#19 0x0000000000404b0e in main (argc=1, argv=0x7ffdc5d13768) at ../src/ephy-main.c:427
        option_context = 0x2220dc0
        option_group = 0x2220e40
        error = 0x0
        user_time = 0
        arbitrary_url = 0
        ctx = 0x2355220
        mode = EPHY_EMBED_SHELL_MODE_INCOGNITO
        status = 0
        flags = (EPHY_FILE_HELPERS_PRIVATE_PROFILE | EPHY_FILE_HELPERS_ENSURE_EXISTS | EPHY_FILE_HELPERS_STEAL_DATA)
        desktop_info = 0x0</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638685</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-07 11:44:29 -0700</bug_when>
    <thetext>I suspect that WaylandCompositor is incompatible with PSON, but I&apos;m having trouble reproducing the crash. If anyone has a reproducer, that would be lovely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638757</commentid>
    <comment_count>2</comment_count>
    <who name="Дилян Палаузов">dpa-webkit</who>
    <bug_when>2020-04-07 13:11:50 -0700</bug_when>
    <thetext>I can provide whatever information you want, but I do not know by myself what information to provide.

Epiphany continues crashing occasionally after a while.

I have do add, that I have only Waylang/Weston without Gnome Shell, without XWayland (the latter also stopped magically working nearly at the same time when I upgraded to WebKitGTK 2.28).  And I ofter use Ctrl+Alt+F2 to exit the GUI and then come back.  In the past these forth and back switches lead to Epiphany crashing, but then this was fixed.  Could WebKit be more likely to crash, if it is moved in the background (leave GUI completely, change tab, or change application) during the webpage rendering?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638761</commentid>
    <comment_count>3</comment_count>
    <who name="Guilaume Ayoub">guillaume.webkit</who>
    <bug_when>2020-04-07 13:18:16 -0700</bug_when>
    <thetext>(In reply to Дилян Палаузов from comment #2)
&gt; I can provide whatever information you want, but I do not know by myself
&gt; what information to provide.
&gt; 
&gt; Epiphany continues crashing occasionally after a while.
&gt; 
&gt; I have do add, that I have only Waylang/Weston without Gnome Shell, without
&gt; XWayland (the latter also stopped magically working nearly at the same time
&gt; when I upgraded to WebKitGTK 2.28).  And I ofter use Ctrl+Alt+F2 to exit the
&gt; GUI and then come back.  In the past these forth and back switches lead to
&gt; Epiphany crashing, but then this was fixed.  Could WebKit be more likely to
&gt; crash, if it is moved in the background (leave GUI completely, change tab,
&gt; or change application) during the webpage rendering?

I regularly (+10 times a day) get the crash when I close a tab. Unfortunately, I can’t find a way to reproduce the bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638803</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-07 14:31:40 -0700</bug_when>
    <thetext>OK, so with some help from Jan-Michael, I&apos;ve managed to reproduce. The error occurs when closing a browser tab that was using AC mode and has had at least one process swap. It only happens when closing a single tab, not when closing the entire browser. 

To reproduce:

 * Build with -DUSE_WPE_RENDERER=OFF (workaround for bug #209118)
 * Open two browser tabs in Epiphany: one www.duckduckgo.com and one www.example.com.
 * Load https://webkit.org/blog-files/3d-transforms/poster-circle.html in the www.duckduckgo.com tab
 * Close the poster circle tab
 * UI process crashes

The example.com tab is just here to ensure we have two tabs and can therefore close the other tab without closing the entire browser.

It seems to require that the process has swapped from one using AC mode to another using AC mode. The reproducer still works if you swap duckduckgo.com with the poster circle page, but using example.com to replace either one of them does not work.

It actually only requires one website using AC mode. You can also reproduce by transitioning the tab from poster circle -&gt; example.com -&gt; back to poster circle -&gt; close the poster circle tab.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638931</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-07 20:59:24 -0700</bug_when>
    <thetext>Debugging:

$ jhbuild run epiphany
_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate(): creating this=0x173d160
WebKit::AcceleratedBackingStoreWayland::AcceleratedBackingStoreWayland(WebKit::WebPageProxy&amp;): creating this=0x7fb8725eeb10
void WebKit::WaylandCompositor::registerWebPage(WebKit::WebPageProxy&amp;): webPage=0x7fb8172e6000
void WebKit::WaylandCompositor::bindWebPage(WebKit::WebPageProxy&amp;): webPage=0x7fb8172e6000

&lt;&lt;&lt; example.com tab, unrelated
_WebKitWebViewBasePrivate::_WebKitWebViewBasePrivate(): creating this=0x121a8a0
WebKit::AcceleratedBackingStoreWayland::AcceleratedBackingStoreWayland(WebKit::WebPageProxy&amp;): creating this=0x7fb8725f3390
void WebKit::WaylandCompositor::registerWebPage(WebKit::WebPageProxy&amp;): webPage=0x7fb8172e2a00
void WebKit::WaylandCompositor::bindWebPage(WebKit::WebPageProxy&amp;): webPage=0x7fb8172e2a00
&gt;&gt;&gt;

WebKit::WaylandCompositor::Surface::Surface(): Creating this=0x7fb872590a80
void WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*): this=0x7fb872590a80 webPage=0x7fb8172e6000 m_webPage=(nil)
WebKit::WaylandCompositor::Surface::Surface(): Creating this=0x7fb87258fd20
void WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*): this=0x7fb87258fd20 webPage=0x7fb8172e6000 m_webPage=(nil)

So far so good. Now:

void WebKit::WaylandCompositor::unbindWebPage(WebKit::WebPageProxy&amp;): webPage=0x7fb8172e6000
void WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*): this=0x7fb87258fd20 webPage=(nil) m_webPage=0x7fb8172e6000
virtual 

We unbound only one of the two Surfaces. Surface 0x7fb87258fd20 (the surface for the second page, poster circle) is OK but Surface 0x7fb872590a80 (the surface for DuckDuckGo) got missed.

WebKit::AcceleratedBackingStoreWayland::~AcceleratedBackingStoreWayland(): destroying this=0x7fb8725eeb10
void WebKit::WaylandCompositor::unregisterWebPage(WebKit::WebPageProxy&amp;): webPage=0x7fb8172e6000
void WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*): this=0x7fb87258fd20 webPage=(nil) m_webPage=(nil)

Here, we again unregistered only one of the two Surfaces. The DuckDuckGo surface is left with a dangling pointer to m_webPage that is no longer valid.

_WebKitWebViewBasePrivate::~_WebKitWebViewBasePrivate(): destroying this=0x173d160
WebKit::WaylandCompositor::Surface::~Surface(): Destroying this=0x7fb87258fd20
void WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*): this=0x7fb87258fd20 webPage=(nil) m_webPage=(nil)
WebKit::WaylandCompositor::Surface::~Surface(): Destroying this=0x7fb872590a80
void WebKit::WaylandCompositor::Surface::setWebPage(WebKit::WebPageProxy*): this=0x7fb872590a80 webPage=(nil) m_webPage=0x7fb8172e6000
Segmentation fault (core dumped)

Now the Surfaces get deleted by the lambda passed to wl_resource_set_implementation() (inside: static const struct wl_compositor_interface compositorInterface). m_webPage is dangling, so Surface::setWebPages tries to use it, and we die.

So problem is that both WaylandCompositor::unbindWebPage and WaylandCompositor::unregisterWebPage failed to call surface-&gt;setWebPage(nullptr) for the second Surface. They both should have done that. Will continue to debug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1638933</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-07 21:05:25 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #5)
&gt; So problem is that both WaylandCompositor::unbindWebPage and
&gt; WaylandCompositor::unregisterWebPage failed to call
&gt; surface-&gt;setWebPage(nullptr) for the second Surface. They both should have
&gt; done that. Will continue to debug.

Oh shit, it&apos;s very simple. We are not using a loop there. We just take the first matching Surface from m_pageMap, assuming that Surface objects never share the same WebPageProxy. Since PSON, that is no longer correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639420</commentid>
    <comment_count>7</comment_count>
      <attachid>395898</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-08 18:43:26 -0700</bug_when>
    <thetext>Created attachment 395898
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639421</commentid>
    <comment_count>8</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-04-08 18:44:01 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639422</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-08 18:49:51 -0700</bug_when>
    <thetext>Well this turned out to be more complicated than I expected.

I uploaded a WIP patch as proof of concept. It fixes the crash, but introduces a new regression: exit from AC mode no longer works, the non-accelerated page does not get rendered. To reproduce, using just one tab: load gnome.org (AC mode) and then example.com (exits AC mode). I&apos;ve tried pretty hard to ensure that no accelerated surface is rendering at the time (at least, that we enter the eglDestroyImage/glDeleteTextures codepath inside WaylandCompositor::Surface::setWebPage) and I haven&apos;t made progress on this for a little while now, so I&apos;m going to stop and just upload what I have and maybe come back to this tomorrow. The patch is peppered with debug statements to try to figure out what&apos;s going wrong with exiting AC mode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639425</commentid>
    <comment_count>10</comment_count>
      <attachid>395898</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-08 18:56:46 -0700</bug_when>
    <thetext>Comment on attachment 395898
Patch

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

&gt; Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:284
&gt; +// FIXME: this check isn&apos;t working
&gt; +    if (m_acceleratedCompositingModeEnabled)
&gt; +        WaylandCompositor::singleton().bindWebPage(m_webPage);

BTW I should have rephrased this confusing debug comment before uploading. The check itself is working properly. It&apos;s just not accomplishing its goal, which is to ensure that exiting AC mode works. (Without this check, bindWebPage would display the accelerated surface, so it needs to be here.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1639693</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-09 10:02:33 -0700</bug_when>
    <thetext>OK, sorry, I&apos;ve failed to debug what&apos;s going wrong with the rendering, and I&apos;m out of time for further debugging. My fallback plan is to disable PSON when building without WPE_RENDERER enabled, bug #210287. That should be an OK workaround for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640129</commentid>
    <comment_count>12</comment_count>
      <attachid>396075</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-10 05:53:31 -0700</bug_when>
    <thetext>Created attachment 396075
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640363</commentid>
    <comment_count>13</comment_count>
      <attachid>396075</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-10 14:21:02 -0700</bug_when>
    <thetext>Comment on attachment 396075
Patch

Smart. And much nicer than my patch.

But problem is that the Surface previously bound to the WebPageProxy is still alive until the web process is closed, but now the Surface is no longer tracked anywhere by the WaylandCompositor class. Right? Unbinding it here removes it from m_pageMap in favor of this new Surface. Now what happens when we process swap back to the original Surface (e.g. using back/forward list)? Won&apos;t the call to bindWebPage fail? It has no way to find the correct Surface anymore. So I think your change is good, but not sufficient to fully fix WaylandCompositor. Do you agree?

I think a separate list of all Surfaces is needed. And identifying the proper Surface from that list in bindWebPage requires the surface to know the WebCore::PageIdentifier that it was originally associated with. Yes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640509</commentid>
    <comment_count>14</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-11 02:44:57 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #13)
&gt; Comment on attachment 396075 [details]
&gt; Patch
&gt; 
&gt; Smart. And much nicer than my patch.
&gt; 
&gt; But problem is that the Surface previously bound to the WebPageProxy is
&gt; still alive until the web process is closed,

This is not true. The Surface object will be deleted when wayland compositor destroys the wayland surface resource.

            wl_resource_set_implementation(surfaceResource, &amp;surfaceInterface, new WaylandCompositor::Surface(),
                [](struct wl_resource* resource) {
                    auto* surface = static_cast&lt;WaylandCompositor::Surface*&gt;(wl_resource_get_user_data(resource));
                    delete surface;
                });


&gt; but now the Surface is no
&gt; longer tracked anywhere by the WaylandCompositor class. Right?

Not true either. The Surface is not tracked by the page map, that only tracks the relationship between page and surface, but not its life time, what we store in the map is indeed a weak pointer to the Surface object. The Surface lifetime is tracked by the Wayland compositor, when the wayland surface is destroyed, the Surface object is deleted.

&gt; Unbinding it
&gt; here removes it from m_pageMap in favor of this new Surface.

This is right.

&gt; Now what
&gt; happens when we process swap back to the original Surface (e.g. using
&gt; back/forward list)?

The web process creates a new wayland surface (which destroys the previous one, and then the Surface object too) and bindSurfaceToWebPage message is sent for the new surface.

&gt; Won&apos;t the call to bindWebPage fail?

No, it&apos;s called from bindSurfaceToWebPage.

&gt; It has no way to
&gt; find the correct Surface anymore.

The right surface has been added to the map in bindSurfaceToWebPage.

&gt; So I think your change is good, but not
&gt; sufficient to fully fix WaylandCompositor. Do you agree?

No.

&gt; I think a separate list of all Surfaces is needed. And identifying the
&gt; proper Surface from that list in bindWebPage requires the surface to know
&gt; the WebCore::PageIdentifier that it was originally associated with. Yes?

No.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640537</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2020-04-11 08:03:41 -0700</bug_when>
    <thetext>&gt; Not true either. The Surface is not tracked by the page map, that only
&gt; tracks the relationship between page and surface, but not its life time,
&gt; what we store in the map is indeed a weak pointer to the Surface object. The
&gt; Surface lifetime is tracked by the Wayland compositor, when the wayland
&gt; surface is destroyed, the Surface object is deleted.

I know, because I made it use the WeakPtr. :)
 
&gt; &gt; Now what
&gt; &gt; happens when we process swap back to the original Surface (e.g. using
&gt; &gt; back/forward list)?
&gt; 
&gt; The web process creates a new wayland surface (which destroys the previous
&gt; one, and then the Surface object too) and bindSurfaceToWebPage message is
&gt; sent for the new surface.

Excellent. I just assumed it was not doing this. If I had added more prints, I would have seen that what I was trying to do wasn&apos;t needed at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640541</commentid>
    <comment_count>16</comment_count>
    <who name="Guilaume Ayoub">guillaume.webkit</who>
    <bug_when>2020-04-11 08:23:25 -0700</bug_when>
    <thetext>No more crashes for me with the patch, thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1640657</commentid>
    <comment_count>17</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2020-04-12 02:26:33 -0700</bug_when>
    <thetext>Committed r259942: &lt;https://trac.webkit.org/changeset/259942&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>395898</attachid>
            <date>2020-04-08 18:43:26 -0700</date>
            <delta_ts>2020-04-10 05:53:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-209345-20200408204325.patch</filename>
            <type>text/plain</type>
            <size>17359</size>
            <attacher name="Michael Catanzaro">mcatanzaro</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjU5MDgzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGUzYzdhNDFlOTIzODdkNmUy
MzU5NzQxZjYwM2EzZmZmMmM4ODQ3ODQuLmZhYmFiZjcwMzg5ZDNmOWU0NTI1OTdkNGRhOTVlZTFh
MWNjN2Y5MTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMjAtMDQtMDggIE1pY2hhZWwg
Q2F0YW56YXJvICA8bWNhdGFuemFyb0Bnbm9tZS5vcmc+CisKKyAgICAgICAgW0dUS11bUFNPTl0g
Q3Jhc2ggaW4gV2F5bGFuZENvbXBvc2l0b3I6OlN1cmZhY2UgZGVzdHJ1Y3RvciB3aXRoIFVTRV9X
UEVfUkVOREVSRVIgZGlzYWJsZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIwOTM0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFRoaXMgVUkgcHJvY2VzcyBjcmFzaCBvY2N1cnMgd2hlbiBjbG9zaW5nIGEg
YnJvd3NlciB0YWIgdGhhdCB3YXMgdXNpbmcgQUMgbW9kZSBhbmQgaGFzIGhhZAorICAgICAgICBh
dCBsZWFzdCBvbmUgcHJvY2VzcyBzd2FwLiBJdCBvbmx5IGhhcHBlbnMgd2hlbiBjbG9zaW5nIGEg
c2luZ2xlIHRhYiwgbm90IHdoZW4gY2xvc2luZyB0aGUKKyAgICAgICAgZW50aXJlIGJyb3dzZXIu
IFRoZSBwcm9ibGVtIGlzIHRoYXQgV2F5bGFuZENvbXBvc2l0b3IgYXNzdW1lcyB0aGF0IGVhY2gg
V2ViUGFnZVByb3h5IGhhcyBhCisgICAgICAgIDE6MSBjb3JyZXNwb25kZW5jZSB3aXRoIGEgV2F5
bGFuZENvbXBvc2l0b3I6OlN1cmZhY2UsIHdoaWNoIGlzIG5vdCB0cnVlIHdoZW4gUFNPTiBpcwor
ICAgICAgICBlbmFibGVkLiBXZSBoYXZlIHRvIGJyZWFrIHRoaXMgYXNzdW1wdGlvbiBieSB0ZWFj
aGluZyBXYXlsYW5kQ29tcG9zaXRvciB0byB1c2Ugd2ViIHByb2Nlc3MKKyAgICAgICAgcGFnZSBJ
RHMgaW5zdGVhZCB3aGVuIHJlcXVpcmVkLiBBZGRpdGlvbmFsbHksIHRvIGVuc3VyZSB3ZSBoYXZl
IG9ubHkgb25lIGFjdGl2ZSBTdXJmYWNlIGF0CisgICAgICAgIGEgdGltZSwgd2UgbXVzdCB1bmJp
bmQgdGhlIFdlYlBhZ2VQcm94eSBmcm9tIGl0cyBTdXJmYWNlIGltbWVkaWF0ZWx5IGJlZm9yZSBw
ZXJmb3JtaW5nIGEKKyAgICAgICAgcHJvY2VzcyBzd2FwLCBhbmQgcmUtYmluZCBpbW1lZGlhdGVs
eSBhZnRlci4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZ3RrL1dlYktpdFdlYlZpZXdCYXNl
LmNwcDoKKyAgICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlV2lsbFN3YXBXZWJQcm9jZXNzKToKKyAg
ICAgICAgKHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKToKKyAgICAgICAg
KiBVSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlLmg6CisgICAgICAgIChXZWJL
aXQ6OkFjY2VsZXJhdGVkQmFja2luZ1N0b3JlOjp3aWxsU3dhcFdlYlByb2Nlc3MpOgorICAgICAg
ICAoV2ViS2l0OjpBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZTo6ZGlkUmVsYXVuY2hXZWJQcm9jZXNz
KToKKyAgICAgICAgKiBVSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFu
ZC5jcHA6CisgICAgICAgIChXZWJLaXQ6OkFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6
d2lsbFN3YXBXZWJQcm9jZXNzKToKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRCYWNraW5n
U3RvcmVXYXlsYW5kOjpkaWRSZWxhdW5jaFdlYlByb2Nlc3MpOgorICAgICAgICAqIFVJUHJvY2Vz
cy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kLmg6CisgICAgICAgICogVUlQcm9j
ZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldheWxhbmRD
b21wb3NpdG9yOjpTdXJmYWNlOjpTdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENv
bXBvc2l0b3I6OlN1cmZhY2U6On5TdXJmYWNlKToKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENv
bXBvc2l0b3I6OlN1cmZhY2U6OnNldFdlYlBhZ2UpOgorICAgICAgICAoV2ViS2l0OjpXYXlsYW5k
Q29tcG9zaXRvcjo6Z2V0VGV4dHVyZSk6CisgICAgICAgIChXZWJLaXQ6OldheWxhbmRDb21wb3Np
dG9yOjpiaW5kU3VyZmFjZVRvV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldheWxhbmRDb21w
b3NpdG9yOjpiaW5kV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldheWxhbmRDb21wb3NpdG9y
Ojp1bmJpbmRXZWJQYWdlKToKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENvbXBvc2l0b3I6OnJl
Z2lzdGVyV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldheWxhbmRDb21wb3NpdG9yOjp1bnJl
Z2lzdGVyV2ViUGFnZSk6CisgICAgICAgIChXZWJLaXQ6OldheWxhbmRDb21wb3NpdG9yOjpzdXJm
YWNlRm9yV2ViUGFnZVByb3h5IGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENvbXBv
c2l0b3I6OnN1cmZhY2VGb3JQYWdlSUQgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9ndGsv
V2F5bGFuZENvbXBvc2l0b3IuaDoKKyAgICAgICAgKFdlYktpdDo6V2F5bGFuZENvbXBvc2l0b3I6
OlN1cmZhY2U6OndlYlBhZ2UgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpXYXlsYW5kQ29tcG9z
aXRvcjo6U3VyZmFjZTo6cGFnZUlEIGNvbnN0KToKKwogMjAyMC0wMy0yNiAgQ2hyaXMgRHVtZXog
IDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJlZ3Jlc3Npb24ocjI1ODk0OSkgU2FmYXJp
IHNvbWV0aW1lcyBjcmFzaGVzIHdoZW4gYmVjb21pbmcgdGhlIGZvcmVncm91bmQgYXBwbGljYXRp
b24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9ndGsvV2ViS2l0V2Vi
Vmlld0Jhc2UuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJW
aWV3QmFzZS5jcHAKaW5kZXggYmUzODdkMWI0NzMyYWY5YmIxYWYxMjQ1YmU0MTYzZmEzMWI1Zjdi
My4uZGJjMDA1ZDI5MDU4MDEzM2RkMTUyMDUwNDRhZDNiZDI1MWFiNTdiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2d0ay9XZWJLaXRXZWJWaWV3QmFzZS5jcHAK
QEAgLTE2OTksMTggKzE2OTksMjEgQEAgdm9pZCB3ZWJraXRXZWJWaWV3QmFzZVJlc2V0Q2xpY2tD
b3VudGVyKFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIAogdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZUVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlLCBjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRy
ZWVDb250ZXh0KQogeworV1RGTG9nQWx3YXlzKCIlczogd2Vidmlldz0lcCBsYXllclRyZWVDb250
ZXh0PSVwIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgd2Via2l0V2ViVmlld0Jhc2UsICZsYXllclRy
ZWVDb250ZXh0KTsKICAgICBBU1NFUlQod2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmFjY2VsZXJh
dGVkQmFja2luZ1N0b3JlKTsKICAgICB3ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+YWNjZWxlcmF0
ZWRCYWNraW5nU3RvcmUtPnVwZGF0ZShsYXllclRyZWVDb250ZXh0KTsKIH0KIAogdm9pZCB3ZWJr
aXRXZWJWaWV3QmFzZVVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSwgY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYgbGF5ZXJU
cmVlQ29udGV4dCkKIHsKK1dURkxvZ0Fsd2F5cygiJXM6IHdlYnZpZXc9JXAgbGF5ZXJUcmVlQ29u
dGV4dD0lcCIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHdlYmtpdFdlYlZpZXdCYXNlLCAmbGF5ZXJU
cmVlQ29udGV4dCk7CiAgICAgQVNTRVJUKHdlYmtpdFdlYlZpZXdCYXNlLT5wcml2LT5hY2NlbGVy
YXRlZEJhY2tpbmdTdG9yZSk7CiAgICAgd2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmFjY2VsZXJh
dGVkQmFja2luZ1N0b3JlLT51cGRhdGUobGF5ZXJUcmVlQ29udGV4dCk7CiB9CiAKIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VFeGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoV2ViS2l0V2ViVmll
d0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQogeworV1RGTG9nQWx3YXlzKCIlczogd2Vidmlldz0l
cCIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHdlYmtpdFdlYlZpZXdCYXNlKTsKICAgICBBU1NFUlQo
d2Via2l0V2ViVmlld0Jhc2UtPnByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlKTsKICAgICB3
ZWJraXRXZWJWaWV3QmFzZS0+cHJpdi0+YWNjZWxlcmF0ZWRCYWNraW5nU3RvcmUtPnVwZGF0ZShM
YXllclRyZWVDb250ZXh0KCkpOwogfQpAQCAtMTcyMywxMCArMTcyNiwxNCBAQCBib29sIHdlYmtp
dFdlYlZpZXdCYXNlTWFrZUdMQ29udGV4dEN1cnJlbnQoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtp
dFdlYlZpZXdCYXNlKQogCiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlV2lsbFN3YXBXZWJQcm9jZXNz
KFdlYktpdFdlYlZpZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKK1dURkxvZ0Fsd2F5cygi
JXM6IHdlYnZpZXc9JXAiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCB3ZWJraXRXZWJWaWV3QmFzZSk7
CiAgICAgV2ViS2l0V2ViVmlld0Jhc2VQcml2YXRlKiBwcml2ID0gd2Via2l0V2ViVmlld0Jhc2Ut
PnByaXY7CiAKICAgICBpZiAocHJpdi0+dmlld0dlc3R1cmVDb250cm9sbGVyKQogICAgICAgICBw
cml2LT52aWV3R2VzdHVyZUNvbnRyb2xsZXItPmRpc2Nvbm5lY3RGcm9tUHJvY2VzcygpOworCisg
ICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlKQorICAgICAgICBwcml2LT5hY2Nl
bGVyYXRlZEJhY2tpbmdTdG9yZS0+d2lsbFN3YXBXZWJQcm9jZXNzKCk7CiB9CiAKIHZvaWQgd2Vi
a2l0V2ViVmlld0Jhc2VEaWRFeGl0V2ViUHJvY2VzcyhXZWJLaXRXZWJWaWV3QmFzZSogd2Via2l0
V2ViVmlld0Jhc2UpCkBAIC0xNzM2LDYgKzE3NDMsNyBAQCB2b2lkIHdlYmtpdFdlYlZpZXdCYXNl
RGlkRXhpdFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZpZXdCYXNlKQog
CiB2b2lkIHdlYmtpdFdlYlZpZXdCYXNlRGlkUmVsYXVuY2hXZWJQcm9jZXNzKFdlYktpdFdlYlZp
ZXdCYXNlKiB3ZWJraXRXZWJWaWV3QmFzZSkKIHsKK1dURkxvZ0Fsd2F5cygiJXM6IHdlYnZpZXc9
JXAiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCB3ZWJraXRXZWJWaWV3QmFzZSk7CiAgICAgLy8gUXVl
dWUgYSByZXNpemUgdG8gZW5zdXJlIHRoZSBuZXcgRHJhd2luZ0FyZWFQcm94eSBpcyByZXNpemVk
LgogICAgIGd0a193aWRnZXRfcXVldWVfcmVzaXplX25vX3JlZHJhdyhHVEtfV0lER0VUKHdlYmtp
dFdlYlZpZXdCYXNlKSk7CiAKQEAgLTE3NDMsNiArMTc1MSw3IEBAIHZvaWQgd2Via2l0V2ViVmll
d0Jhc2VEaWRSZWxhdW5jaFdlYlByb2Nlc3MoV2ViS2l0V2ViVmlld0Jhc2UqIHdlYmtpdFdlYlZp
ZXdCYXNlCiAgICAgaWYgKHByaXYtPmFjY2VsZXJhdGVkQmFja2luZ1N0b3JlKSB7CiAgICAgICAg
IGF1dG8qIGRyYXdpbmdBcmVhID0gc3RhdGljX2Nhc3Q8RHJhd2luZ0FyZWFQcm94eUNvb3JkaW5h
dGVkR3JhcGhpY3MqPihwcml2LT5wYWdlUHJveHktPmRyYXdpbmdBcmVhKCkpOwogICAgICAgICBw
cml2LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS0+dXBkYXRlKGRyYXdpbmdBcmVhLT5sYXllclRy
ZWVDb250ZXh0KCkpOworICAgICAgICBwcml2LT5hY2NlbGVyYXRlZEJhY2tpbmdTdG9yZS0+ZGlk
UmVsYXVuY2hXZWJQcm9jZXNzKCk7CiAgICAgfQogCiAgICAgaWYgKHByaXYtPnZpZXdHZXN0dXJl
Q29udHJvbGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2Nl
bGVyYXRlZEJhY2tpbmdTdG9yZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2Vs
ZXJhdGVkQmFja2luZ1N0b3JlLmgKaW5kZXggYzZhZmIyMGIwNDZjY2U1YjdmOGY4YTQxZWZiZjli
NTUzZjg0OTZlOS4uOGYyNTY5NmM1M2JhZWQ4MjRjYmQ3Mjg3YWFiNzlmZGI0MTRhY2IwOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0
b3JlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2lu
Z1N0b3JlLmgKQEAgLTUxLDYgKzUxLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB1bnJl
YWxpemUoKSB7IH07CiAgICAgdmlydHVhbCBib29sIG1ha2VDb250ZXh0Q3VycmVudCgpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBpbnQgcmVuZGVySG9zdEZpbGVEZXNjcmlwdG9yKCkg
eyByZXR1cm4gLTE7IH0KKyAgICB2aXJ0dWFsIHZvaWQgd2lsbFN3YXBXZWJQcm9jZXNzKCkgeyB9
OworICAgIHZpcnR1YWwgdm9pZCBkaWRSZWxhdW5jaFdlYlByb2Nlc3MoKSB7IH07CiAKIHByb3Rl
Y3RlZDoKICAgICBBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZShXZWJQYWdlUHJveHkmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tpbmdTdG9y
ZVdheWxhbmQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFj
a2luZ1N0b3JlV2F5bGFuZC5jcHAKaW5kZXggNDQzZjA4NzU2ZmQxMGExYmMxNDFlZDY0OTJlOThl
MTEwNzRlMWE4Yi4uYjMxOGRhZTY4ZWE0N2I4ZDljNDhhMWI4NzdiZDY1OWM1NWUyMjMzNyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJhdGVkQmFja2luZ1N0
b3JlV2F5bGFuZC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJh
dGVkQmFja2luZ1N0b3JlV2F5bGFuZC5jcHAKQEAgLTIzMSw5ICsyMzEsOSBAQCBib29sIEFjY2Vs
ZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6bWFrZUNvbnRleHRDdXJyZW50KCkKICAgICByZXR1
cm4gbV9nbENvbnRleHQgPyBtX2dsQ29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkgOiBmYWxz
ZTsKIH0KIAotI2lmIFVTRShXUEVfUkVOREVSRVIpCiB2b2lkIEFjY2VsZXJhdGVkQmFja2luZ1N0
b3JlV2F5bGFuZDo6dXBkYXRlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7Cisj
aWYgVVNFKFdQRV9SRU5ERVJFUikKICAgICBpZiAobV9zdXJmYWNlSUQgPT0gY29udGV4dC5jb250
ZXh0SUQpCiAgICAgICAgIHJldHVybjsKIApAQCAtMjQzLDggKzI0MywxMiBAQCB2b2lkIEFjY2Vs
ZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6dXBkYXRlKGNvbnN0IExheWVyVHJlZUNvbnRleHQm
IGNvbnRleHQpCiAgICAgICAgIHdwZV92aWV3X2JhY2tlbmRfZXhwb3J0YWJsZV9mZG9fZWdsX2Rp
c3BhdGNoX3JlbGVhc2VfZXhwb3J0ZWRfaW1hZ2UobV9leHBvcnRhYmxlLCBtX3BlbmRpbmdJbWFn
ZSk7CiAgICAgICAgIG1fcGVuZGluZ0ltYWdlID0gbnVsbHB0cjsKICAgICB9CisjZWxzZQorICAg
IG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVFbmFibGVkID0gIWNvbnRleHQuaXNFbXB0eSgp
OworI2VuZGlmCiB9CiAKKyNpZiBVU0UoV1BFX1JFTkRFUkVSKQogaW50IEFjY2VsZXJhdGVkQmFj
a2luZ1N0b3JlV2F5bGFuZDo6cmVuZGVySG9zdEZpbGVEZXNjcmlwdG9yKCkKIHsKICAgICByZXR1
cm4gd3BlX3ZpZXdfYmFja2VuZF9nZXRfcmVuZGVyZXJfaG9zdF9mZCh3cGVfdmlld19iYWNrZW5k
X2V4cG9ydGFibGVfZmRvX2dldF92aWV3X2JhY2tlbmQobV9leHBvcnRhYmxlKSk7CkBAIC0yNjUs
NiArMjY5LDIwIEBAIHZvaWQgQWNjZWxlcmF0ZWRCYWNraW5nU3RvcmVXYXlsYW5kOjpkaXNwbGF5
QnVmZmVyKHN0cnVjdCB3cGVfZmRvX2VnbF9leHBvcnRlZF9pCiAKICAgICBtX3dlYlBhZ2Uuc2V0
Vmlld05lZWRzRGlzcGxheShJbnRSZWN0KEludFBvaW50Ojp6ZXJvKCksIG1fd2ViUGFnZS52aWV3
U2l6ZSgpKSk7CiB9CisjZWxzZQordm9pZCBBY2NlbGVyYXRlZEJhY2tpbmdTdG9yZVdheWxhbmQ6
OndpbGxTd2FwV2ViUHJvY2VzcygpCit7CitXVEZMb2dBbHdheXMoIiVzIG1fd2ViUGFnZT0lcCBt
X2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlRW5hYmxlZD0lZCIsIF9fUFJFVFRZX0ZVTkNUSU9O
X18sICZtX3dlYlBhZ2UsIG1fYWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGVFbmFibGVkKTsKKyAg
ICBXYXlsYW5kQ29tcG9zaXRvcjo6c2luZ2xldG9uKCkudW5iaW5kV2ViUGFnZShtX3dlYlBhZ2Up
OworfQorCit2b2lkIEFjY2VsZXJhdGVkQmFja2luZ1N0b3JlV2F5bGFuZDo6ZGlkUmVsYXVuY2hX
ZWJQcm9jZXNzKCkKK3sKK1dURkxvZ0Fsd2F5cygiJXMgbV93ZWJQYWdlPSVwIG1fYWNjZWxlcmF0
ZWRDb21wb3NpdGluZ01vZGVFbmFibGVkPSVkIiwgX19QUkVUVFlfRlVOQ1RJT05fXywgJm1fd2Vi
UGFnZSwgbV9hY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZUVuYWJsZWQpOworLy8gRklYTUU6IHRo
aXMgY2hlY2sgaXNuJ3Qgd29ya2luZworICAgIGlmIChtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlRW5hYmxlZCkKKyAgICAgICAgV2F5bGFuZENvbXBvc2l0b3I6OnNpbmdsZXRvbigpLmJpbmRX
ZWJQYWdlKG1fd2ViUGFnZSk7Cit9CiAjZW5kaWYKIAogYm9vbCBBY2NlbGVyYXRlZEJhY2tpbmdT
dG9yZVdheWxhbmQ6OnBhaW50KGNhaXJvX3QqIGNyLCBjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRlZEJhY2tp
bmdTdG9yZVdheWxhbmQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9BY2NlbGVyYXRl
ZEJhY2tpbmdTdG9yZVdheWxhbmQuaAppbmRleCBkZmZlMjNkOGYzYmUzZjljOGE2MzBlM2MxODhj
MWY2NzVhNjgyOWI2Li5lOWU5YWY2NmY1OTE2YWQzMTIzZThlZWY5YTMyYTI3YjM0ZjVjYmMwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvQWNjZWxlcmF0ZWRCYWNraW5n
U3RvcmVXYXlsYW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL0FjY2VsZXJh
dGVkQmFja2luZ1N0b3JlV2F5bGFuZC5oCkBAIC02OCw5ICs2OCwxMiBAQCBwcml2YXRlOgogICAg
IHZvaWQgcmVhbGl6ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdW5yZWFsaXplKCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKSBvdmVycmlkZTsKLSNpZiBVU0UoV1BFX1JF
TkRFUkVSKQogICAgIHZvaWQgdXBkYXRlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlk
ZTsKKyNpZiBVU0UoV1BFX1JFTkRFUkVSKQogICAgIGludCByZW5kZXJIb3N0RmlsZURlc2NyaXB0
b3IoKSBvdmVycmlkZTsKKyNlbHNlCisgICAgdm9pZCB3aWxsU3dhcFdlYlByb2Nlc3MoKSBvdmVy
cmlkZTsKKyAgICB2b2lkIGRpZFJlbGF1bmNoV2ViUHJvY2VzcygpIG92ZXJyaWRlOwogI2VuZGlm
CiAKICAgICBSZWZQdHI8Y2Fpcm9fc3VyZmFjZV90PiBtX3N1cmZhY2U7CkBAIC04NCw2ICs4Nyw4
IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV92aWV3VGV4dHVyZSB7IDAgfTsKICAgICBzdHJ1
Y3Qgd3BlX2Zkb19lZ2xfZXhwb3J0ZWRfaW1hZ2UqIG1fY29tbWl0dGVkSW1hZ2UgeyBudWxscHRy
IH07CiAgICAgc3RydWN0IHdwZV9mZG9fZWdsX2V4cG9ydGVkX2ltYWdlKiBtX3BlbmRpbmdJbWFn
ZSB7IG51bGxwdHIgfTsKKyNlbHNlCisgICAgYm9vbCBtX2FjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlRW5hYmxlZDsKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvZ3RrL1dheWxhbmRDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2d0ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKaW5kZXggNTBmMDg2ZWRlMmVmMzNlYzhkOWEzMjlk
MjQ0MTBhNjdlNzRiOGExZS4uYzQ2MDhlNmZjNzRhNjVlZmQ0MDRjZmY0OWIyYmU1OTFjYWQ0MzYz
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxhbmRDb21wb3Np
dG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0
b3IuY3BwCkBAIC0xNTEsMTIgKzE1MSwxNyBAQCBJbnRTaXplIFdheWxhbmRDb21wb3NpdG9yOjpC
dWZmZXI6OnNpemUoKSBjb25zdAogV2F5bGFuZENvbXBvc2l0b3I6OlN1cmZhY2U6OlN1cmZhY2Uo
KQogICAgIDogbV9pbWFnZShFR0xfTk9fSU1BR0VfS0hSKQogeworICAgIFdheWxhbmRDb21wb3Np
dG9yOjpzaW5nbGV0b24oKS5tX3N1cmZhY2VzLmFwcGVuZCh0aGlzKTsKIH0KIAogV2F5bGFuZENv
bXBvc2l0b3I6OlN1cmZhY2U6On5TdXJmYWNlKCkKIHsKICAgICBzZXRXZWJQYWdlKG51bGxwdHIp
OwogCisgICAgYXV0byByZW1vdmVkID0gV2F5bGFuZENvbXBvc2l0b3I6OnNpbmdsZXRvbigpLm1f
c3VyZmFjZXMucmVtb3ZlQWxsKHRoaXMpOworUkVMRUFTRV9BU1NFUlQocmVtb3ZlZCA9PSAxKTsK
KyAgICBBU1NFUlRfVU5VU0VEKHJlbW92ZWQsIHJlbW92ZWQgPT0gMSk7CisKICAgICAvLyBEZXN0
cm95IHBlbmRpbmcgZnJhbWUgY2FsbGJhY2tzLgogICAgIGF1dG8gcGVuZGluZ0xpc3QgPSBXVEZN
b3ZlKG1fcGVuZGluZ0ZyYW1lQ2FsbGJhY2tMaXN0KTsKICAgICBmb3IgKGF1dG8qIHJlc291cmNl
IDogcGVuZGluZ0xpc3QpCkBAIC0yMDksNiArMjE0LDE1IEBAIHZvaWQgV2F5bGFuZENvbXBvc2l0
b3I6OlN1cmZhY2U6OnNldFdlYlBhZ2UoV2ViUGFnZVByb3h5KiB3ZWJQYWdlKQogICAgICAgICBz
dXJmYWNlLT5mbHVzaEZyYW1lQ2FsbGJhY2tzKCk7CiAgICAgICAgIHJldHVybiBHX1NPVVJDRV9D
T05USU5VRTsKICAgICB9LCB0aGlzLCBudWxscHRyKTsKKworICAgIC8vIG1fcGFnZUlEIGlzIHRo
ZSBJRCBvZiB0aGUgcGFnZSBpbiB0aGUgd2ViIHByb2Nlc3MuIFRoZSBzYW1lIFdlYlBhZ2VQcm94
eSB3aWxsIHByb2Nlc3Mgc3dhcAorICAgIC8vIGJldHdlZW4gbWFueSBkaWZmZXJlbnQgd2ViIHBy
b2Nlc3MgV2ViUGFnZXMuIFdoZW4gdGhpcyBoYXBwZW5zLCB3ZSBzZXQgbV93ZWJQYWdlID0gbnVs
bHB0ciwKKyAgICAvLyBidXQgd2UgcmVtZW1iZXIgdGhlIG9yaWdpbmFsIHdlYiBwcm9jZXNzIG1f
cGFnZUlEIHNvIHdlIGNhbiBzd2FwIGJhY2sgaW4gdGhlIGZ1dHVyZS4gVGhpcyBJRAorICAgIC8v
IHNob3VsZCBuZXZlciBjaGFuZ2UuCisvLyBGSVhNRSBGSVhNRSBGSVhNRQorUkVMRUFTRV9BU1NF
UlQoIW1fcGFnZUlEIHx8IG1fcGFnZUlEID09IG1fd2ViUGFnZS0+d2ViUGFnZUlEKCkpOworICAg
IEFTU0VSVCghbV9wYWdlSUQgfHwgbV9wYWdlSUQgPT0gbV93ZWJQYWdlLT53ZWJQYWdlSUQoKSk7
CisgICAgbV9wYWdlSUQgPSBtX3dlYlBhZ2UtPndlYlBhZ2VJRCgpOwogfQogCiB2b2lkIFdheWxh
bmRDb21wb3NpdG9yOjpTdXJmYWNlOjptYWtlUGVuZGluZ0J1ZmZlckN1cnJlbnQoKQpAQCAtNTQ5
LDQ4ICs1NjMsMTA0IEBAIFdheWxhbmRDb21wb3NpdG9yOjpXYXlsYW5kQ29tcG9zaXRvcigpCiAK
IGJvb2wgV2F5bGFuZENvbXBvc2l0b3I6OmdldFRleHR1cmUoV2ViUGFnZVByb3h5JiB3ZWJQYWdl
LCB1bnNpZ25lZCYgdGV4dHVyZSwgSW50U2l6ZSYgdGV4dHVyZVNpemUpCiB7Ci0gICAgaWYgKFdl
YWtQdHI8U3VyZmFjZT4gc3VyZmFjZSA9IG1fcGFnZU1hcC5nZXQoJndlYlBhZ2UpKQorICAgIGlm
IChTdXJmYWNlKiBzdXJmYWNlID0gc3VyZmFjZUZvcldlYlBhZ2VQcm94eSh3ZWJQYWdlKSkKICAg
ICAgICAgcmV0dXJuIHN1cmZhY2UtPnByZXBhcmVUZXh0dXJlRm9yUGFpbnRpbmcodGV4dHVyZSwg
dGV4dHVyZVNpemUpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBXYXlsYW5kQ29tcG9z
aXRvcjo6YmluZFN1cmZhY2VUb1dlYlBhZ2UoV2F5bGFuZENvbXBvc2l0b3I6OlN1cmZhY2UqIHN1
cmZhY2UsIFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyIHBhZ2VJRCkKIHsKK1dURkxvZ0Fsd2F5cygi
JXM6IHN1cmZhY2U9JXAgcGFnZUlEPSVsdSIsIF9fUFJFVFRZX0ZVTkNUSU9OX18sIHN1cmZhY2Us
IHBhZ2VJRC50b1VJbnQ2NCgpKTsKKyAgICAvLyBBIFdlYlBhZ2VQcm94eSB3aWxsIHJlZ3VsYXJs
eSBzd2FwIGJldHdlZW4gZGlmZmVyZW50IHdlYiBwcm9jZXNzZXMsIGNoYW5naW5nIGl0cyBwYWdl
SUQgZWFjaAorICAgIC8vIHRpbWUgaXQgZG9lcyBzby4gT3JkaW5hcmlseSwgdGhpcyBsb29wIHdv
dWxkIG5vdCB3b3JrLCBiZWNhdXNlIHRoZXJlIHdvdWxkIGJlIG5vIHdheSB0bworICAgIC8vIGd1
YXJhbnRlZSB0aGF0IHRoZSBXZWJQYWdlUHJveHkgY3VycmVudGx5IGNvcnJlc3BvbmRzIHRvIHRo
ZSB3ZWIgcHJvY2VzcyB3aXRoIHRoZSBleHBlY3RlZAorICAgIC8vIHBhZ2VJRC4gQnV0IGluIHRo
aXMgcGFydGljdWxhciBjYXNlLCB3ZSBjYW4gdHJ1c3QgdGhhdCBpdCBkb2VzLCBvbmx5IGJlY2F1
c2UgdGhpcyBmdW5jdGlvbiBpcworICAgIC8vIGNhbGxlZCBvbmNlIGltbWVkaWF0ZWx5IGFmdGVy
IHRoZSBTdXJmYWNlIGhhcyBqdXN0IGJlZW4gY3JlYXRlZCB0byBkaXNwbGF5IGEgcGFydGljdWxh
ciBwYWdlLgorICAgIC8vCisgICAgLy8gRWFjaCBXZWJQYWdlUHJveHkgaGFzIG1hbnkgU3VyZmFj
ZXMsIGJ1dCBlYWNoIFN1cmZhY2UgY29ycmVzcG9uZHMgdG8gZXhhY3RseSBvbmUgcGFnZSBJRAor
Ly8gRklYTUUgRklYTUUgRklYTUUKICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2UgPSBudWxscHRy
OwotICAgIGZvciAoYXV0byogcGFnZSA6IG1fcGFnZU1hcC5rZXlzKCkpIHsKKyAgICBmb3IgKGF1
dG8qIHBhZ2UgOiBtX3BhZ2VzKSB7CiAgICAgICAgIGlmIChwYWdlLT53ZWJQYWdlSUQoKSA9PSBw
YWdlSUQpIHsKK1dURkxvZ0Fsd2F5cygiRm91bmQgcGFnZSB3aXRoIElEPSVsdSIsIHBhZ2VJRC50
b1VJbnQ2NCgpKTsKICAgICAgICAgICAgIHdlYlBhZ2UgPSBwYWdlOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KK2Vsc2UgV1RGTG9nQWx3YXlzKCJ3ZWJQYWdlPSVwIElEPSVsdSBkb2Vz
IG5vdCBtYXRjaCBkZXNpcmVkIHBhZ2VJRD0lbHUiLCBwYWdlLCBwYWdlLT53ZWJQYWdlSUQoKS50
b1VJbnQ2NCgpLCBwYWdlSUQudG9VSW50NjQoKSk7CiAgICAgfQotICAgIGlmICghd2ViUGFnZSkK
LSAgICAgICAgcmV0dXJuOwogCisgICAgUkVMRUFTRV9BU1NFUlQod2ViUGFnZSk7CiAgICAgc3Vy
ZmFjZS0+c2V0V2ViUGFnZSh3ZWJQYWdlKTsKLSAgICBtX3BhZ2VNYXAuc2V0KHdlYlBhZ2UsIG1h
a2VXZWFrUHRyKCpzdXJmYWNlKSk7CiB9CiAKIHZvaWQgV2F5bGFuZENvbXBvc2l0b3I6OmJpbmRX
ZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKIHsKLSAgICBpZiAoV2Vha1B0cjxTdXJmYWNl
PiBzdXJmYWNlID0gbV9wYWdlTWFwLmdldCgmd2ViUGFnZSkpCitXVEZMb2dBbHdheXMoIiVzIHdl
YlBhZ2U9JXAgKElEPSVsdSkiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAmd2ViUGFnZSwgd2ViUGFn
ZS53ZWJQYWdlSUQoKS50b1VJbnQ2NCgpKTsKKworICAgIGlmIChTdXJmYWNlICpzdXJmYWNlID0g
c3VyZmFjZUZvclBhZ2VJRCh3ZWJQYWdlLndlYlBhZ2VJRCgpKSkKK3sKK1dURkxvZ0Fsd2F5cygi
QmluZCBzdWNjZXNzZnVsIik7CiAgICAgICAgIHN1cmZhY2UtPnNldFdlYlBhZ2UoJndlYlBhZ2Up
OwogfQorZWxzZSBXVEZMb2dBbHdheXMoIldhcm5pbmc6IGZhaWxlZCB0byBmaW5kIHN1cmZhY2Ug
dG8gYmluZCB0byB3ZWIgcGFnZSIpOworfQogCiB2b2lkIFdheWxhbmRDb21wb3NpdG9yOjp1bmJp
bmRXZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKIHsKLSAgICBpZiAoV2Vha1B0cjxTdXJm
YWNlPiBzdXJmYWNlID0gbV9wYWdlTWFwLmdldCgmd2ViUGFnZSkpCitXVEZMb2dBbHdheXMoIiVz
IHdlYlBhZ2U9JXAgKElEPSVsdSkiLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAmd2ViUGFnZSwgd2Vi
UGFnZS53ZWJQYWdlSUQoKS50b1VJbnQ2NCgpKTsKKyAgICBpZiAoU3VyZmFjZSAqc3VyZmFjZSA9
IHN1cmZhY2VGb3JXZWJQYWdlUHJveHkod2ViUGFnZSkpCit7CitXVEZMb2dBbHdheXMoIlVuYmlu
ZCBzdWNjZXNzZnVsIik7CiAgICAgICAgIHN1cmZhY2UtPnNldFdlYlBhZ2UobnVsbHB0cik7CiB9
CitlbHNlIFdURkxvZ0Fsd2F5cygiV2FybmluZzogZmFpbGVkIHRvIGZpbmQgc3VyZmFjZSB0byB1
bmJpbmQgd2ViIHBhZ2UiKTsKK30KIAogdm9pZCBXYXlsYW5kQ29tcG9zaXRvcjo6cmVnaXN0ZXJX
ZWJQYWdlKFdlYlBhZ2VQcm94eSYgd2ViUGFnZSkKIHsKLSAgICBtX3BhZ2VNYXAuYWRkKCZ3ZWJQ
YWdlLCBudWxscHRyKTsKK1dURkxvZ0Fsd2F5cygiJXM6IHdlYlBhZ2U9JXAgKElEPSVsdSkiLCBf
X1BSRVRUWV9GVU5DVElPTl9fLCAmd2ViUGFnZSwgd2ViUGFnZS53ZWJQYWdlSUQoKS50b1VJbnQ2
NCgpKTsKK1JFTEVBU0VfQVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZ3ZWJQYWdlKSk7CisgICAg
QVNTRVJUKCFtX3BhZ2VzLmNvbnRhaW5zKCZ3ZWJQYWdlKSk7CisgICAgbV9wYWdlcy5hcHBlbmQo
JndlYlBhZ2UpOwogfQogCiB2b2lkIFdheWxhbmRDb21wb3NpdG9yOjp1bnJlZ2lzdGVyV2ViUGFn
ZShXZWJQYWdlUHJveHkmIHdlYlBhZ2UpCiB7Ci0gICAgaWYgKFdlYWtQdHI8U3VyZmFjZT4gc3Vy
ZmFjZSA9IG1fcGFnZU1hcC50YWtlKCZ3ZWJQYWdlKSkKKyAgICBpZiAoU3VyZmFjZSAqc3VyZmFj
ZSA9IHN1cmZhY2VGb3JXZWJQYWdlUHJveHkod2ViUGFnZSkpCit7CitXVEZMb2dBbHdheXMoIlVu
YmluZCBzdWNjZXNzZnVsIGR1cmluZyBkZXJlZ2lzdHJhdGlvbiIpOwogICAgICAgICBzdXJmYWNl
LT5zZXRXZWJQYWdlKG51bGxwdHIpOworfWVsc2UgV1RGTG9nQWx3YXlzKCJXYXJuaW5nOiBmYWls
ZWQgdG8gZmluZCBzdXJmYWNlIHRvIHVuYmluZCB3ZWIgcGFnZSBkdXJpbmcgZGVyZWdpc3RyYXRp
b24iKTsKKworICAgIGF1dG8gcmVtb3ZlZCA9IG1fcGFnZXMucmVtb3ZlQWxsKCZ3ZWJQYWdlKTsK
K1JFTEVBU0VfQVNTRVJUKHJlbW92ZWQgPT0gMSk7CisgICAgQVNTRVJUX1VOVVNFRChyZW1vdmVk
LCByZW1vdmVkID09IDEpOworfQorCitXYXlsYW5kQ29tcG9zaXRvcjo6U3VyZmFjZSogV2F5bGFu
ZENvbXBvc2l0b3I6OnN1cmZhY2VGb3JXZWJQYWdlUHJveHkoV2ViUGFnZVByb3h5JiB3ZWJQYWdl
KSBjb25zdAoreworICAgIFN1cmZhY2UqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgZm9yIChhdXRv
KiBzdXJmYWNlIDogbV9zdXJmYWNlcykgeworICAgICAgICBpZiAoc3VyZmFjZS0+d2ViUGFnZSgp
ID09ICZ3ZWJQYWdlKSB7CitSRUxFQVNFX0FTU0VSVCghcmVzdWx0KTsKKyAgICAgICAgICAgIEFT
U0VSVCghcmVzdWx0KTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN1cmZhY2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworV2F5bGFuZENvbXBvc2l0b3I6OlN1cmZh
Y2UqIFdheWxhbmRDb21wb3NpdG9yOjpzdXJmYWNlRm9yUGFnZUlEKFdlYkNvcmU6OlBhZ2VJZGVu
dGlmaWVyIHBhZ2VJRCkgY29uc3QKK3sKKyAgICBTdXJmYWNlKiByZXN1bHQgPSBudWxscHRyOwor
ICAgIGZvciAoYXV0byAqc3VyZmFjZSA6IG1fc3VyZmFjZXMpIHsKKyAgICAgICAgaWYgKHN1cmZh
Y2UtPnBhZ2VJRCgpID09IHBhZ2VJRCkgeworUkVMRUFTRV9BU1NFUlQoIXJlc3VsdCk7CisgICAg
ICAgICAgICBBU1NFUlQoIXJlc3VsdCk7CisgICAgICAgICAgICByZXN1bHQgPSBzdXJmYWNlOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxhbmRD
b21wb3NpdG9yLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0
b3IuaAppbmRleCBlOWE0MjE4OWI3M2I5YjgzZmZjZDU3OWYwNDlmNTM5ZjllNDhhM2I2Li5hY2Rj
ZGM3NDMwYjFhMTA4Y2JlZWYzMmZjY2RhNzNkYWIxYWExZWUyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuaApAQCAtODEsNyArODEsMTAgQEAg
cHVibGljOgogICAgICAgICB2b2lkIHJlcXVlc3RGcmFtZShzdHJ1Y3Qgd2xfcmVzb3VyY2UqKTsK
ICAgICAgICAgdm9pZCBjb21taXQoKTsKIAorICAgICAgICBXZWJQYWdlUHJveHkqIHdlYlBhZ2Uo
KSBjb25zdCB7IHJldHVybiBtX3dlYlBhZ2U7IH0KICAgICAgICAgdm9pZCBzZXRXZWJQYWdlKFdl
YlBhZ2VQcm94eSopOworICAgICAgICBXZWJDb3JlOjpQYWdlSWRlbnRpZmllciBwYWdlSUQoKSBj
b25zdCB7IHJldHVybiBtX3BhZ2VJRDsgfQorICAgICAgICB2b2lkIHNldFBhZ2VJRChXZWJDb3Jl
OjpQYWdlSWRlbnRpZmllciBwYWdlSUQpIHsgbV9wYWdlSUQgPSBwYWdlSUQ7IH0KICAgICAgICAg
Ym9vbCBwcmVwYXJlVGV4dHVyZUZvclBhaW50aW5nKHVuc2lnbmVkJiwgV2ViQ29yZTo6SW50U2l6
ZSYpOwogCiAgICAgcHJpdmF0ZToKQEAgLTk3LDYgKzEwMCw3IEBAIHB1YmxpYzoKICAgICAgICAg
VmVjdG9yPHdsX3Jlc291cmNlKj4gbV9wZW5kaW5nRnJhbWVDYWxsYmFja0xpc3Q7CiAgICAgICAg
IFZlY3Rvcjx3bF9yZXNvdXJjZSo+IG1fZnJhbWVDYWxsYmFja0xpc3Q7CiAgICAgICAgIFdlYlBh
Z2VQcm94eSogbV93ZWJQYWdlIHsgbnVsbHB0ciB9OworICAgICAgICBXZWJDb3JlOjpQYWdlSWRl
bnRpZmllciBtX3BhZ2VJRDsKICAgICAgICAgdW5zaWduZWQgbV90aWNrQ2FsbGJhY2tJRCB7IDAg
fTsKICAgICB9OwogCkBAIC0xMTUsNiArMTE5LDggQEAgcHJpdmF0ZToKICAgICBXYXlsYW5kQ29t
cG9zaXRvcigpOwogCiAgICAgYm9vbCBpbml0aWFsaXplRUdMKCk7CisgICAgU3VyZmFjZSogc3Vy
ZmFjZUZvcldlYlBhZ2VQcm94eShXZWJQYWdlUHJveHkmKSBjb25zdDsKKyAgICBTdXJmYWNlKiBz
dXJmYWNlRm9yUGFnZUlEKFdlYkNvcmU6OlBhZ2VJZGVudGlmaWVyKSBjb25zdDsKIAogICAgIFN0
cmluZyBtX2Rpc3BsYXlOYW1lOwogCkBAIC0xMjYsNyArMTMyLDkgQEAgcHJpdmF0ZToKICAgICBX
ZWJDb3JlOjpXbFVuaXF1ZVB0cjxzdHJ1Y3Qgd2xfZ2xvYmFsPiBtX2NvbXBvc2l0b3JHbG9iYWw7
CiAgICAgV2ViQ29yZTo6V2xVbmlxdWVQdHI8c3RydWN0IHdsX2dsb2JhbD4gbV93ZWJraXRndGtH
bG9iYWw7CiAgICAgR1JlZlB0cjxHU291cmNlPiBtX2V2ZW50U291cmNlOwotICAgIEhhc2hNYXA8
V2ViUGFnZVByb3h5KiwgV2Vha1B0cjxTdXJmYWNlPj4gbV9wYWdlTWFwOworCisgICAgVmVjdG9y
PFdlYlBhZ2VQcm94eSo+IG1fcGFnZXM7CisgICAgVmVjdG9yPFN1cmZhY2UqPiBtX3N1cmZhY2Vz
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>396075</attachid>
            <date>2020-04-10 05:53:31 -0700</date>
            <delta_ts>2020-04-11 08:03:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-wayland-compositor-pson-crash.diff</filename>
            <type>text/plain</type>
            <size>1518</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggYjhlZGM3YTVkODg2Li5iMDE5OGEzYjdlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMg
KzEsMTcgQEAKKzIwMjAtMDQtMTAgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdW1BTT05dIENyYXNoIGluIFdheWxhbmRDb21wb3NpdG9y
OjpTdXJmYWNlIGRlc3RydWN0b3Igd2l0aCBVU0VfV1BFX1JFTkRFUkVSIGRpc2FibGVkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDkzNDUKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBjYXNlIG9mIFBT
T04gdGhlIHdlYiBwYWdlIGlkZW50aWZpZXIgY2FuIGNoYW5nZSBmbyB0aGUgc2FtZSB3ZWIgcGFn
ZSBwcm94eS4gV2hlbiBzd2FwcGluZyBwcm9jZXNzZXMgdGhlIG5ldworICAgICAgICB3ZWIgcGFn
ZSBjYWxscyBiaW5kU3VyZmFjZVRvV2ViUGFnZSgpLCBidXQgd2Ugc3RpbGwgaGF2ZSB0aGUgd2Vi
IHBhZ2UgcHJveHkgYm91bmQgdG8gdGhlIHByZXZpb3VzIHN1cmZhY2UuIFdlCisgICAgICAgIGp1
c3QgbmVlZCB0byB1bmJpbmQgdGhlIGN1cnJlbnQgc3VyZmFjZSBiZWZvcmUgYmluZGluZyB0aGUg
bmV3IG9uZS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9ndGsvV2F5bGFuZENvbXBvc2l0b3IuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXYXlsYW5kQ29tcG9zaXRvcjo6YmluZFN1cmZhY2VUb1dlYlBh
Z2UpOgorCiAyMDIwLTA0LTA5ICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAK
ICAgICAgICAgQWRkIFdBUk5fVU5VU0VEX1JFVFVSTiB0byBkZWNvZGUgbWV0aG9kcyBpbiBTb3Vy
Y2UvV2ViS2l0L1BsYXRmb3JtL0lQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvZ3RrL1dheWxhbmRDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0
ay9XYXlsYW5kQ29tcG9zaXRvci5jcHAKaW5kZXggNTBmMDg2ZWRlMmVmLi4xOGZkNWJhNTkzMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2d0ay9XYXlsYW5kQ29tcG9zaXRv
ci5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvZ3RrL1dheWxhbmRDb21wb3NpdG9y
LmNwcApAQCAtNTY2LDYgKzU2Niw3IEBAIHZvaWQgV2F5bGFuZENvbXBvc2l0b3I6OmJpbmRTdXJm
YWNlVG9XZWJQYWdlKFdheWxhbmRDb21wb3NpdG9yOjpTdXJmYWNlKiBzdXJmYWNlCiAgICAgaWYg
KCF3ZWJQYWdlKQogICAgICAgICByZXR1cm47CiAKKyAgICB1bmJpbmRXZWJQYWdlKCp3ZWJQYWdl
KTsKICAgICBzdXJmYWNlLT5zZXRXZWJQYWdlKHdlYlBhZ2UpOwogICAgIG1fcGFnZU1hcC5zZXQo
d2ViUGFnZSwgbWFrZVdlYWtQdHIoKnN1cmZhY2UpKTsKIH0K
</data>
<flag name="review"
          id="411508"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>