From f232c3cf8d7c403d05a02c6ba695d34208f0901a Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Thu, 11 Apr 2019 13:22:12 +0200 Subject: Updated to 66.0.3 (Build 1) --- mozilla-1517205.patch | 207 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 mozilla-1517205.patch (limited to 'mozilla-1517205.patch') diff --git a/mozilla-1517205.patch b/mozilla-1517205.patch new file mode 100644 index 0000000..5f3fbf4 --- /dev/null +++ b/mozilla-1517205.patch @@ -0,0 +1,207 @@ +diff -up firefox-66.0.3/widget/gtk/mozcontainer.cpp.mozilla-1517205 firefox-66.0.3/widget/gtk/mozcontainer.cpp +--- firefox-66.0.3/widget/gtk/mozcontainer.cpp.mozilla-1517205 2019-04-11 13:12:24.583232286 +0200 ++++ firefox-66.0.3/widget/gtk/mozcontainer.cpp 2019-04-11 13:20:06.900192082 +0200 +@@ -609,7 +609,6 @@ struct wl_surface *moz_container_get_wl_ + + wl_surface_commit(container->surface); + wl_display_flush(waylandDisplay->GetDisplay()); +- WaylandDisplayRelease(waylandDisplay); + } + + LOG(("moz_container_get_wl_surface() [%p] created surface %p\n", +diff -up firefox-66.0.3/widget/gtk/nsClipboardWayland.cpp.mozilla-1517205 firefox-66.0.3/widget/gtk/nsClipboardWayland.cpp +--- firefox-66.0.3/widget/gtk/nsClipboardWayland.cpp.mozilla-1517205 2019-04-09 22:00:47.000000000 +0200 ++++ firefox-66.0.3/widget/gtk/nsClipboardWayland.cpp 2019-04-11 13:12:24.583232286 +0200 +@@ -639,7 +639,6 @@ static gboolean offer_hash_remove(gpoint + nsRetrievalContextWayland::~nsRetrievalContextWayland(void) { + g_hash_table_foreach_remove(mActiveOffers, offer_hash_remove, nullptr); + g_hash_table_destroy(mActiveOffers); +- WaylandDisplayRelease(mDisplay); + } + + GdkAtom *nsRetrievalContextWayland::GetTargets(int32_t aWhichClipboard, +diff -up firefox-66.0.3/widget/gtk/nsWaylandDisplay.cpp.mozilla-1517205 firefox-66.0.3/widget/gtk/nsWaylandDisplay.cpp +--- firefox-66.0.3/widget/gtk/nsWaylandDisplay.cpp.mozilla-1517205 2019-04-09 22:01:14.000000000 +0200 ++++ firefox-66.0.3/widget/gtk/nsWaylandDisplay.cpp 2019-04-11 13:20:26.169157682 +0200 +@@ -19,6 +19,13 @@ namespace widget { + static nsWaylandDisplay *gWaylandDisplays[MAX_DISPLAY_CONNECTIONS]; + static StaticMutex gWaylandDisplaysMutex; + ++static void ReleaseDisplaysAtExit() { ++ for (int i = 0; i < MAX_DISPLAY_CONNECTIONS; i++) { ++ delete gWaylandDisplays[i]; ++ gWaylandDisplays[i] = nullptr; ++ } ++} ++ + // Each thread which is using wayland connection (wl_display) has to operate + // its own wl_event_queue. Main Firefox thread wl_event_queue is handled + // by Gtk main loop, other threads/wl_event_queue has to be handled by us. +@@ -33,7 +40,6 @@ static nsWaylandDisplay *WaylandDisplayG + const StaticMutexAutoLock &) { + for (auto &display : gWaylandDisplays) { + if (display && display->Matches(aDisplay)) { +- NS_ADDREF(display); + return display; + } + } +@@ -41,7 +47,7 @@ static nsWaylandDisplay *WaylandDisplayG + for (auto &display : gWaylandDisplays) { + if (display == nullptr) { + display = new nsWaylandDisplay(aDisplay); +- NS_ADDREF(display); ++ atexit(ReleaseDisplaysAtExit); + return display; + } + } +@@ -65,26 +71,6 @@ nsWaylandDisplay *WaylandDisplayGet(GdkD + return WaylandDisplayGetLocked(display, lock); + } + +-static bool WaylandDisplayReleaseLocked(nsWaylandDisplay *aDisplay, +- const StaticMutexAutoLock &) { +- for (auto &display : gWaylandDisplays) { +- if (display == aDisplay) { +- int rc = display->Release(); +- if (rc == 0) { +- display = nullptr; +- } +- return true; +- } +- } +- MOZ_ASSERT(false, "Missing nsWaylandDisplay for this thread!"); +- return false; +-} +- +-void WaylandDisplayRelease(nsWaylandDisplay *aDisplay) { +- StaticMutexAutoLock lock(gWaylandDisplaysMutex); +- WaylandDisplayReleaseLocked(aDisplay, lock); +-} +- + static void WaylandDisplayLoopLocked(wl_display *aDisplay, + const StaticMutexAutoLock &) { + for (auto &display : gWaylandDisplays) { +@@ -128,6 +114,8 @@ static void global_registry_handler(void + uint32_t id, const char *interface, + uint32_t version) { + auto display = reinterpret_cast(data); ++ if (!display) ++ return; + + if (strcmp(interface, "wl_shm") == 0) { + auto shm = static_cast( +@@ -178,9 +166,7 @@ bool nsWaylandDisplay::Matches(wl_displa + return mThreadId == PR_GetCurrentThread() && aDisplay == mDisplay; + } + +-NS_IMPL_ISUPPORTS(nsWaylandDisplay, nsISupports); +- +-nsWaylandDisplay::nsWaylandDisplay(wl_display *aDisplay) ++nsWaylandDisplay::nsWaylandDisplay(wl_display* aDisplay) + : mThreadId(PR_GetCurrentThread()), + mDisplay(aDisplay), + mEventQueue(nullptr), +@@ -188,9 +174,10 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di + mSubcompositor(nullptr), + mSeat(nullptr), + mShm(nullptr), +- mPrimarySelectionDeviceManager(nullptr) { +- wl_registry *registry = wl_display_get_registry(mDisplay); +- wl_registry_add_listener(registry, ®istry_listener, this); ++ mPrimarySelectionDeviceManager(nullptr), ++ mRegistry(nullptr) { ++ mRegistry = wl_display_get_registry(mDisplay); ++ wl_registry_add_listener(mRegistry, ®istry_listener, this); + + if (NS_IsMainThread()) { + // Use default event queue in main thread operated by Gtk+. +@@ -201,17 +188,19 @@ nsWaylandDisplay::nsWaylandDisplay(wl_di + mEventQueue = wl_display_create_queue(mDisplay); + MessageLoop::current()->PostTask(NewRunnableFunction( + "WaylandDisplayLoop", &WaylandDisplayLoop, mDisplay)); +- wl_proxy_set_queue((struct wl_proxy *)registry, mEventQueue); ++ wl_proxy_set_queue((struct wl_proxy *)mRegistry, mEventQueue); + wl_display_roundtrip_queue(mDisplay, mEventQueue); + wl_display_roundtrip_queue(mDisplay, mEventQueue); + } + } + + nsWaylandDisplay::~nsWaylandDisplay() { +- MOZ_ASSERT(mThreadId == PR_GetCurrentThread()); + // Owned by Gtk+, we don't need to release + mDisplay = nullptr; + ++ wl_registry_destroy(mRegistry); ++ mRegistry = nullptr; ++ + if (mEventQueue) { + wl_event_queue_destroy(mEventQueue); + mEventQueue = nullptr; +diff -up firefox-66.0.3/widget/gtk/nsWaylandDisplay.h.mozilla-1517205 firefox-66.0.3/widget/gtk/nsWaylandDisplay.h +--- firefox-66.0.3/widget/gtk/nsWaylandDisplay.h.mozilla-1517205 2019-04-09 22:01:13.000000000 +0200 ++++ firefox-66.0.3/widget/gtk/nsWaylandDisplay.h 2019-04-11 13:12:24.584232284 +0200 +@@ -20,11 +20,10 @@ namespace widget { + + // Our general connection to Wayland display server, + // holds our display connection and runs event loop. +-class nsWaylandDisplay : public nsISupports { +- NS_DECL_THREADSAFE_ISUPPORTS +- ++class nsWaylandDisplay { + public: + explicit nsWaylandDisplay(wl_display* aDisplay); ++ virtual ~nsWaylandDisplay(); + + bool DisplayLoop(); + bool Matches(wl_display* aDisplay); +@@ -41,7 +40,6 @@ class nsWaylandDisplay : public nsISuppo + return mPrimarySelectionDeviceManager; + }; + +- public: + void SetShm(wl_shm* aShm); + void SetSubcompositor(wl_subcompositor* aSubcompositor); + void SetDataDeviceManager(wl_data_device_manager* aDataDeviceManager); +@@ -49,9 +47,7 @@ class nsWaylandDisplay : public nsISuppo + void SetPrimarySelectionDeviceManager( + gtk_primary_selection_device_manager* aPrimarySelectionDeviceManager); + +- private: +- virtual ~nsWaylandDisplay(); +- ++private: + PRThread* mThreadId; + wl_display* mDisplay; + wl_event_queue* mEventQueue; +@@ -60,10 +56,10 @@ class nsWaylandDisplay : public nsISuppo + wl_seat* mSeat; + wl_shm* mShm; + gtk_primary_selection_device_manager* mPrimarySelectionDeviceManager; ++ wl_registry *mRegistry; + }; + + nsWaylandDisplay* WaylandDisplayGet(GdkDisplay* aGdkDisplay = nullptr); +-void WaylandDisplayRelease(nsWaylandDisplay* aDisplay); + + } // namespace widget + } // namespace mozilla +diff -up firefox-66.0.3/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1517205 firefox-66.0.3/widget/gtk/WindowSurfaceWayland.cpp +--- firefox-66.0.3/widget/gtk/WindowSurfaceWayland.cpp.mozilla-1517205 2019-04-11 13:12:24.577232301 +0200 ++++ firefox-66.0.3/widget/gtk/WindowSurfaceWayland.cpp 2019-04-11 13:12:24.583232286 +0200 +@@ -413,16 +413,6 @@ WindowSurfaceWayland::~WindowSurfaceWayl + delete mBackupBuffer[i]; + } + } +- +- if (!mIsMainThread) { +- // We can be destroyed from main thread even though we was created/used +- // in compositor thread. We have to unref/delete WaylandDisplay in +- // compositor thread then and we can't use MessageLoop::current() here. +- mDisplayThreadMessageLoop->PostTask(NewRunnableFunction( +- "WaylandDisplayRelease", &WaylandDisplayRelease, mWaylandDisplay)); +- } else { +- WaylandDisplayRelease(mWaylandDisplay); +- } + } + + WindowBackBuffer* WindowSurfaceWayland::GetWaylandBufferToDraw(int aWidth, -- cgit