diff --git a/firefox.spec b/firefox.spec index 8993c6c..238b9df 100644 --- a/firefox.spec +++ b/firefox.spec @@ -147,7 +147,7 @@ ExcludeArch: s390x Summary: Mozilla Firefox Web browser Name: firefox Version: 84.0.2 -Release: 5%{?pre_tag}%{?dist} +Release: 6%{?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 @@ -223,6 +223,7 @@ Patch418: mozilla-1556931-s390x-hidden-syms.patch Patch420: mozilla-1678680.patch Patch421: mozilla-1680505.patch Patch422: mozilla-1631061.patch +Patch423: mozilla-1681107.patch # Upstream patches from mozbz#1672944 Patch450: pw1.patch @@ -451,6 +452,7 @@ This package contains results of tests executed during build. %patch420 -p1 -b .1678680 %patch421 -p1 -b .1680505 #%patch422 -p1 -b .1631061 +%patch423 -p1 -b .1681107 %patch500 -p1 -b .ffvpx @@ -1033,6 +1035,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Thu Jan 15 2021 Martin Stransky - 84.0.2-6 +- Added WebRender fix (mozbz#1681107). + * Thu Jan 14 2021 Martin Stransky - 84.0.2-5 - Removed some failing tests. - Spec file tweaks. diff --git a/mozilla-1681107.patch b/mozilla-1681107.patch new file mode 100644 index 0000000..e228e35 --- /dev/null +++ b/mozilla-1681107.patch @@ -0,0 +1,47 @@ + +# HG changeset patch +# User sotaro +# Date 1610634595 0 +# Node ID c989e16ae8d0801b76efe712658abcbf3704a486 +# Parent dc0d1d98e111aa781333980c2561f534ea1ebb0b +Bug 1681107 - Fix race condition of calling CompositorBridgeChild::SendPause() r=rmader,stransky + +Differential Revision: https://phabricator.services.mozilla.com/D101693 + +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -5085,23 +5085,29 @@ void nsWindow::NativeMoveResize() { + if (mNeedsShow && mIsShown) { + NativeShow(true); + } + } + + void nsWindow::PauseRemoteRenderer() { + #ifdef MOZ_WAYLAND + if (!mIsDestroyed) { +- if (mContainer && moz_container_wayland_has_egl_window(mContainer)) { ++ if (mContainer) { + // Because wl_egl_window is destroyed on moz_container_unmap(), + // the current compositor cannot use it anymore. To avoid crash, + // pause the compositor and destroy EGLSurface & resume the compositor + // and re-create EGLSurface on next expose event. +- MOZ_ASSERT(GetRemoteRenderer()); +- if (CompositorBridgeChild* remoteRenderer = GetRemoteRenderer()) { ++ ++ // moz_container_wayland_has_egl_window() could not be used here, since ++ // there is a case that resume compositor is not completed yet. ++ ++ CompositorBridgeChild* remoteRenderer = GetRemoteRenderer(); ++ bool needsCompositorPause = !mNeedsCompositorResume && !!remoteRenderer && ++ mCompositorWidgetDelegate; ++ if (needsCompositorPause) { + // XXX slow sync IPC + remoteRenderer->SendPause(); + // Re-request initial draw callback + RefPtr self(this); + moz_container_wayland_add_initial_draw_callback( + mContainer, [self]() -> void { + self->mNeedsCompositorResume = true; + self->MaybeResumeCompositor(); +