From: Enlightenment S. <no-...@en...> - 2012-08-09 10:52:54
|
Log: ecore: correctly shutdown Ecore_Thread. Author: cedric Date: 2012-08-09 03:52:48 -0700 (Thu, 09 Aug 2012) New Revision: 75039 Trac: http://trac.enlightenment.org/e/changeset/75039 Modified: trunk/ecore/ChangeLog trunk/ecore/NEWS trunk/ecore/src/lib/ecore/ecore.c Modified: trunk/ecore/ChangeLog =================================================================== --- trunk/ecore/ChangeLog 2012-08-09 10:18:53 UTC (rev 75038) +++ trunk/ecore/ChangeLog 2012-08-09 10:52:48 UTC (rev 75039) @@ -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. Modified: trunk/ecore/NEWS =================================================================== --- trunk/ecore/NEWS 2012-08-09 10:18:53 UTC (rev 75038) +++ trunk/ecore/NEWS 2012-08-09 10:52:48 UTC (rev 75039) @@ -27,6 +27,7 @@ - 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. Modified: trunk/ecore/src/lib/ecore/ecore.c =================================================================== --- trunk/ecore/src/lib/ecore/ecore.c 2012-08-09 10:18:53 UTC (rev 75038) +++ trunk/ecore/src/lib/ecore/ecore.c 2012-08-09 10:52:48 UTC (rev 75039) @@ -224,6 +224,7 @@ EAPI int ecore_shutdown(void) { + Ecore_Pipe *p; /* * take a lock here because _ecore_event_shutdown() does callbacks */ @@ -237,6 +238,13 @@ 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 @@ * 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 |