ecore: correctly shutdown Ecore_Thread.

SVN revision: 75039
This commit is contained in:
Cedric BAIL 2012-08-09 10:52:48 +00:00
parent a5e2b68c69
commit e905f3ccd2
3 changed files with 18 additions and 8 deletions

View File

@ -848,3 +848,6 @@
marshaller changes the pointer to NULL to when the object is destroyed
on the client side. Fixes #1258.
2012-08-09 Cedric Bail
* Correctly shutdown Ecore_Thread.

View File

@ -27,6 +27,7 @@ Fixes:
- Reduce race condition on shutdown of Ecore_Thread.
- Force cancel of all running Ecore_Thread on shutdown.
- Make Ecore_Thread work reliably when called without a running main loop.
- Correctly shutdown Ecore_Thread.
* ecore_x
- Fix unitialized Ecore_X_Atom use.

View File

@ -224,6 +224,7 @@ shutdown_evil:
EAPI int
ecore_shutdown(void)
{
Ecore_Pipe *p;
/*
* take a lock here because _ecore_event_shutdown() does callbacks
*/
@ -237,6 +238,13 @@ ecore_shutdown(void)
if (--_ecore_init_count != 0)
goto unlock;
if (_ecore_fps_debug) _ecore_fps_debug_shutdown();
_ecore_poller_shutdown();
_ecore_animator_shutdown();
_ecore_glib_shutdown();
_ecore_job_shutdown();
_ecore_thread_shutdown();
/* this looks horrible - a hack for now, but something to note. as
* we delete the _thread_call pipe a thread COULD be doing
* ecore_pipe_write() or what not to it at the same time - we
@ -246,25 +254,23 @@ ecore_shutdown(void)
* ok - this causes other valgrind complaints regarding glib aquiring
* locks internally. so fix bug a or bug b. let's leave the original
* bug in then and leave this as a note for now
Ecore_Pipe *p;
*/
/*
* It should be fine now as we do wait for thread to shutdown before
* we try to destroy the pipe.
*/
p = _thread_call;
_thread_call = NULL;
ecore_pipe_wait(p, 1, 0.1);
ecore_pipe_del(p);
eina_lock_free(&_thread_safety);
*/
eina_condition_free(&_thread_cond);
eina_lock_free(&_thread_mutex);
eina_condition_free(&_thread_feedback_cond);
eina_lock_free(&_thread_feedback_mutex);
eina_lock_free(&_thread_id_lock);
if (_ecore_fps_debug) _ecore_fps_debug_shutdown();
_ecore_poller_shutdown();
_ecore_animator_shutdown();
_ecore_glib_shutdown();
_ecore_job_shutdown();
_ecore_thread_shutdown();
#ifndef HAVE_EXOTIC
_ecore_exe_shutdown();
#endif