Commit 8856a396 authored by Andrea Azzarone's avatar Andrea Azzarone 🚴 Committed by Andrea Azzarone

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.

!474
parent b0fb39bb
Pipeline #65599 passed with stages
in 4 minutes
......@@ -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);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment