forked from enlightenment/efl
parent
80f71e4393
commit
42a59387a6
|
@ -513,6 +513,11 @@ EINA_CONFIG(ENABLE_LOG, test "x${enable_log}" = "xyes")
|
|||
|
||||
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")
|
||||
|
||||
### Modules
|
||||
|
@ -802,7 +807,7 @@ echo "Configuration Options Summary:"
|
|||
echo
|
||||
echo " OS...................: ${host_os}"
|
||||
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}"
|
||||
if test "x${have_windows}" = "xyes" ; then
|
||||
echo " Windows version......: ${_efl_windows_version}"
|
||||
|
|
|
@ -64,6 +64,16 @@ id = pthread_self();
|
|||
EFL_PTHREAD_LIBS=${_efl_threads_libs}
|
||||
],
|
||||
[_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}
|
||||
LIBS=${SAVE_LIBS}
|
||||
|
||||
|
@ -75,8 +85,10 @@ if test "x${_efl_have_posix_threads}" = "xyes" ; then
|
|||
else
|
||||
if test "x${_efl_have_win32_threads}" = "xyes" ; then
|
||||
efl_have_threads="Windows"
|
||||
efl_have_pthread_barrier="no"
|
||||
else
|
||||
efl_have_threads="no"
|
||||
efl_have_pthread_barrier="no"
|
||||
fi
|
||||
fi
|
||||
AC_MSG_RESULT([${efl_have_threads}])
|
||||
|
|
|
@ -81,7 +81,8 @@ eina_refcount.h \
|
|||
eina_mmap.h \
|
||||
eina_xattr.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.
|
||||
# eina_model.h
|
||||
|
|
|
@ -51,6 +51,11 @@
|
|||
#define EINA_HAVE_THREADS
|
||||
#endif
|
||||
|
||||
#ifdef EINA_HAVE_PTHREAD_BARRIER
|
||||
# undef EINA_HAVE_PTHREAD_BARRIER
|
||||
#endif
|
||||
@EINA_CONFIGURE_HAVE_PTHREAD_BARRIER@
|
||||
|
||||
#ifdef EINA_HAVE_DEBUG_THREADS
|
||||
# undef EINA_HAVE_DEBUG_THREADS
|
||||
#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;
|
||||
}
|
||||
|
||||
#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
|
||||
|
|
|
@ -551,4 +551,6 @@ eina_semaphore_release(Eina_Semaphore *sem, int count_release)
|
|||
return ReleaseSemaphore(*sem, count_release, NULL) ? EINA_TRUE : EINA_FALSE;
|
||||
}
|
||||
|
||||
#include "eina_inline_lock_barrier.x"
|
||||
|
||||
#endif
|
||||
|
|
|
@ -204,4 +204,6 @@ eina_semaphore_release(Eina_Semaphore *sem EINA_UNUSED,
|
|||
return EINA_FALSE;
|
||||
}
|
||||
|
||||
#include "eina_inline_lock_barrier.x"
|
||||
|
||||
#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) */
|
||||
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
|
||||
# define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) \
|
||||
do { \
|
||||
|
|
Loading…
Reference in New Issue