From: Changyeon Lee Date: Thu, 9 Sep 2021 01:31:03 +0000 (+0900) Subject: e_comp_screen: Fix leak of gbm device fd X-Git-Tag: submit/tizen/20210909.053044^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0f7a816d42eb0b407c77beacde34fcebb38d2d15;p=platform%2Fupstream%2Fenlightenment.git e_comp_screen: Fix leak of gbm device fd Change-Id: Ie7b3c494cd3b7fde002052211de87841c339fbae --- diff --git a/src/bin/e_comp_screen.c b/src/bin/e_comp_screen.c index 3580eda7e3..615303c6b5 100644 --- a/src/bin/e_comp_screen.c +++ b/src/bin/e_comp_screen.c @@ -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; } diff --git a/src/bin/e_comp_screen.h b/src/bin/e_comp_screen.h index 3e57e5717f..1b438be250 100644 --- a/src/bin/e_comp_screen.h +++ b/src/bin/e_comp_screen.h @@ -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;