From: Seoyeon Date: Tue, 25 Mar 2025 02:20:42 +0000 (+0900) Subject: Improve safe initialization of main loop X-Git-Tag: accepted/tizen/unified/20250509.120514~7 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ff5d727e61d430cc3655233897e57336e28f0d6c;p=platform%2Fcore%2Fuifw%2Faurum.git Improve safe initialization of main loop - Replace `std::call_once` with `std::thread()` for safer initialization - Fix potential deadlock when interacting with EFL main loop from Rust Change-Id: I0b17cd1e7d4bb8b2be0bf268bbe22f5dd71dd305 Signed-off-by: Seoyeon --- diff --git a/libaurum/src/c_bindings/AurumCBindings.cc b/libaurum/src/c_bindings/AurumCBindings.cc index f819375..a3f3b3f 100644 --- a/libaurum/src/c_bindings/AurumCBindings.cc +++ b/libaurum/src/c_bindings/AurumCBindings.cc @@ -21,6 +21,8 @@ #ifdef TIZEN #include +static std::once_flag init_flag; +static std::once_flag shutdown_flag; #endif using namespace Aurum; @@ -28,12 +30,16 @@ using namespace Aurum; void aurum_init() { LOGI("aurum_init"); - AccessibleWatcher::getInstance(); // TODO: Move this to Application side. #ifdef TIZEN - ecore_init(); - ecore_main_loop_begin(); + std::call_once(init_flag, []() { + ecore_init(); + std::thread([]() { + ecore_main_loop_begin(); + }).detach(); + }); #endif + AccessibleWatcher::getInstance(); } void aurum_shutdown() @@ -41,8 +47,13 @@ void aurum_shutdown() LOGI("aurum_shutdown"); // TODO: Move this to Application side. #ifdef TIZEN - ecore_main_loop_quit(); - ecore_shutdown(); + std::call_once(shutdown_flag, []() { + std::thread([]() { + ecore_main_loop_quit(); + }).detach(); + + ecore_shutdown(); + }); #endif }