forked from enlightenment/efl
ecore-drm: Create udev watch for each output, and delete the watch
when we free the output. Summary: This commit fixes an issue where a hotplug watch was Only being added for One input, and also deletes any created watch during output_free. @fix Signed-off-by: Chris Michael <cp.michael@samsung.com>
This commit is contained in:
parent
6cf9246ad6
commit
8549ee799a
|
@ -680,6 +680,8 @@ ecore_drm_outputs_create(Ecore_Drm_Device *dev)
|
||||||
|
|
||||||
for (i = 0; i < res->count_connectors; i++)
|
for (i = 0; i < res->count_connectors; i++)
|
||||||
{
|
{
|
||||||
|
int events = 0;
|
||||||
|
|
||||||
/* get the connector */
|
/* get the connector */
|
||||||
if (!(conn = drmModeGetConnector(dev->drm.fd, res->connectors[i])))
|
if (!(conn = drmModeGetConnector(dev->drm.fd, res->connectors[i])))
|
||||||
continue;
|
continue;
|
||||||
|
@ -720,6 +722,15 @@ ecore_drm_outputs_create(Ecore_Drm_Device *dev)
|
||||||
drmModeFreeCrtc(crtc);
|
drmModeFreeCrtc(crtc);
|
||||||
drmModeFreeEncoder(enc);
|
drmModeFreeEncoder(enc);
|
||||||
|
|
||||||
|
events = (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE);
|
||||||
|
|
||||||
|
output->watch =
|
||||||
|
eeze_udev_watch_add(EEZE_UDEV_TYPE_DRM, events,
|
||||||
|
_ecore_drm_output_event, output);
|
||||||
|
|
||||||
|
if (!output->watch)
|
||||||
|
ERR("Could not create Eeze_Udev_Watch for drm output");
|
||||||
|
|
||||||
dev->outputs = eina_list_append(dev->outputs, output);
|
dev->outputs = eina_list_append(dev->outputs, output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -737,20 +748,6 @@ ecore_drm_outputs_create(Ecore_Drm_Device *dev)
|
||||||
/* free resources */
|
/* free resources */
|
||||||
drmModeFreeResources(res);
|
drmModeFreeResources(res);
|
||||||
|
|
||||||
if ((output) && (!output->watch))
|
|
||||||
{
|
|
||||||
int events = 0;
|
|
||||||
|
|
||||||
events = (EEZE_UDEV_EVENT_ADD | EEZE_UDEV_EVENT_REMOVE);
|
|
||||||
if (!(output->watch =
|
|
||||||
eeze_udev_watch_add(EEZE_UDEV_TYPE_DRM, events,
|
|
||||||
_ecore_drm_output_event, output)))
|
|
||||||
{
|
|
||||||
ERR("Could not create Eeze_Udev_Watch for drm output");
|
|
||||||
return EINA_FALSE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -762,6 +759,9 @@ ecore_drm_output_free(Ecore_Drm_Output *output)
|
||||||
/* check for valid output */
|
/* check for valid output */
|
||||||
if (!output) return;
|
if (!output) return;
|
||||||
|
|
||||||
|
/* delete any added udev watch */
|
||||||
|
if (output->watch) eeze_udev_watch_del(output->watch);
|
||||||
|
|
||||||
/* free modes */
|
/* free modes */
|
||||||
EINA_LIST_FREE(output->modes, mode)
|
EINA_LIST_FREE(output->modes, mode)
|
||||||
free(mode);
|
free(mode);
|
||||||
|
|
Loading…
Reference in New Issue