parent
80f71e4393
commit
42a59387a6
|
@ -513,6 +513,11 @@ EINA_CONFIG(ENABLE_LOG, test "x${enable_log}" = "xyes")
|
||||||
|
|
||||||
EFL_CHECK_THREADS
|
EFL_CHECK_THREADS
|
||||||
|
|
||||||
|
if ! test "x${efl_have_pthread_barrier}" = "xno" ; then
|
||||||
|
EINA_CONFIGURE_HAVE_PTHREAD_BARRIER="#define EINA_HAVE_PTHREAD_BARRIER"
|
||||||
|
fi
|
||||||
|
AC_SUBST(EINA_CONFIGURE_HAVE_PTHREAD_BARRIER)
|
||||||
|
|
||||||
EINA_CONFIG(HAVE_DEBUG_THREADS, test "$want_debug_threads" = "yes")
|
EINA_CONFIG(HAVE_DEBUG_THREADS, test "$want_debug_threads" = "yes")
|
||||||
|
|
||||||
### Modules
|
### Modules
|
||||||
|
@ -802,7 +807,7 @@ echo "Configuration Options Summary:"
|
||||||
echo
|
echo
|
||||||
echo " OS...................: ${host_os}"
|
echo " OS...................: ${host_os}"
|
||||||
echo " Build Profile........: ${build_profile}"
|
echo " Build Profile........: ${build_profile}"
|
||||||
echo " Threads Type.........: ${efl_have_threads} (spinlocks: ${efl_have_posix_threads_spinlock})"
|
echo " Threads Type.........: ${efl_have_threads} (spinlocks: ${efl_have_posix_threads_spinlock}) (barrier: ${efl_have_pthread_barrier})"
|
||||||
echo " Cryptographic System.: ${build_crypto}"
|
echo " Cryptographic System.: ${build_crypto}"
|
||||||
if test "x${have_windows}" = "xyes" ; then
|
if test "x${have_windows}" = "xyes" ; then
|
||||||
echo " Windows version......: ${_efl_windows_version}"
|
echo " Windows version......: ${_efl_windows_version}"
|
||||||
|
|
|
@ -64,6 +64,16 @@ id = pthread_self();
|
||||||
EFL_PTHREAD_LIBS=${_efl_threads_libs}
|
EFL_PTHREAD_LIBS=${_efl_threads_libs}
|
||||||
],
|
],
|
||||||
[_efl_have_posix_threads="no"])
|
[_efl_have_posix_threads="no"])
|
||||||
|
AC_LINK_IFELSE(
|
||||||
|
[AC_LANG_PROGRAM([[
|
||||||
|
#include <pthread.h>
|
||||||
|
]],
|
||||||
|
[[
|
||||||
|
pthread_barrier_t barrier;
|
||||||
|
pthread_barrier_init(&barrier, NULL, 1);
|
||||||
|
]])],
|
||||||
|
[efl_have_pthread_barrier="yes"],
|
||||||
|
[efl_have_pthread_barrier="no"])
|
||||||
CFLAGS=${SAVE_CFLAGS}
|
CFLAGS=${SAVE_CFLAGS}
|
||||||
LIBS=${SAVE_LIBS}
|
LIBS=${SAVE_LIBS}
|
||||||
|
|
||||||
|
@ -75,8 +85,10 @@ if test "x${_efl_have_posix_threads}" = "xyes" ; then
|
||||||
else
|
else
|
||||||
if test "x${_efl_have_win32_threads}" = "xyes" ; then
|
if test "x${_efl_have_win32_threads}" = "xyes" ; then
|
||||||
efl_have_threads="Windows"
|
efl_have_threads="Windows"
|
||||||
|
efl_have_pthread_barrier="no"
|
||||||
else
|
else
|
||||||
efl_have_threads="no"
|
efl_have_threads="no"
|
||||||
|
efl_have_pthread_barrier="no"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
AC_MSG_RESULT([${efl_have_threads}])
|
AC_MSG_RESULT([${efl_have_threads}])
|
||||||
|
|
|
@ -81,7 +81,8 @@ eina_refcount.h \
|
||||||
eina_mmap.h \
|
eina_mmap.h \
|
||||||
eina_xattr.h \
|
eina_xattr.h \
|
||||||
eina_value.h \
|
eina_value.h \
|
||||||
eina_inline_value.x
|
eina_inline_value.x \
|
||||||
|
eina_inline_lock_barrier.x
|
||||||
|
|
||||||
# Will be back for developper after 1.2.
|
# Will be back for developper after 1.2.
|
||||||
# eina_model.h
|
# eina_model.h
|
||||||
|
|
|
@ -51,6 +51,11 @@
|
||||||
#define EINA_HAVE_THREADS
|
#define EINA_HAVE_THREADS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef EINA_HAVE_PTHREAD_BARRIER
|
||||||
|
# undef EINA_HAVE_PTHREAD_BARRIER
|
||||||
|
#endif
|
||||||
|
@EINA_CONFIGURE_HAVE_PTHREAD_BARRIER@
|
||||||
|
|
||||||
#ifdef EINA_HAVE_DEBUG_THREADS
|
#ifdef EINA_HAVE_DEBUG_THREADS
|
||||||
# undef EINA_HAVE_DEBUG_THREADS
|
# undef EINA_HAVE_DEBUG_THREADS
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -544,4 +544,38 @@ eina_semaphore_release(Eina_Semaphore *sem, int count_release EINA_UNUSED)
|
||||||
return (sem_post(sem) == 0) ? EINA_TRUE : EINA_FALSE;
|
return (sem_post(sem) == 0) ? EINA_TRUE : EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef EINA_HAVE_PTHREAD_BARRIER
|
||||||
|
typedef struct _Eina_Barrier Eina_Barrier;
|
||||||
|
|
||||||
|
struct _Eina_Barrier
|
||||||
|
{
|
||||||
|
pthread_barrier_t barrier;
|
||||||
|
};
|
||||||
|
|
||||||
|
static inline Eina_Bool
|
||||||
|
eina_barrier_new(Eina_Barrier *barrier, int needed)
|
||||||
|
{
|
||||||
|
if (!pthread_barrier_init(&(barrier->barrier), NULL, needed))
|
||||||
|
return EINA_TRUE;
|
||||||
|
return EINA_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void
|
||||||
|
eina_barrier_free(Eina_Barrier *barrier)
|
||||||
|
{
|
||||||
|
pthread_barrier_destroy(&(barrier->barrier));
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline Eina_Bool
|
||||||
|
eina_barrier_wait(Eina_Barrier *barrier)
|
||||||
|
{
|
||||||
|
pthread_barrier_wait(&(barrier->barrier));
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
#include "eina_inline_lock_barrier.x"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -551,4 +551,6 @@ eina_semaphore_release(Eina_Semaphore *sem, int count_release)
|
||||||
return ReleaseSemaphore(*sem, count_release, NULL) ? EINA_TRUE : EINA_FALSE;
|
return ReleaseSemaphore(*sem, count_release, NULL) ? EINA_TRUE : EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "eina_inline_lock_barrier.x"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -204,4 +204,6 @@ eina_semaphore_release(Eina_Semaphore *sem EINA_UNUSED,
|
||||||
return EINA_FALSE;
|
return EINA_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#include "eina_inline_lock_barrier.x"
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -106,6 +106,14 @@ static inline Eina_Bool eina_semaphore_lock(Eina_Semaphore *sem);
|
||||||
/** @relates static Eina_Bool eina_semaphore_release(sem_t *sem, int count_release) */
|
/** @relates static Eina_Bool eina_semaphore_release(sem_t *sem, int count_release) */
|
||||||
static inline Eina_Bool eina_semaphore_release(Eina_Semaphore *sem, int count_release);
|
static inline Eina_Bool eina_semaphore_release(Eina_Semaphore *sem, int count_release);
|
||||||
|
|
||||||
|
/** @relates static Eina_Bool eina_barrier_new(Eina_Barrier *barrier, int needed) @since 1.8 */
|
||||||
|
static inline Eina_Bool eina_barrier_new(Eina_Barrier *barrier, int needed);
|
||||||
|
/** @relates static void eina_barrier_free(Eina_Barrier *barrier); @since 1.8 */
|
||||||
|
static inline void eina_barrier_free(Eina_Barrier *barrier);
|
||||||
|
/** @relates static Eina_Bool eina_barrier_wait(Eina_Barrier *barrier); @since 1.8 */
|
||||||
|
static inline Eina_Bool eina_barrier_wait(Eina_Barrier *barrier);
|
||||||
|
|
||||||
|
|
||||||
#ifdef EINA_HAVE_DEBUG_THREADS
|
#ifdef EINA_HAVE_DEBUG_THREADS
|
||||||
# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \
|
# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \
|
||||||
do { \
|
do { \
|
||||||
|
|
Loading…
Reference in New Issue