From: Hosang Kim Date: Wed, 21 Aug 2024 03:51:22 +0000 (+0900) Subject: libaurum: use ecore_main_loop_thread_safe_call_sync for avoiding crash X-Git-Tag: accepted/tizen/unified/20240909.100113~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=354f1c011cc742934e0e2db44a942c41e72183b4;p=platform%2Fcore%2Fuifw%2Faurum.git libaurum: use ecore_main_loop_thread_safe_call_sync for avoiding crash Sometimes fd handler is called before fd handler is fully created. Change-Id: I48c965061383abb57b77dd3768788cd5bdb0e0b7 --- diff --git a/libaurum/src/Impl/TizenDeviceImpl.cc b/libaurum/src/Impl/TizenDeviceImpl.cc index 6df3591..a9243ba 100644 --- a/libaurum/src/Impl/TizenDeviceImpl.cc +++ b/libaurum/src/Impl/TizenDeviceImpl.cc @@ -53,10 +53,15 @@ TizenDeviceImpl::TizenDeviceImpl() : mFakeTouchHandle{0}, mFakeKeyboardHandle{0}, mFakeWheelHandle{0}, tStart{}, isTimerStarted{false}, mTouchSeq{} { LOGI("device implementation init"); - TizenDeviceImpl *obj = static_cast(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(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(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(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(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(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(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(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; }