Hello Release Team,
I'd like to request a hardcode freeze break for
https://gitlab.gnome.org/GNOME/mutter/merge_requests/474.
The MR has already been approved by the maintainer.
The MR contains a fix for a deadlock that can be triggered when changing
the volume in Gnome Shell. If this
issue is triggered the shell will be completely blocked and there is no
easy way to unblock/restart it. In Ubuntu
we already have several reports about this [1]).
Thanks,
[1] https://bugs.launchpad.net/ubuntu/+source/gnome-shell/+bug/1817546
--
Andrea Azzarone
From b90be286a9f032cd7d0e6e44cc454a7db99e609a Mon Sep 17 00:00:00 2001
From: Andrea Azzarone
Date: Mon, 4 Mar 2019 19:37:09 +
Subject: [PATCH] sound-player: Don't deadlock in finish_cb
The function finish_cb can be called as a result of a call to ca_context_cancel
in cancelled_cb. This will result in a deadlock because, as per documentation,
g_cancellable_disconnect cannot be called inside the cancellable handler.
It is possible to detect if the call to finish_cb is caused by ca_context_cancel
checking if error_code == CA_ERROR_CANCELED. To avoid the deadlock we should
call g_signal_handler_disconnect instead g_cancellable_disconnect if this is the
case.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/474
---
src/core/meta-sound-player.c | 6 +-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/core/meta-sound-player.c b/src/core/meta-sound-player.c
index ab934781a..8ef403936 100644
--- a/src/core/meta-sound-player.c
+++ b/src/core/meta-sound-player.c
@@ -117,7 +117,11 @@ finish_cb (ca_context *context,
{
MetaPlayRequest *req = user_data;
- g_cancellable_disconnect (req->cancellable, req->cancel_id);
+ if (error_code != CA_ERROR_CANCELED)
+g_cancellable_disconnect (req->cancellable, req->cancel_id);
+ else if (req->cancellable != NULL && req->cancel_id != 0)
+g_signal_handler_disconnect (req->cancellable, req->cancel_id);
+
meta_play_request_free (req);
}
--
2.20.1
___
release-team@gnome.org
https://mail.gnome.org/mailman/listinfo/release-team
Release-team lurker? Do NOT participate in discussions.