mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2025-12-30 20:10:13 +01:00
Fix mutex hang in colord on output removal
Using the x11 output (maybe with others as well), weston would hang when closing the output if the colord plugin is enabled. The hang occurs in mutex lock in the output notifier handler because the given GMutex value is incorrect. This is because of a cast error, the type of container should be "cms_output" and not "cms_colord". Signed-off-by: Olivier Fourdan <ofourdan@redhat.com> Reviewed-by: Richard Hughes <richard@hughsie.com> Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
This commit is contained in:
parent
b73c58e6d7
commit
2e710e51bb
1 changed files with 4 additions and 8 deletions
|
|
@ -212,10 +212,11 @@ colord_device_changed_cb(CdDevice *device, struct cms_output *ocms)
|
|||
static void
|
||||
colord_notifier_output_destroy(struct wl_listener *listener, void *data)
|
||||
{
|
||||
struct cms_colord *cms =
|
||||
container_of(listener, struct cms_colord, destroy_listener);
|
||||
struct cms_output *ocms =
|
||||
container_of(listener, struct cms_output, destroy_listener);
|
||||
struct weston_output *o = (struct weston_output *) data;
|
||||
struct cms_output *ocms;
|
||||
struct cms_colord *cms = ocms->cms;
|
||||
|
||||
gboolean ret;
|
||||
gchar *device_id;
|
||||
GError *error = NULL;
|
||||
|
|
@ -223,11 +224,6 @@ colord_notifier_output_destroy(struct wl_listener *listener, void *data)
|
|||
colord_idle_cancel_for_output(cms, o);
|
||||
device_id = get_output_id(cms, o);
|
||||
weston_log("colord: output removed %s\n", device_id);
|
||||
ocms = g_hash_table_lookup(cms->devices, device_id);
|
||||
if (!ocms) {
|
||||
weston_log("colord: failed to delete device\n");
|
||||
goto out;
|
||||
}
|
||||
g_signal_handlers_disconnect_by_data(ocms->device, ocms);
|
||||
ret = cd_client_delete_device_sync (cms->client,
|
||||
ocms->device,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue