e_comp_screen: Fix leak of gbm device fd 24/263724/4 accepted/tizen/unified/20210910.004745 submit/tizen/20210909.053044
authorChangyeon Lee <cyeon.lee@samsung.com>
Thu, 9 Sep 2021 01:31:03 +0000 (10:31 +0900)
committerGwanglim Lee <gl77.lee@samsung.com>
Thu, 9 Sep 2021 05:02:35 +0000 (05:02 +0000)
Change-Id: Ie7b3c494cd3b7fde002052211de87841c339fbae

src/bin/e_comp_screen.c
src/bin/e_comp_screen.h

index 3580eda7e3f00c1b57b9cf9fba9f92fdff38dbec..615303c6b5d6af1e9dc1c43d9ba477207f2d403d 100644 (file)
@@ -424,6 +424,7 @@ _e_comp_screen_new(E_Comp *comp)
      }
    e_main_ts_end("\tTDM Display Init Done");
 
+   e_comp_screen->gdevice_fd = -1;
    e_comp_screen->fd = -1;
    tdm_display_get_fd(e_comp_screen->tdisplay, &fd);
    if (fd < 0)
@@ -506,6 +507,7 @@ _e_comp_screen_del(E_Comp_Screen *e_comp_screen)
      }
 
    if (e_comp_screen->gdevice) gbm_device_destroy(e_comp_screen->gdevice);
+   if (e_comp_screen->gdevice_fd >= 0) close(e_comp_screen->gdevice_fd);
    if (e_comp_screen->bufmgr) tbm_bufmgr_deinit(e_comp_screen->bufmgr);
    if (e_comp_screen->fd >= 0) close(e_comp_screen->fd);
    if (e_comp_screen->hdlr) ecore_main_fd_handler_del(e_comp_screen->hdlr);
@@ -1672,7 +1674,14 @@ e_comp_screen_gbm_device_get(E_Comp_Screen *e_comp_screen)
    EINA_SAFETY_ON_FALSE_RETURN_VAL(fd >= 0, NULL);
 
    e_comp_screen->gdevice = gbm_create_device(fd);
-   EINA_SAFETY_ON_NULL_RETURN_VAL(e_comp_screen->gdevice, NULL);
+   if (e_comp_screen->gdevice)
+     {
+        ERR("fail to create gbm device");
+        close(fd);
+        return NULL;
+     }
+
+   e_comp_screen->gdevice_fd = fd;
 
    return e_comp_screen->gdevice;
 }
index 3e57e5717f759178e45ea2cdcf92ed48aa1e3f4b..1b438be250bd1a7958ffeb86cf95ec6f31ef28fd 100644 (file)
@@ -21,6 +21,7 @@ struct _E_Comp_Screen
    tdm_display   *tdisplay;
    tbm_bufmgr     bufmgr;
    void          *gdevice;
+   int            gdevice_fd;
 
    /* for sw compositing */
    const Eina_List *devices;