ecore_drm2: Cleanup explicit thread handling

There were cases where the thread queue was not being created, and
cases where the thread queue was not being cleaned up properly.
This commit is contained in:
Christopher Michael 2022-12-03 08:54:42 -05:00
parent 01c6609a82
commit e21afd5d1a
4 changed files with 30 additions and 8 deletions

View File

@ -238,6 +238,8 @@ _ecore_drm2_connectors_create(Ecore_Drm2_Device *dev)
return EINA_TRUE;
err:
eina_thread_queue_free(thq);
thq = NULL;
_ecore_drm2_connectors_destroy(dev);
sym_drmModeFreeConnector(conn);
sym_drmModeFreeResources(res);
@ -257,6 +259,9 @@ _ecore_drm2_connectors_destroy(Ecore_Drm2_Device *dev)
free(conn);
}
eina_thread_queue_free(thq);
thq = NULL;
if (thq)
{
eina_thread_queue_free(thq);
thq = NULL;
}
}

View File

@ -219,6 +219,8 @@ _ecore_drm2_crtcs_create(Ecore_Drm2_Device *dev)
return EINA_TRUE;
err:
eina_thread_queue_free(thq);
thq = NULL;
_ecore_drm2_crtcs_destroy(dev);
sym_drmModeFreeCrtc(c);
sym_drmModeFreeResources(res);
@ -238,8 +240,11 @@ _ecore_drm2_crtcs_destroy(Ecore_Drm2_Device *dev)
free(crtc);
}
eina_thread_queue_free(thq);
thq = NULL;
if (thq)
{
eina_thread_queue_free(thq);
thq = NULL;
}
}
void

View File

@ -449,6 +449,8 @@ _ecore_drm2_displays_create(Ecore_Drm2_Device *dev)
Ecore_Drm2_Crtc *crtc;
Eina_List *l = NULL, *ll = NULL;
thq = eina_thread_queue_new();
/* go through list of connectors and create displays */
EINA_LIST_FOREACH(dev->conns, l, c)
{
@ -517,8 +519,11 @@ _ecore_drm2_displays_destroy(Ecore_Drm2_Device *dev)
free(disp);
}
eina_thread_queue_free(thq);
thq = NULL;
if (thq)
{
eina_thread_queue_free(thq);
thq = NULL;
}
}
EAPI void

View File

@ -265,6 +265,8 @@ _ecore_drm2_planes_create(Ecore_Drm2_Device *dev)
pres = sym_drmModeGetPlaneResources(dev->fd);
if (!pres) return EINA_FALSE;
thq = eina_thread_queue_new();
for (; i < pres->count_planes; i++)
{
/* try to get this plane from drm */
@ -286,6 +288,8 @@ _ecore_drm2_planes_create(Ecore_Drm2_Device *dev)
return EINA_TRUE;
err:
eina_thread_queue_free(thq);
thq = NULL;
_ecore_drm2_planes_destroy(dev);
sym_drmModeFreePlane(p);
sym_drmModeFreePlaneResources(pres);
@ -305,6 +309,9 @@ _ecore_drm2_planes_destroy(Ecore_Drm2_Device *dev)
free(plane);
}
eina_thread_queue_free(thq);
thq = NULL;
if (thq)
{
eina_thread_queue_free(thq);
thq = NULL;
}
}