diff options
Diffstat (limited to 'community/mutter/2406.patch')
-rw-r--r-- | community/mutter/2406.patch | 275 |
1 files changed, 0 insertions, 275 deletions
diff --git a/community/mutter/2406.patch b/community/mutter/2406.patch deleted file mode 100644 index 446d912cba3..00000000000 --- a/community/mutter/2406.patch +++ /dev/null @@ -1,275 +0,0 @@ -From 61c9e344e4273e23f3cf55fed7c9c86a97691911 Mon Sep 17 00:00:00 2001 -From: Dor Askayo <dor.askayo@gmail.com> -Date: Sat, 7 May 2022 23:48:22 +0300 -Subject: [PATCH 1/3] screen-cast/src: Avoid undefined behavior with GSource -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Follow the existing convention in Mutter and avoid downcasting -custom GSource structs. - -This fixes the following warning: - ../src/backends/meta-screen-cast-stream-src.c:1301:20: error: dereferencing type-punned pointer will break strict-aliasing rules [-Werror=strict-aliasing] - 1301 | g_clear_pointer ((GSource **) &priv->pipewire_source, g_source_destroy); - /usr/include/glib-2.0/glib/glib-typeof.h:36:36: note: in definition of macro ‘glib_typeof’ - 36 | #define glib_typeof(t) __typeof__ (t) - | ^ - ../src/backends/meta-screen-cast-stream-src.c:1301:3: note: in expansion of macro ‘g_clear_pointer’ - 1301 | g_clear_pointer ((GSource **) &priv->pipewire_source, g_source_destroy); - | ^~~~~~~~~~~~~~~ - -Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2406> ---- - src/backends/meta-screen-cast-stream-src.c | 38 +++++++++++++--------- - 1 file changed, 22 insertions(+), 16 deletions(-) - -diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c -index 1e009070ca..0d8bc17514 100644 ---- a/src/backends/meta-screen-cast-stream-src.c -+++ b/src/backends/meta-screen-cast-stream-src.c -@@ -78,7 +78,7 @@ static guint signals[N_SIGNALS]; - - typedef struct _MetaPipeWireSource - { -- GSource base; -+ GSource source; - - MetaScreenCastStreamSrc *src; - struct pw_loop *pipewire_loop; -@@ -90,7 +90,7 @@ typedef struct _MetaScreenCastStreamSrcPrivate - - struct pw_context *pipewire_context; - struct pw_core *pipewire_core; -- MetaPipeWireSource *pipewire_source; -+ GSource *pipewire_source; - struct spa_hook pipewire_core_listener; - - gboolean is_enabled; -@@ -1145,7 +1145,7 @@ on_core_error (void *data, - } - - static gboolean --pipewire_loop_source_prepare (GSource *base, -+pipewire_loop_source_prepare (GSource *source, - int *timeout) - { - *timeout = -1; -@@ -1190,24 +1190,21 @@ static GSourceFuncs pipewire_source_funcs = - pipewire_loop_source_finalize - }; - --static MetaPipeWireSource * --create_pipewire_source (MetaScreenCastStreamSrc *src) -+static GSource * -+create_pipewire_source (MetaScreenCastStreamSrc *src, -+ struct pw_loop *pipewire_loop) - { - GSource *source; - MetaPipeWireSource *pipewire_source; - - source = g_source_new (&pipewire_source_funcs, sizeof (MetaPipeWireSource)); - g_source_set_name (source, "[mutter] PipeWire"); -+ - pipewire_source = (MetaPipeWireSource *) source; - pipewire_source->src = src; -- pipewire_source->pipewire_loop = pw_loop_new (NULL); -- if (!pipewire_source->pipewire_loop) -- { -- g_source_unref ((GSource *) pipewire_source); -- return NULL; -- } -+ pipewire_source->pipewire_loop = pipewire_loop; - -- g_source_add_unix_fd (&pipewire_source->base, -+ g_source_add_unix_fd (source, - pw_loop_get_fd (pipewire_source->pipewire_loop), - G_IO_IN | G_IO_ERR); - -@@ -1215,7 +1212,7 @@ create_pipewire_source (MetaScreenCastStreamSrc *src) - g_source_attach (source, NULL); - g_source_unref (source); - -- return pipewire_source; -+ return source; - } - - static const struct pw_core_events core_events = { -@@ -1231,8 +1228,17 @@ meta_screen_cast_stream_src_initable_init (GInitable *initable, - MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (initable); - MetaScreenCastStreamSrcPrivate *priv = - meta_screen_cast_stream_src_get_instance_private (src); -+ struct pw_loop *pipewire_loop; -+ -+ pipewire_loop = pw_loop_new (NULL); -+ if (!pipewire_loop) -+ { -+ g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, -+ "Failed to create PipeWire loop"); -+ return FALSE; -+ } - -- priv->pipewire_source = create_pipewire_source (src); -+ priv->pipewire_source = create_pipewire_source (src, pipewire_loop); - if (!priv->pipewire_source) - { - g_set_error (error, G_IO_ERROR, G_IO_ERROR_FAILED, -@@ -1240,7 +1246,7 @@ meta_screen_cast_stream_src_initable_init (GInitable *initable, - return FALSE; - } - -- priv->pipewire_context = pw_context_new (priv->pipewire_source->pipewire_loop, -+ priv->pipewire_context = pw_context_new (pipewire_loop, - NULL, 0); - if (!priv->pipewire_context) - { -@@ -1298,7 +1304,7 @@ meta_screen_cast_stream_src_dispose (GObject *object) - g_clear_pointer (&priv->dmabuf_handles, g_hash_table_destroy); - g_clear_pointer (&priv->pipewire_core, pw_core_disconnect); - g_clear_pointer (&priv->pipewire_context, pw_context_destroy); -- g_clear_pointer ((GSource **) &priv->pipewire_source, g_source_destroy); -+ g_clear_pointer (&priv->pipewire_source, g_source_destroy); - - G_OBJECT_CLASS (meta_screen_cast_stream_src_parent_class)->dispose (object); - } --- -GitLab - - -From 40edfbcbeb64df445249ab7c467dd240ee44d7cb Mon Sep 17 00:00:00 2001 -From: Dor Askayo <dor.askayo@gmail.com> -Date: Sat, 7 May 2022 23:59:06 +0300 -Subject: [PATCH 2/3] tests/screen-cast: Avoid undefined behavior with GSource - -Follow the existing convention in Mutter and avoid downcasting -custom GSource structs. - -Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2406> ---- - src/tests/screen-cast-client.c | 42 ++++++++++++++++++++-------------- - 1 file changed, 25 insertions(+), 17 deletions(-) - -diff --git a/src/tests/screen-cast-client.c b/src/tests/screen-cast-client.c -index cdf0d7dcf5..afd6f17b02 100644 ---- a/src/tests/screen-cast-client.c -+++ b/src/tests/screen-cast-client.c -@@ -83,18 +83,18 @@ typedef struct _ScreenCast - - typedef struct _PipeWireSource - { -- GSource base; -+ GSource source; - - struct pw_loop *pipewire_loop; - } PipeWireSource; - --static PipeWireSource *_pipewire_source; -+static GSource *_pipewire_source; - static struct pw_context *_pipewire_context; - static struct pw_core *_pipewire_core; - static struct spa_hook _pipewire_core_listener; - - static gboolean --pipewire_loop_source_prepare (GSource *base, -+pipewire_loop_source_prepare (GSource *source, - int *timeout) - { - *timeout = -1; -@@ -133,24 +133,26 @@ static GSourceFuncs pipewire_source_funcs = - pipewire_loop_source_finalize - }; - --static PipeWireSource * --create_pipewire_source (void) -+static GSource * -+create_pipewire_source (struct pw_loop *pipewire_loop) - { -+ GSource *source; - PipeWireSource *pipewire_source; - -- pipewire_source = -- (PipeWireSource *) g_source_new (&pipewire_source_funcs, -- sizeof (PipeWireSource)); -- pipewire_source->pipewire_loop = pw_loop_new (NULL); -- g_assert_nonnull (pipewire_source->pipewire_loop); -- g_source_add_unix_fd (&pipewire_source->base, -+ source = g_source_new (&pipewire_source_funcs, -+ sizeof (PipeWireSource)); -+ -+ pipewire_source = (PipeWireSource *) source; -+ pipewire_source->pipewire_loop = pipewire_loop; -+ -+ g_source_add_unix_fd (source, - pw_loop_get_fd (pipewire_source->pipewire_loop), - G_IO_IN | G_IO_ERR); - - pw_loop_enter (pipewire_source->pipewire_loop); -- g_source_attach (&pipewire_source->base, NULL); -+ g_source_attach (source, NULL); - -- return pipewire_source; -+ return source; - } - - static void -@@ -171,9 +173,15 @@ static const struct pw_core_events core_events = { - static void - init_pipewire (void) - { -+ struct pw_loop *pipewire_loop; -+ - pw_init (NULL, NULL); -- _pipewire_source = create_pipewire_source (); -- _pipewire_context = pw_context_new (_pipewire_source->pipewire_loop, -+ -+ pipewire_loop = pw_loop_new (NULL); -+ g_assert_nonnull (pipewire_loop); -+ -+ _pipewire_source = create_pipewire_source (pipewire_loop); -+ _pipewire_context = pw_context_new (pipewire_loop, - NULL, 0); - g_assert_nonnull (_pipewire_context); - _pipewire_core = pw_context_connect (_pipewire_context, NULL, 0); -@@ -192,8 +200,8 @@ release_pipewire (void) - g_clear_pointer (&_pipewire_context, pw_context_destroy); - if (_pipewire_source) - { -- g_source_destroy ((GSource *) _pipewire_source); -- g_source_unref ((GSource *) _pipewire_source); -+ g_source_destroy (_pipewire_source); -+ g_source_unref (_pipewire_source); - _pipewire_source = NULL; - } - } --- -GitLab - - -From 570b94fc43e72ab575c92c07ffa37b8b48f933c1 Mon Sep 17 00:00:00 2001 -From: Dor Askayo <dor.askayo@gmail.com> -Date: Sun, 8 May 2022 00:09:44 +0300 -Subject: [PATCH 3/3] meson: Add -Werror=strict-aliasing - -This warning can point out design issues, so it should be useful to -have it treated as error. - -Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2406> ---- - meson.build | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/meson.build b/meson.build -index d6c1e10b62..21ba74e5fa 100644 ---- a/meson.build -+++ b/meson.build -@@ -427,6 +427,7 @@ if buildtype != 'plain' - '-Werror=pointer-to-int-cast', - '-Werror=empty-body', - '-Werror=write-strings', -+ '-Werror=strict-aliasing', - '-Wno-sign-compare', - '-Wno-cast-function-type', - '-Wno-unused-parameter', --- -GitLab - |