fix main loop stuff on Windows

SVN revision: 62864
This commit is contained in:
Vincent Torri 2011-08-26 16:13:29 +00:00
parent 56f0311cd3
commit bdde82fda3
1 changed files with 22 additions and 20 deletions

View File

@ -87,14 +87,12 @@ EAPI Eina_Error EINA_ERROR_NOT_MAIN_LOOP = 0;
static const char EINA_ERROR_NOT_MAIN_LOOP_STR[] = "Main loop thread check failed."; static const char EINA_ERROR_NOT_MAIN_LOOP_STR[] = "Main loop thread check failed.";
#ifdef EFL_HAVE_THREADS #ifdef EFL_HAVE_THREADS
# ifdef _WIN32_WCE # ifdef _WIN32
EAPI HANDLE _eina_main_loop; EAPI DWORD _eina_main_loop;
# elif defined(_WIN32)
EAPI HANDLE _eina_main_loop;
# else # else
EAPI pthread_t _eina_main_loop; EAPI pthread_t _eina_main_loop;
static pid_t _eina_pid;
# endif # endif
static pid_t _eina_pid;
#endif #endif
#ifdef EINA_HAVE_DEBUG_THREADS #ifdef EINA_HAVE_DEBUG_THREADS
@ -229,14 +227,12 @@ eina_init(void)
EINA_ERROR_NOT_MAIN_LOOP_STR); EINA_ERROR_NOT_MAIN_LOOP_STR);
#ifdef EFL_HAVE_THREADS #ifdef EFL_HAVE_THREADS
# ifdef _WIN32_CE # ifdef _WIN32
_eina_main_loop = (HANDLE) GetCurrentThreadId(); _eina_main_loop = GetCurrentThreadId();
# elif defined (_WIN32)
_eina_main_loop = (HANDLE) GetCurrentThreadId();
# else # else
_eina_main_loop = pthread_self(); _eina_main_loop = pthread_self();
_eina_pid = getpid();
# endif # endif
_eina_pid = getpid();
#endif #endif
#ifdef EINA_HAVE_DEBUG_THREADS #ifdef EINA_HAVE_DEBUG_THREADS
@ -353,18 +349,18 @@ EAPI Eina_Bool
eina_main_loop_is(void) eina_main_loop_is(void)
{ {
#ifdef EFL_HAVE_THREADS #ifdef EFL_HAVE_THREADS
/* FIXME: need to check how to do this on windows */
# ifdef _WIN32_CE
if (_eina_main_loop == (HANDLE) GetCurrentThreadId())
return EINA_TRUE;
return EINA_FALSE;
# elif defined(_WIN32)
if (_eina_main_loop == (HANDLE) GetCurrentThreadId())
return EINA_TRUE;
return EINA_FALSE;
# else
pid_t pid = getpid(); pid_t pid = getpid();
# ifdef _WIN32
if (pid != _eina_pid)
{
_eina_pid = pid;
_eina_main_loop = GetCurrentThreadId();
return EINA_TRUE;
}
if (_eina_main_loop == GetCurrentThreadId())
return EINA_TRUE;
# else
if (pid != _eina_pid) if (pid != _eina_pid)
{ {
/* This is in case of a fork, but don't like the solution */ /* This is in case of a fork, but don't like the solution */
@ -384,8 +380,14 @@ eina_main_loop_is(void)
EAPI void EAPI void
eina_main_loop_define(void) eina_main_loop_define(void)
{ {
#ifdef EFL_HAVE_THREADS
_eina_pid = getpid(); _eina_pid = getpid();
# ifdef _WIN32
_eina_main_loop = GetCurrentThreadId();
# else
_eina_main_loop = pthread_self(); _eina_main_loop = pthread_self();
# endif
#endif
} }
/** /**