forked from enlightenment/efl
efl: ecore thread safety (remove option, keep code, add instructions).
* remove the option, as it shouldn't really exist. * keep code, as requested by Cedric, someone may fix it someday. And the default is the DISABLED, as the enable was broken. * Add instructions on how to solve the problem, if a brave folk is up to it. SVN revision: 80352
This commit is contained in:
parent
c6d1839a22
commit
f8dd49ded4
19
configure.ac
19
configure.ac
|
@ -1953,20 +1953,6 @@ AC_ARG_ENABLE([g-main-loop],
|
|||
],
|
||||
[want_g_main_loop="no"])
|
||||
|
||||
# thread safety
|
||||
|
||||
AC_ARG_ENABLE([thread-safety],
|
||||
[AC_HELP_STRING([--enable-thread-safety],
|
||||
[enable thread safety. @<:@default=disabled@:>@])],
|
||||
[
|
||||
if test "x${enableval}" = "xyes" ; then
|
||||
want_thread_safety="yes"
|
||||
else
|
||||
want_thread_safety="no"
|
||||
fi
|
||||
],
|
||||
[want_thread_safety="no"])
|
||||
|
||||
# epoll
|
||||
|
||||
AC_ARG_ENABLE([epoll],
|
||||
|
@ -1994,10 +1980,6 @@ if test "x${with_glib}" = "xyes" || test "x${with_glib}" = "xalways" ; then
|
|||
want_glib="yes"
|
||||
fi
|
||||
|
||||
if test "x${want_thread_safety}" = "xyes" ; then
|
||||
AC_DEFINE([HAVE_THREAD_SAFETY], [1], [Define to enable thread safety])
|
||||
fi
|
||||
|
||||
want_ecore_timer_dump="no"
|
||||
if test "x${build_profile}" = "xdebug" && test "x${ac_cv_func_backtrace}" = "xyes"; then
|
||||
want_ecore_timer_dump="yes"
|
||||
|
@ -4164,7 +4146,6 @@ echo " Tiled 32BPP rotate......: $have_tile_rotate"
|
|||
echo
|
||||
|
||||
echo "Ecore:"
|
||||
echo " Thread safety..............: $want_thread_safety"
|
||||
echo " GLib support...............: $with_glib"
|
||||
echo " Use g_main_loop............: $want_g_main_loop"
|
||||
echo " Gathering memory statistic.: $ac_cv_func_mallinfo"
|
||||
|
|
|
@ -247,6 +247,25 @@ static inline void
|
|||
_ecore_lock(void)
|
||||
{
|
||||
#ifdef HAVE_THREAD_SAFETY
|
||||
/* THIS IS BROKEN AND NEEDS FIXING
|
||||
*
|
||||
* the concept of lock to execute main-loop related functions is okay
|
||||
* and the code below is correct per se, but with its usage in Ecore
|
||||
* is leading to hard locks that must be investigated.
|
||||
*
|
||||
* One failure possibility is missing _ecore_unlock() that leaves
|
||||
* the lock taken and on next take it will block.
|
||||
*
|
||||
* Another failure possibility is one function that takes the lock
|
||||
* and calls some API function that also takes the lock, leading to
|
||||
* block.
|
||||
*
|
||||
* When these are fixed, remove the HAVE_THREAD_SAFETY and leave it
|
||||
* always on. To eliminate the lock overhead for non-threaded
|
||||
* applications, have a global boolean that is set to TRUE by user
|
||||
* if he uses this features, much like eina_log_threads_enable().
|
||||
* -- Gustavo, December 6th 2012.
|
||||
*/
|
||||
eina_lock_take(&_ecore_main_loop_lock);
|
||||
#else
|
||||
/* at least check we're not being called from a thread */
|
||||
|
|
Loading…
Reference in New Issue