From e693e46adb42296f9860ee38f895ca2dc2b24fab Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Wed, 21 Nov 2018 19:28:45 +0100 Subject: Fixed mozbz#1507475 - crash when display changes --- firefox-wayland-crash-mozbz1507475.patch | 94 ++++++++++++++++++++++++++++++++ firefox.spec | 7 ++- 2 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 firefox-wayland-crash-mozbz1507475.patch diff --git a/firefox-wayland-crash-mozbz1507475.patch b/firefox-wayland-crash-mozbz1507475.patch new file mode 100644 index 0000000..bab96bc --- /dev/null +++ b/firefox-wayland-crash-mozbz1507475.patch @@ -0,0 +1,94 @@ +diff -up firefox-63.0.3/widget/gtk/mozcontainer.cpp.mozbz1507475 firefox-63.0.3/widget/gtk/mozcontainer.cpp +--- firefox-63.0.3/widget/gtk/mozcontainer.cpp.mozbz1507475 2018-11-15 01:20:56.000000000 +0100 ++++ firefox-63.0.3/widget/gtk/mozcontainer.cpp 2018-11-21 15:41:41.858692640 +0100 +@@ -169,6 +169,8 @@ moz_container_class_init (MozContainerCl + } + + #if defined(MOZ_WAYLAND) ++static struct wl_subcompositor *subcompositor; ++ + static void + registry_handle_global (void *data, + struct wl_registry *registry, +@@ -176,9 +178,8 @@ registry_handle_global (void *data, + const char *interface, + uint32_t version) + { +- MozContainer *container = MOZ_CONTAINER(data); + if(strcmp(interface, "wl_subcompositor") == 0) { +- container->subcompositor = ++ subcompositor = + static_cast(wl_registry_bind(registry, + name, + &wl_subcompositor_interface, +@@ -197,6 +198,24 @@ static const struct wl_registry_listener + registry_handle_global, + registry_handle_global_remove + }; ++ ++struct wl_subcompositor* subcompositor_get(void) ++{ ++ if (!subcompositor) { ++ GdkDisplay *gdk_display = gdk_display_get_default(); ++ // Available as of GTK 3.8+ ++ static auto sGdkWaylandDisplayGetWlDisplay = ++ (wl_display *(*)(GdkDisplay *)) ++ dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display"); ++ ++ wl_display* display = sGdkWaylandDisplayGetWlDisplay(gdk_display); ++ wl_registry* registry = wl_display_get_registry(display); ++ wl_registry_add_listener(registry, ®istry_listener, nullptr); ++ wl_display_dispatch(display); ++ wl_display_roundtrip(display); ++ } ++ return subcompositor; ++} + #endif + + void +@@ -208,25 +227,10 @@ moz_container_init (MozContainer *contai + + #if defined(MOZ_WAYLAND) + { +- container->subcompositor = nullptr; + container->surface = nullptr; + container->subsurface = nullptr; + container->eglwindow = nullptr; + container->parent_surface_committed = false; +- +- GdkDisplay *gdk_display = gtk_widget_get_display(GTK_WIDGET(container)); +- if (GDK_IS_WAYLAND_DISPLAY (gdk_display)) { +- // Available as of GTK 3.8+ +- static auto sGdkWaylandDisplayGetWlDisplay = +- (wl_display *(*)(GdkDisplay *)) +- dlsym(RTLD_DEFAULT, "gdk_wayland_display_get_wl_display"); +- +- wl_display* display = sGdkWaylandDisplayGetWlDisplay(gdk_display); +- wl_registry* registry = wl_display_get_registry(display); +- wl_registry_add_listener(registry, ®istry_listener, container); +- wl_display_dispatch(display); +- wl_display_roundtrip(display); +- } + } + #endif + } +@@ -298,7 +302,7 @@ moz_container_map_surface(MozContainer * + } + + container->subsurface = +- wl_subcompositor_get_subsurface (container->subcompositor, ++ wl_subcompositor_get_subsurface (subcompositor_get(), + container->surface, + gtk_surface); + gint x, y; +diff -up firefox-63.0.3/widget/gtk/mozcontainer.h.mozbz1507475 firefox-63.0.3/widget/gtk/mozcontainer.h +--- firefox-63.0.3/widget/gtk/mozcontainer.h.mozbz1507475 2018-11-15 01:20:56.000000000 +0100 ++++ firefox-63.0.3/widget/gtk/mozcontainer.h 2018-11-21 14:16:54.412397805 +0100 +@@ -69,7 +69,6 @@ struct _MozContainer + GList *children; + + #ifdef MOZ_WAYLAND +- struct wl_subcompositor *subcompositor; + struct wl_surface *surface; + struct wl_subsurface *subsurface; + struct wl_egl_window *eglwindow; diff --git a/firefox.spec b/firefox.spec index 61dc7f0..f67f50d 100644 --- a/firefox.spec +++ b/firefox.spec @@ -88,7 +88,7 @@ Summary: Mozilla Firefox Web browser Name: firefox Version: 63.0.3 -Release: 1%{?pre_tag}%{?dist} +Release: 2%{?pre_tag}%{?dist} URL: https://www.mozilla.org/firefox/ License: MPLv1.1 or GPLv2+ or LGPLv2+ Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz @@ -158,6 +158,7 @@ Patch574: firefox-pipewire.patch Patch581: mozilla-1493081.patch Patch582: mozilla-1504689.patch Patch583: firefox-init-wayland-clipboard.patch +Patch584: firefox-wayland-crash-mozbz1507475.patch # Debian patches Patch500: mozilla-440908.patch @@ -376,6 +377,7 @@ This package contains results of tests executed during build. %patch581 -p1 -b .mozilla-1493081 %patch582 -p1 -b .mozilla-1504689 %patch583 -p1 -b .init-wayland-clipboard +%patch584 -p1 -b .mozbz1507475 %{__rm} -f .mozconfig %{__cp} %{SOURCE10} .mozconfig @@ -932,6 +934,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Wed Nov 21 2018 Martin Stransky - 63.0.3-2 +- Fixed mozbz#1507475 - crash when display changes (rhbz#1646151). + * Thu Nov 15 2018 Martin Stransky - 63.0.3-1 - Updated to latest upstream (63.0.3) -- cgit