raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=965f257e70b2766b41df57c6ead59d422b632062
commit 965f257e70b2766b41df57c6ead59d422b632062 Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> Date: Sat Mar 10 20:02:09 2018 +0900 ecore - efl exe/thread - only allow run once ever --- src/lib/ecore/efl_exe.c | 5 ++++- src/lib/ecore/efl_thread.c | 3 +++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/lib/ecore/efl_exe.c b/src/lib/ecore/efl_exe.c index 4ef0aee967..273b97532e 100644 --- a/src/lib/ecore/efl_exe.c +++ b/src/lib/ecore/efl_exe.c @@ -61,6 +61,7 @@ struct _Efl_Exe_Data } fd; #endif Eina_Bool exit_called : 1; + Eina_Bool run : 1; }; ////////////////////////////////////////////////////////////////////////// @@ -202,7 +203,7 @@ _exe_exit_eval(Eo *obj, Efl_Exe_Data *pd) pd->exit_called = EINA_TRUE; efl_ref(obj); job = eina_future_then(efl_loop_job(loop), _efl_loop_task_exit, obj); - efl_future_Eina_FutureXXX_then(loop, job); + efl_future_Eina_FutureXXX_then(obj, job); } } @@ -361,6 +362,7 @@ _efl_exe_efl_task_run(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd) int pipe_exited[2]; int ret; + if (pd->run) return EINA_FALSE; if (pd->pid != -1) return EINA_FALSE; if (!td) return EINA_FALSE; @@ -445,6 +447,7 @@ _efl_exe_efl_task_run(Eo *obj EINA_UNUSED, Efl_Exe_Data *pd) efl_loop_handler_active_set(efl_added, EFL_LOOP_HANDLER_FLAGS_READ)); _ecore_signal_pid_unlock(); + pd->run = EINA_TRUE; return EINA_TRUE; } // this code is in the child here, and is temporary setup until we diff --git a/src/lib/ecore/efl_thread.c b/src/lib/ecore/efl_thread.c index 857c3c529e..bab5c01717 100644 --- a/src/lib/ecore/efl_thread.c +++ b/src/lib/ecore/efl_thread.c @@ -75,6 +75,7 @@ struct _Efl_Thread_Data Eina_Bool end_sent : 1; Eina_Bool exit_read : 1; Eina_Bool exit_called : 1; + Eina_Bool run : 1; }; ////////////////////////////////////////////////////////////////////////// @@ -582,6 +583,7 @@ _efl_thread_efl_task_run(Eo *obj, Efl_Thread_Data *pd) Efl_Callback_Array_Item_Full *it; Efl_Task_Data *td = efl_data_scope_get(obj, EFL_TASK_CLASS); + if (pd->run) return EINA_FALSE; if (!td) return EINA_FALSE; thdat = calloc(1, sizeof(Thread_Data)); if (!thdat) return EINA_FALSE; @@ -783,6 +785,7 @@ _efl_thread_efl_task_run(Eo *obj, Efl_Thread_Data *pd) return EINA_FALSE; } pd->thdat = thdat; + pd->run = EINA_TRUE; return EINA_TRUE; } --