e_comp_wl_data: Fix fd leak 58/310958/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 10 May 2024 08:07:09 +0000 (17:07 +0900)
committerJunkyeong Kim <jk0430.kim@samsung.com>
Fri, 10 May 2024 08:07:12 +0000 (17:07 +0900)
If new copy request is received in the middle of the copy operation,
previous copy operation will stop.
At this time, the fd close is missing and the fd leak occurs.

Change-Id: I4d8840f6f79edea2cbcf908a9f6b5ecbab325a40
Signed-off-by: Junkyeong Kim <jk0430.kim@samsung.com>
src/bin/e_comp_wl_data.c

index c1b637a..553fb3b 100644 (file)
@@ -353,7 +353,16 @@ _e_comp_wl_data_offer_cb_resource_destroy(struct wl_resource *resource)
      {
         wl_list_remove(&offer->source_destroy_listener.link);
         if (offer->source->fd_handler)
-          ecore_main_fd_handler_del(offer->source->fd_handler);
+          {
+             ecore_main_fd_handler_del(offer->source->fd_handler);
+             if (offer->fd > 0)
+               {
+                  close(offer->fd);
+                  offer->fd = 0;
+               }
+             if (offer->source->fd[0] > 0)
+               close(offer->source->fd[0]);
+          }
 
         if (wl_resource_get_version(offer->resource) < WL_DATA_OFFER_ACTION_SINCE_VERSION)
           _e_comp_wl_data_source_notify_finish(offer->source);
@@ -380,12 +389,21 @@ _e_comp_wl_data_offer_cb_source_destroy(struct wl_listener *listener, void *data
    E_Comp_Wl_Data_Offer *offer;
 
    DBG("Data Offer Source Destroy");
-   offer = container_of(listener, E_Comp_Wl_Data_Offer, 
+   offer = container_of(listener, E_Comp_Wl_Data_Offer,
                         source_destroy_listener);
    if (!offer) return;
 
    if (offer->source && offer->source->fd_handler)
-     ecore_main_fd_handler_del(offer->source->fd_handler);
+     {
+        ecore_main_fd_handler_del(offer->source->fd_handler);
+        if (offer->fd > 0)
+          {
+             close(offer->fd);
+             offer->fd = 0;
+          }
+        if (offer->source->fd[0] > 0)
+          close(offer->source->fd[0]);
+     }
 
    offer->source = NULL;
 }