e_input_backend: fix hang issue during frequent data cloning 59/318059/3
authorJihoon Kim <jihoon48.kim@samsung.com>
Mon, 23 Sep 2024 11:45:52 +0000 (20:45 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Tue, 24 Sep 2024 06:11:41 +0000 (15:11 +0900)
Change-Id: Ib4b48d8d214a7eb273c66d536c9a51318255c7f6
Signed-off-by: Jihoon Kim <jihoon48.kim@samsung.com>
src/bin/inputmgr/e_input_backend.c

index 85c1c91..2c929e7 100644 (file)
@@ -1431,6 +1431,9 @@ EINTERN void
 e_input_backend_thread_safe_call(E_Input_Thread_Safe_Call_Cb cb, void *data, size_t data_length)
 {
    E_Input_Thread_Request_Data order;
+   char *write_buf = NULL;
+   ssize_t write_buf_size = 0;
+
    order.safe_call_cb = cb;
    order.data_length = data_length;
 
@@ -1447,17 +1450,19 @@ e_input_backend_thread_safe_call(E_Input_Thread_Safe_Call_Cb cb, void *data, siz
         return;
      }
 
-   if (input_thread_pipe_write(&order, sizeof(E_Input_Thread_Request_Data)) < 0)
-     {
-        ERR("Failed to write header to pipe\n");
-        return;
-     }
+   write_buf_size = sizeof(E_Input_Thread_Request_Data)+data_length;
+   write_buf = calloc(sizeof(char), write_buf_size);
+   EINA_SAFETY_ON_NULL_RETURN(write_buf);
 
-   if (input_thread_pipe_write(data, data_length) < 0)
+   memcpy(write_buf, &order, sizeof(E_Input_Thread_Request_Data));
+   memcpy(write_buf + sizeof(E_Input_Thread_Request_Data), data, data_length);
+
+   if (input_thread_pipe_write(write_buf, write_buf_size) < 0)
      {
-        ERR("Failed to write header to pipe\n");
-        return;
+        ERR("Failed to write data to pipe\n");
      }
+
+  free(write_buf);
 }
 
 static int