e_comp_wl_data: Check source's fd_handler before delete 43/302143/1
authorJunkyeong Kim <jk0430.kim@samsung.com>
Thu, 30 Nov 2023 08:27:25 +0000 (17:27 +0900)
committerTizen Window System <tizen.windowsystem@gmail.com>
Fri, 1 Dec 2023 05:45:34 +0000 (14:45 +0900)
Fd_handler delete is called always when source destroy even though fd_handler already expired.
To prevent delete call after handler expired when source destroy, set to NULL the fd_handler after delete.

Change-Id: Ib4d0bd69874f216c035ece9bcc3a5cc42d253b10

src/bin/e_comp_wl_data.c

index 9a1e3cb..ba2853e 100644 (file)
@@ -175,6 +175,7 @@ _e_comp_wl_dnd_offer_mediate(void *data, Ecore_Fd_Handler *handler)
      goto cleanup;
 
    ecore_main_fd_handler_del(handler);
+   offer->source->fd_handler = NULL;
 
    DBG("create thread for pipe th:%p,  src:%d, dst:%d", offer->th, td->src_fd, td->dst_fd);
 
@@ -188,6 +189,7 @@ cleanup:
      }
    if (source_fd > 0) close(source_fd);
    ecore_main_fd_handler_del(handler);
+   offer->source->fd_handler = NULL;
 
    return ECORE_CALLBACK_DONE;
 }
@@ -349,7 +351,8 @@ _e_comp_wl_data_offer_cb_resource_destroy(struct wl_resource *resource)
    if (offer->source)
      {
         wl_list_remove(&offer->source_destroy_listener.link);
-        ecore_main_fd_handler_del(offer->source->fd_handler);
+        if (offer->source->fd_handler)
+          ecore_main_fd_handler_del(offer->source->fd_handler);
 
         if (wl_resource_get_version(offer->resource) < WL_DATA_OFFER_ACTION_SINCE_VERSION)
           _e_comp_wl_data_source_notify_finish(offer->source);