summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--firefox-wayland-crash-mozbz1507475.patch94
-rw-r--r--firefox.spec2
2 files changed, 96 insertions, 0 deletions
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_subcompositor*>(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, &registry_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, &registry_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 8b469fd..1d48c39 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -157,6 +157,7 @@ Patch574: firefox-pipewire.patch
Patch581: mozilla-1493081.patch
Patch582: mozilla-1504689.patch
Patch585: mozilla-1507475.patch
+Patch586: firefox-wayland-crash-mozbz1507475.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -374,6 +375,7 @@ This package contains results of tests executed during build.
%patch581 -p1 -b .mozilla-1493081
%patch582 -p1 -b .mozilla-1504689
%patch585 -p1 -b .mozbz1507475
+%patch586 -p1 -b .crash-mozbz1507475
%{__rm} -f .mozconfig
%{__cp} %{SOURCE10} .mozconfig
bgstack15