if you fork and even if you do ecore_fork_reset() a thread calling
ecore_main_loop_thread_safe_call_async(0 for example eill end up
resetting the mainloop thread id to itself (a non mainlopo thread) via
calling eina_main_loop_is() since pid changed. there is little point
in doing this so remove the pid tracking from eina and ensure mainloop
thread id is updated in ecore's fork reset.
@fix
Eina_List *l, *ln;
Ecore_Fork_Cb *fcb;
+ eina_main_loop_define();
eina_lock_take(&_thread_safety);
ecore_pipe_del(_thread_call);
#ifdef EFL_HAVE_THREADS
EAPI pthread_t _eina_main_loop;
-static pid_t _eina_pid;
#endif
#ifdef MT
#ifdef EFL_HAVE_THREADS
_eina_main_loop = pthread_self();
- _eina_pid = getpid();
#endif
#ifdef EINA_HAVE_DEBUG_THREADS
eina_main_loop_is(void)
{
#ifdef EFL_HAVE_THREADS
- pid_t pid;
if (pthread_equal(_eina_main_loop, pthread_self()))
return EINA_TRUE;
-
- pid = getpid();
- if (pid != _eina_pid)
- {
- /* This is in case of a fork, but don't like the solution */
- _eina_pid = pid;
- _eina_main_loop = pthread_self();
- return EINA_TRUE;
- }
#endif
-
return EINA_FALSE;
}
eina_main_loop_define(void)
{
#ifdef EFL_HAVE_THREADS
- _eina_pid = getpid();
_eina_main_loop = pthread_self();
#endif
}