drm: Free resources when destruction
authorTaekyun Kim <tkq.kim@samsung.com>
Thu, 3 Sep 2015 08:16:15 +0000 (17:16 +0900)
committerTaekyun Kim <tkq.kim@samsung.com>
Thu, 3 Sep 2015 08:16:15 +0000 (17:16 +0900)
Change-Id: I2bbfbfac3835e5c8722df478d6f3a40c6595088b

src/lib/drm/drm-common.c
src/lib/drm/drm-connector.c

index 6af2906..89283eb 100644 (file)
@@ -107,6 +107,8 @@ pepper_drm_create(pepper_compositor_t *compositor, struct udev *udev, const char
 
     drm->compositor = compositor;
     drm->fd = -1;
+    pepper_list_init(&drm->plane_list);
+    pepper_list_init(&drm->connector_list);
 
     /* Find primary GPU udev device. Usually card0. */
     udev_device = find_primary_gpu(udev);
@@ -165,7 +167,6 @@ pepper_drm_create(pepper_compositor_t *compositor, struct udev *udev, const char
     drm->resources = drmModeGetResources(drm->fd);
     PEPPER_CHECK(drm->resources, goto error, "drmModeGetResources() failed.\n");
 
-    pepper_list_init(&drm->plane_list);
     drm_init_connectors(drm);
     drm_init_planes(drm);
     udev_device_unref(udev_device);
@@ -185,22 +186,7 @@ pepper_drm_create(pepper_compositor_t *compositor, struct udev *udev, const char
 
 error:
     if (drm)
-    {
-        if (drm->resources)
-            drmModeFreeResources(drm->resources);
-
-        if (drm->udev_event_source)
-            wl_event_source_remove(drm->udev_event_source);
-
-        if (drm->drm_event_source)
-            wl_event_source_remove(drm->drm_event_source);
-
-        if (drm->udev_monitor)
-            udev_monitor_unref(drm->udev_monitor);
-
-        if (drm->fd != -1)
-            close(drm->fd);
-    }
+        pepper_drm_destroy(drm);
 
     if (udev_device)
         udev_device_unref(udev_device);
@@ -229,5 +215,17 @@ pepper_drm_destroy(pepper_drm_t *drm)
     if (drm->resources)
         drmModeFreeResources(drm->resources);
 
+    if (drm->udev_event_source)
+        wl_event_source_remove(drm->udev_event_source);
+
+    if (drm->drm_event_source)
+        wl_event_source_remove(drm->drm_event_source);
+
+    if (drm->udev_monitor)
+        udev_monitor_unref(drm->udev_monitor);
+
+    if (drm->fd != -1)
+        close(drm->fd);
+
     free(drm);
 }
index 6458b16..fc71e4f 100644 (file)
@@ -49,8 +49,6 @@ drm_init_connectors(pepper_drm_t *drm)
 {
     int i;
 
-    pepper_list_init(&drm->connector_list);
-
     for (i = 0; i < drm->resources->count_connectors; i++)
     {
         drm_connector_t *conn = calloc(1, sizeof(drm_connector_t));