libaurum: use ecore_main_loop_thread_safe_call_sync for avoiding crash 04/316404/3
authorHosang Kim <hosang12.kim@samsung.com>
Wed, 21 Aug 2024 03:51:22 +0000 (12:51 +0900)
committerkim hosang <hosang12.kim@samsung.com>
Wed, 21 Aug 2024 03:57:51 +0000 (03:57 +0000)
Sometimes fd handler is called before fd handler is fully created.

Change-Id: I48c965061383abb57b77dd3768788cd5bdb0e0b7

libaurum/src/Impl/TizenDeviceImpl.cc

index 6df359172be7dbf0beb946a99fcbd77b148b4809..a9243ba54ecebaaf52e7de543e136b42666cf5b9 100644 (file)
@@ -53,10 +53,15 @@ TizenDeviceImpl::TizenDeviceImpl()
 : mFakeTouchHandle{0}, mFakeKeyboardHandle{0}, mFakeWheelHandle{0}, tStart{}, isTimerStarted{false}, mTouchSeq{}
 {
     LOGI("device implementation init");
-    TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(this);
-    obj->mFakeTouchHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, "SMSRC Fake Input");
-    obj->mFakeKeyboardHandle =
-       efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, "SMSRC Fake Input");
+    ecore_main_loop_thread_safe_call_sync([](void *data)->void*{
+        TizenDeviceImpl *obj = static_cast<TizenDeviceImpl*>(data);
+        obj->mFakeTouchHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_TOUCHSCREEN, "SMSRC Fake Input");
+        obj->mFakeKeyboardHandle =
+        efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_KEYBOARD, "SMSRC Fake Input");
+        obj->mFakeWheelHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_POINTER, "SMSRC Fake Input");
+
+        return NULL;
+    }, this);
 
     int width = 0;
     int height = 0;
@@ -68,9 +73,14 @@ TizenDeviceImpl::TizenDeviceImpl()
 
 TizenDeviceImpl::~TizenDeviceImpl()
 {
-   TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(this);
-   efl_util_input_deinitialize_generator(obj->mFakeTouchHandle);
-   efl_util_input_deinitialize_generator(obj->mFakeKeyboardHandle);
+    ecore_main_loop_thread_safe_call_sync([](void *data)->void*{
+        TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(data);
+        efl_util_input_deinitialize_generator(obj->mFakeTouchHandle);
+        efl_util_input_deinitialize_generator(obj->mFakeKeyboardHandle);
+        efl_util_input_deinitialize_generator(obj->mFakeWheelHandle);
+
+        return NULL;
+    }, this);
 }
 
 bool TizenDeviceImpl::click(const int x, const int y)
@@ -137,13 +147,11 @@ bool TizenDeviceImpl::wheelUp(int amount, const int durationMs)
     LOGI("wheel up %d for %d", amount, durationMs);
     long result = -1;
     TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(this);
-    obj->mFakeWheelHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_POINTER, "SMSRC Fake Input");
     for (int i = 0; i < amount; i++){
          TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(this);
          result = (long)efl_util_input_generate_wheel(obj->mFakeWheelHandle, EFL_UTIL_INPUT_POINTER_WHEEL_HORZ, 1);
          usleep(durationMs * MSEC_PER_SEC/amount);
     }
-    efl_util_input_deinitialize_generator(obj->mFakeWheelHandle);
 
     return result == EFL_UTIL_ERROR_NONE;
 }
@@ -153,13 +161,11 @@ bool TizenDeviceImpl::wheelDown(int amount, const int durationMs)
     LOGI("wheel down %d for %d", amount, durationMs);
     long result = -1;
     TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(this);
-    obj->mFakeWheelHandle = efl_util_input_initialize_generator_with_sync(EFL_UTIL_INPUT_DEVTYPE_POINTER, "SMSRC Fake Input");
     for (int i = 0; i < amount; i++){
         TizenDeviceImpl *obj = static_cast<TizenDeviceImpl *>(this);
         result = (long)efl_util_input_generate_wheel(obj->mFakeWheelHandle, EFL_UTIL_INPUT_POINTER_WHEEL_HORZ, -1);
         usleep(durationMs * MSEC_PER_SEC/amount);
     }
-    efl_util_input_deinitialize_generator(obj->mFakeWheelHandle);
 
     return result == EFL_UTIL_ERROR_NONE;
 }