parent
3e6e8f0f08
commit
20566e914b
|
@ -331,22 +331,6 @@ fi
|
||||||
AC_MSG_CHECKING(whether to activate signature support in eet)
|
AC_MSG_CHECKING(whether to activate signature support in eet)
|
||||||
AC_MSG_RESULT(${have_signature})
|
AC_MSG_RESULT(${have_signature})
|
||||||
|
|
||||||
# pthread library
|
|
||||||
|
|
||||||
EFL_CHECK_THREADS(["no"],
|
|
||||||
[
|
|
||||||
if test "x${_efl_have_posix_threads}" = "xyes" ; then
|
|
||||||
have_threads="POSIX"
|
|
||||||
else
|
|
||||||
if test "x${_efl_have_win32_threads}" = "xyes" ; then
|
|
||||||
have_threads="Win32"
|
|
||||||
else
|
|
||||||
have_threads="no"
|
|
||||||
fi
|
|
||||||
fi],
|
|
||||||
[have_threads="no"])
|
|
||||||
|
|
||||||
|
|
||||||
### Checks for header files
|
### Checks for header files
|
||||||
|
|
||||||
AC_CHECK_HEADER([zlib.h],
|
AC_CHECK_HEADER([zlib.h],
|
||||||
|
@ -472,7 +456,6 @@ if test "x${have_gnutls}" = "xyes" || test "x${have_openssl}" = "xyes" ; then
|
||||||
echo " Cipher support.....: ${have_cipher}"
|
echo " Cipher support.....: ${have_cipher}"
|
||||||
echo " Signature..........: ${have_signature}"
|
echo " Signature..........: ${have_signature}"
|
||||||
fi
|
fi
|
||||||
echo " Thread Support.......: ${have_threads}"
|
|
||||||
echo
|
echo
|
||||||
echo " Old eet file format..: ${old_eet_file_format}"
|
echo " Old eet file format..: ${old_eet_file_format}"
|
||||||
echo
|
echo
|
||||||
|
|
|
@ -1,189 +0,0 @@
|
||||||
dnl Copyright (C) 2010 Vincent Torri <vtorri at univ-evry dot fr>
|
|
||||||
dnl That code is public domain and can be freely used or copied.
|
|
||||||
|
|
||||||
dnl Macro that check if POSIX or Win32 threads library is available or not.
|
|
||||||
|
|
||||||
dnl Usage: EFL_CHECK_THREADS(want_pthread_spin[, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
|
|
||||||
dnl Call AC_SUBST(EFL_PTHREAD_CFLAGS)
|
|
||||||
dnl Call AC_SUBST(EFL_PTHREAD_LIBS)
|
|
||||||
dnl Define EFL_HAVE_POSIX_THREADS or EFL_HAVE_WIN32_THREADS, and EFL_HAVE_THREADS
|
|
||||||
dnl Define EFL_HAVE_POSIX_THREADS_SPINLOCK
|
|
||||||
|
|
||||||
AC_DEFUN([EFL_CHECK_THREADS],
|
|
||||||
[
|
|
||||||
|
|
||||||
dnl configure option
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([posix-threads],
|
|
||||||
[AC_HELP_STRING([--disable-posix-threads], [enable POSIX threads code @<:@default=auto@:>@])],
|
|
||||||
[
|
|
||||||
if test "x${enableval}" = "xyes" ; then
|
|
||||||
_efl_enable_posix_threads="yes"
|
|
||||||
else
|
|
||||||
_efl_enable_posix_threads="no"
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[_efl_enable_posix_threads="auto"])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to build POSIX threads code])
|
|
||||||
AC_MSG_RESULT([${_efl_enable_posix_threads}])
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([win32-threads],
|
|
||||||
[AC_HELP_STRING([--disable-win32-threads], [enable Win32 threads code @<:@default=no@:>@])],
|
|
||||||
[
|
|
||||||
if test "x${enableval}" = "xyes" ; then
|
|
||||||
_efl_enable_win32_threads="yes"
|
|
||||||
else
|
|
||||||
_efl_enable_win32_threads="no"
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[_efl_enable_win32_threads="no"])
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to build Windows threads code])
|
|
||||||
AC_MSG_RESULT([${_efl_enable_win32_threads}])
|
|
||||||
|
|
||||||
dnl
|
|
||||||
dnl * no + no
|
|
||||||
dnl * yes + no : win32: error, other : pthread
|
|
||||||
dnl * yes + yes : win32 : wthread, other : pthread
|
|
||||||
dnl * no + yes : win32 : wthread, other : error
|
|
||||||
|
|
||||||
if test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_enable_win32_threads}" = "xyes" ; then
|
|
||||||
case "$host_os" in
|
|
||||||
mingw*)
|
|
||||||
_efl_enable_posix_threads=no
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_efl_enable_win32_threads=no
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${_efl_enable_win32_threads}" = "xyes" ; then
|
|
||||||
case "$host_os" in
|
|
||||||
mingw*)
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
AC_MSG_ERROR([Win32 threads support requested but non Windows system found.])
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${_efl_enable_posix_threads}" = "xyes" ; then
|
|
||||||
case "$host_os" in
|
|
||||||
mingw*)
|
|
||||||
AC_MSG_ERROR([POSIX threads support requested but Windows system found.])
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl check if the compiler supports POSIX threads
|
|
||||||
|
|
||||||
case "$host_os" in
|
|
||||||
mingw*)
|
|
||||||
;;
|
|
||||||
solaris*)
|
|
||||||
_efl_threads_cflags="-mt"
|
|
||||||
_efl_threads_libs="-mt"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
_efl_threads_cflags="-pthread"
|
|
||||||
_efl_threads_libs="-pthread"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
_efl_have_posix_threads="no"
|
|
||||||
_efl_have_win32_threads="no"
|
|
||||||
|
|
||||||
if test "x${_efl_enable_posix_threads}" = "xyes" || test "x${_efl_enable_posix_threads}" = "xauto" ; then
|
|
||||||
|
|
||||||
SAVE_CFLAGS=${CFLAGS}
|
|
||||||
CFLAGS="${CFLAGS} ${_efl_threads_cflags}"
|
|
||||||
SAVE_LIBS=${LIBS}
|
|
||||||
LIBS="${LIBS} ${_efl_threads_libs}"
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[
|
|
||||||
#include <pthread.h>
|
|
||||||
]],
|
|
||||||
[[
|
|
||||||
pthread_t id;
|
|
||||||
id = pthread_self();
|
|
||||||
]])],
|
|
||||||
[_efl_have_posix_threads="yes"],
|
|
||||||
[_efl_have_posix_threads="no"])
|
|
||||||
CFLAGS=${SAVE_CFLAGS}
|
|
||||||
LIBS=${SAVE_LIBS}
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether system support POSIX threads])
|
|
||||||
AC_MSG_RESULT([${_efl_have_posix_threads}])
|
|
||||||
if test "$x{_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads}" = "xno"; then
|
|
||||||
AC_MSG_ERROR([POSIX threads support requested but not found.])
|
|
||||||
fi
|
|
||||||
|
|
||||||
EFL_PTHREAD_CFLAGS=""
|
|
||||||
EFL_PTHREAD_LIBS=""
|
|
||||||
if test "x${_efl_have_posix_threads}" = "xyes" ; then
|
|
||||||
EFL_PTHREAD_CFLAGS=${_efl_threads_cflags}
|
|
||||||
EFL_PTHREAD_LIBS=${_efl_threads_libs}
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_SUBST(EFL_PTHREAD_CFLAGS)
|
|
||||||
AC_SUBST(EFL_PTHREAD_LIBS)
|
|
||||||
|
|
||||||
if test "x${_efl_have_posix_threads}" = "xyes" ; then
|
|
||||||
AC_DEFINE([EFL_HAVE_POSIX_THREADS], [1], [Define to mention that POSIX threads are supported])
|
|
||||||
fi
|
|
||||||
|
|
||||||
dnl check if the compiler supports pthreads spinlock
|
|
||||||
|
|
||||||
_efl_have_posix_threads_spinlock="no"
|
|
||||||
|
|
||||||
if test "x${_efl_have_posix_threads}" = "xyes" && test "x$1" = "xyes" ; then
|
|
||||||
|
|
||||||
SAVE_CFLAGS=${CFLAGS}
|
|
||||||
CFLAGS="${CFLAGS} ${EFL_PTHREAD_CFLAGS}"
|
|
||||||
SAVE_LIBS=${LIBS}
|
|
||||||
LIBS="${LIBS} ${EFL_PTHREAD_LIBS}"
|
|
||||||
AC_LINK_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([[
|
|
||||||
#include <pthread.h>
|
|
||||||
]],
|
|
||||||
[[
|
|
||||||
pthread_spinlock_t lock;
|
|
||||||
int res;
|
|
||||||
res = pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE);
|
|
||||||
]])],
|
|
||||||
[_efl_have_posix_threads_spinlock="yes"],
|
|
||||||
[_efl_have_posix_threads_spinlock="no"])
|
|
||||||
CFLAGS=${SAVE_CFLAGS}
|
|
||||||
LIBS=${SAVE_LIBS}
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
AC_MSG_CHECKING([whether to build POSIX threads spinlock code])
|
|
||||||
AC_MSG_RESULT([${_efl_have_posix_threads_spinlock}])
|
|
||||||
if test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads_spinlock}" = "xno" && test "x$1" = "xyes" ; then
|
|
||||||
AC_MSG_WARN([POSIX threads support requested but spinlocks are not supported])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${_efl_have_posix_threads_spinlock}" = "xyes" ; then
|
|
||||||
AC_DEFINE([EFL_HAVE_POSIX_THREADS_SPINLOCK], [1], [Define to mention that POSIX threads spinlocks are supported])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${_efl_enable_win32_threads}" = "xyes" ; then
|
|
||||||
_efl_have_win32_threads="yes"
|
|
||||||
AC_DEFINE([EFL_HAVE_WIN32_THREADS], [1], [Define to mention that Win32 threads are supported])
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x${_efl_have_posix_threads}" = "xyes" || test "x${_efl_have_win32_threads}" = "xyes" ; then
|
|
||||||
AC_DEFINE([EFL_HAVE_THREADS], [1], [Define to mention that POSIX or Win32 threads are supported])
|
|
||||||
fi
|
|
||||||
|
|
||||||
AS_IF([test "x$_efl_have_posix_threads" = "xyes" || test "x$_efl_have_win32_threads" = "xyes"], [$2], [$3])
|
|
||||||
AS_IF([test "x$_efl_have_posix_threads_spinlock" = "xyes"], [$4], [$5])
|
|
||||||
|
|
||||||
])
|
|
|
@ -150,9 +150,9 @@ else
|
||||||
libeet_la_SOURCES = $(base_sources)
|
libeet_la_SOURCES = $(base_sources)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
libeet_la_CFLAGS = @EET_CFLAGS@ @DEBUG_CFLAGS@ @EFL_PTHREAD_CFLAGS@
|
libeet_la_CFLAGS = @EET_CFLAGS@ @DEBUG_CFLAGS@
|
||||||
libeet_la_LIBADD = @GNUTLS_LIBS@ @OPENSSL_LIBS@ @EFL_COVERAGE_LIBS@ @EET_LIBS@ @EINA_LIBS@ @EVIL_LIBS@ -lz -ljpeg -lm
|
libeet_la_LIBADD = @GNUTLS_LIBS@ @OPENSSL_LIBS@ @EFL_COVERAGE_LIBS@ @EET_LIBS@ @EINA_LIBS@ @EVIL_LIBS@ -lz -ljpeg -lm
|
||||||
libeet_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@
|
libeet_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@
|
||||||
|
|
||||||
EXTRA_DIST = Eet_private.h
|
EXTRA_DIST = Eet_private.h
|
||||||
|
|
||||||
|
|
|
@ -46,6 +46,8 @@ void * alloca (size_t);
|
||||||
# include <Evil.h>
|
# include <Evil.h>
|
||||||
#endif /* ifdef HAVE_EVIL */
|
#endif /* ifdef HAVE_EVIL */
|
||||||
|
|
||||||
|
#include <Eina.h>
|
||||||
|
|
||||||
#ifdef HAVE_GNUTLS
|
#ifdef HAVE_GNUTLS
|
||||||
# include <gnutls/gnutls.h>
|
# include <gnutls/gnutls.h>
|
||||||
# include <gcrypt.h>
|
# include <gcrypt.h>
|
||||||
|
@ -56,14 +58,11 @@ void * alloca (size_t);
|
||||||
# include <openssl/evp.h>
|
# include <openssl/evp.h>
|
||||||
#endif /* ifdef HAVE_OPENSSL */
|
#endif /* ifdef HAVE_OPENSSL */
|
||||||
|
|
||||||
#ifdef EFL_HAVE_POSIX_THREADS
|
#ifdef EINA_HAVE_THREADS
|
||||||
# include <pthread.h>
|
|
||||||
# ifdef HAVE_GNUTLS
|
# ifdef HAVE_GNUTLS
|
||||||
GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
GCRY_THREAD_OPTION_PTHREAD_IMPL;
|
||||||
# endif /* ifdef HAVE_GNUTLS */
|
# endif /* ifdef HAVE_GNUTLS */
|
||||||
#endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
#endif /* ifdef EINA_HAVE_THREADS */
|
||||||
|
|
||||||
#include <Eina.h>
|
|
||||||
|
|
||||||
#include "Eet.h"
|
#include "Eet.h"
|
||||||
#include "Eet_private.h"
|
#include "Eet_private.h"
|
||||||
|
@ -108,13 +107,7 @@ struct _Eet_File
|
||||||
|
|
||||||
time_t mtime;
|
time_t mtime;
|
||||||
|
|
||||||
#ifdef EFL_HAVE_THREADS
|
Eina_Lock file_lock;
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
|
||||||
pthread_mutex_t file_lock;
|
|
||||||
# else /* ifdef EFL_HAVE_POSIX_THREADS */
|
|
||||||
HANDLE file_lock;
|
|
||||||
# endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
|
||||||
#endif /* ifdef EFL_HAVE_THREADS */
|
|
||||||
|
|
||||||
unsigned char writes_pending : 1;
|
unsigned char writes_pending : 1;
|
||||||
unsigned char delete_me_now : 1;
|
unsigned char delete_me_now : 1;
|
||||||
|
@ -244,45 +237,15 @@ static int read_data_from_disk(Eet_File *ef,
|
||||||
|
|
||||||
static Eet_Error eet_internal_close(Eet_File *ef, Eina_Bool locked);
|
static Eet_Error eet_internal_close(Eet_File *ef, Eina_Bool locked);
|
||||||
|
|
||||||
#ifdef EFL_HAVE_THREADS
|
static Eina_Lock eet_cache_lock;
|
||||||
|
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
#define LOCK_CACHE eina_lock_take(&eet_cache_lock)
|
||||||
|
#define UNLOCK_CACHE eina_lock_release(&eet_cache_lock)
|
||||||
|
|
||||||
static pthread_mutex_t eet_cache_lock = PTHREAD_MUTEX_INITIALIZER;
|
#define INIT_FILE(File) eina_lock_new(&File->file_lock)
|
||||||
|
#define LOCK_FILE(File) eina_lock_take(&File->file_lock)
|
||||||
# define LOCK_CACHE pthread_mutex_lock(&eet_cache_lock)
|
#define UNLOCK_FILE(File) eina_lock_release(&File->file_lock)
|
||||||
# define UNLOCK_CACHE pthread_mutex_unlock(&eet_cache_lock)
|
#define DESTROY_FILE(File) eina_lock_free(&File->file_lock)
|
||||||
|
|
||||||
# define INIT_FILE(File) pthread_mutex_init(&File->file_lock, NULL)
|
|
||||||
# define LOCK_FILE(File) pthread_mutex_lock(&File->file_lock)
|
|
||||||
# define UNLOCK_FILE(File) pthread_mutex_unlock(&File->file_lock)
|
|
||||||
# define DESTROY_FILE(File) pthread_mutex_destroy(&File->file_lock)
|
|
||||||
|
|
||||||
# else /* EFL_HAVE_WIN32_THREADS */
|
|
||||||
|
|
||||||
static HANDLE eet_cache_lock = NULL;
|
|
||||||
|
|
||||||
# define LOCK_CACHE WaitForSingleObject(eet_cache_lock, INFINITE)
|
|
||||||
# define UNLOCK_CACHE ReleaseMutex(eet_cache_lock)
|
|
||||||
|
|
||||||
# define INIT_FILE(File) File->file_lock = CreateMutex(NULL, FALSE, NULL)
|
|
||||||
# define LOCK_FILE(File) WaitForSingleObject(File->file_lock, INFINITE)
|
|
||||||
# define UNLOCK_FILE(File) ReleaseMutex(File->file_lock)
|
|
||||||
# define DESTROY_FILE(File) CloseHandle(File->file_lock)
|
|
||||||
|
|
||||||
# endif /* EFL_HAVE_WIN32_THREADS */
|
|
||||||
|
|
||||||
#else /* ifdef EFL_HAVE_THREADS */
|
|
||||||
|
|
||||||
# define LOCK_CACHE do {} while (0)
|
|
||||||
# define UNLOCK_CACHE do {} while (0)
|
|
||||||
|
|
||||||
# define INIT_FILE(File) do {} while (0)
|
|
||||||
# define LOCK_FILE(File) do {} while (0)
|
|
||||||
# define UNLOCK_FILE(File) do {} while (0)
|
|
||||||
# define DESTROY_FILE(File) do {} while (0)
|
|
||||||
|
|
||||||
#endif /* EFL_HAVE_THREADS */
|
|
||||||
|
|
||||||
/* cache. i don't expect this to ever be large, so arrays will do */
|
/* cache. i don't expect this to ever be large, so arrays will do */
|
||||||
static int eet_writers_num = 0;
|
static int eet_writers_num = 0;
|
||||||
|
@ -717,6 +680,8 @@ eet_init(void)
|
||||||
goto shutdown_eina;
|
goto shutdown_eina;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
eina_lock_new(&eet_cache_lock);
|
||||||
|
|
||||||
if (!eet_node_init())
|
if (!eet_node_init())
|
||||||
{
|
{
|
||||||
EINA_LOG_ERR("Eet: Eet_Node mempool creation failed");
|
EINA_LOG_ERR("Eet: Eet_Node mempool creation failed");
|
||||||
|
@ -743,12 +708,12 @@ eet_init(void)
|
||||||
"BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
|
"BIG FAT WARNING: I AM UNABLE TO REQUEST SECMEM, Cryptographic operation are at risk !");
|
||||||
}
|
}
|
||||||
|
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
# ifdef EINA_HAVE_THREADS
|
||||||
if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
|
if (gcry_control(GCRYCTL_SET_THREAD_CBS, &gcry_threads_pthread))
|
||||||
WRN(
|
WRN(
|
||||||
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
|
"YOU ARE USING PTHREADS, BUT I CANNOT INITIALIZE THREADSAFE GCRYPT OPERATIONS!");
|
||||||
|
|
||||||
# endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
# endif /* ifdef EINA_HAVE_THREADS */
|
||||||
if (gnutls_global_init())
|
if (gnutls_global_init())
|
||||||
goto shutdown_eet;
|
goto shutdown_eet;
|
||||||
|
|
||||||
|
@ -762,7 +727,7 @@ eet_init(void)
|
||||||
|
|
||||||
#ifdef HAVE_GNUTLS
|
#ifdef HAVE_GNUTLS
|
||||||
shutdown_eet:
|
shutdown_eet:
|
||||||
#endif
|
#endif
|
||||||
eet_node_shutdown();
|
eet_node_shutdown();
|
||||||
unregister_log_domain:
|
unregister_log_domain:
|
||||||
eina_log_domain_unregister(_eet_log_dom_global);
|
eina_log_domain_unregister(_eet_log_dom_global);
|
||||||
|
@ -780,6 +745,9 @@ eet_shutdown(void)
|
||||||
|
|
||||||
eet_clearcache();
|
eet_clearcache();
|
||||||
eet_node_shutdown();
|
eet_node_shutdown();
|
||||||
|
|
||||||
|
eina_lock_free(&eet_cache_lock);
|
||||||
|
|
||||||
#ifdef HAVE_GNUTLS
|
#ifdef HAVE_GNUTLS
|
||||||
gnutls_global_deinit();
|
gnutls_global_deinit();
|
||||||
#endif /* ifdef HAVE_GNUTLS */
|
#endif /* ifdef HAVE_GNUTLS */
|
||||||
|
|
|
@ -11,14 +11,17 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#ifdef EFL_HAVE_POSIX_THREADS
|
#include <Eina.h>
|
||||||
|
|
||||||
|
#ifdef EINA_HAVE_THREADS
|
||||||
|
#if ((!defined(_WIN32_WCE)) && (!defined(_WIN32)))
|
||||||
# include <pthread.h>
|
# include <pthread.h>
|
||||||
#endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
# define _EET_INCLUDED_PTHREAD
|
||||||
|
#endif
|
||||||
|
#endif /* ifdef EINA_HAVE_THREADS */
|
||||||
|
|
||||||
#include <check.h>
|
#include <check.h>
|
||||||
|
|
||||||
#include <Eina.h>
|
|
||||||
|
|
||||||
#include "eet_suite.h"
|
#include "eet_suite.h"
|
||||||
|
|
||||||
START_TEST(eet_test_init)
|
START_TEST(eet_test_init)
|
||||||
|
@ -1838,11 +1841,11 @@ START_TEST(eet_cipher_decipher_simple)
|
||||||
|
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
#ifdef EFL_HAVE_THREADS
|
#ifdef EINA_HAVE_THREADS
|
||||||
|
|
||||||
static Eina_Bool open_worker_stop;
|
static Eina_Bool open_worker_stop;
|
||||||
|
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
# ifdef _EET_INCLUDED_PTHREAD
|
||||||
|
|
||||||
static void *
|
static void *
|
||||||
open_close_worker(void * path)
|
open_close_worker(void * path)
|
||||||
|
@ -1863,7 +1866,7 @@ open_close_worker(void * path)
|
||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
} /* open_close_worker */
|
} /* open_close_worker */
|
||||||
|
|
||||||
# else /* ifdef EFL_HAVE_POSIX_THREADS */
|
# else /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
|
|
||||||
static unsigned int __stdcall
|
static unsigned int __stdcall
|
||||||
open_close_worker(void * path)
|
open_close_worker(void * path)
|
||||||
|
@ -1884,7 +1887,7 @@ open_close_worker(void * path)
|
||||||
_endthreadex(0);
|
_endthreadex(0);
|
||||||
} /* open_close_worker */
|
} /* open_close_worker */
|
||||||
|
|
||||||
# endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
# endif /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
|
|
||||||
START_TEST(eet_cache_concurrency)
|
START_TEST(eet_cache_concurrency)
|
||||||
{
|
{
|
||||||
|
@ -1893,15 +1896,16 @@ START_TEST(eet_cache_concurrency)
|
||||||
Eet_File * ef;
|
Eet_File * ef;
|
||||||
void * thread_ret;
|
void * thread_ret;
|
||||||
unsigned int n;
|
unsigned int n;
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
# ifdef _EET_INCLUDED_PTHREAD
|
||||||
pthread_t thread;
|
pthread_t thread;
|
||||||
# else /* ifdef EFL_HAVE_POSIX_THREADS */
|
# else /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
uintptr_t thread;
|
uintptr_t thread;
|
||||||
unsigned int thread_id;
|
unsigned int thread_id;
|
||||||
DWORD ret;
|
DWORD ret;
|
||||||
# endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
# endif /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
|
|
||||||
eet_init();
|
eet_init();
|
||||||
|
eina_threads_init();
|
||||||
|
|
||||||
/* create a file to test with */
|
/* create a file to test with */
|
||||||
fail_if(!(file = tmpnam(file)));
|
fail_if(!(file = tmpnam(file)));
|
||||||
|
@ -1911,11 +1915,11 @@ START_TEST(eet_cache_concurrency)
|
||||||
|
|
||||||
/* start a thread that repeatedly opens and closes a file */
|
/* start a thread that repeatedly opens and closes a file */
|
||||||
open_worker_stop = 0;
|
open_worker_stop = 0;
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
# ifdef _EET_INCLUDED_PTHREAD
|
||||||
pthread_create(&thread, NULL, open_close_worker, file);
|
pthread_create(&thread, NULL, open_close_worker, file);
|
||||||
# else /* ifdef EFL_HAVE_POSIX_THREADS */
|
# else /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
thread = _beginthreadex(NULL, 0, open_close_worker, file, 0, &thread_id);
|
thread = _beginthreadex(NULL, 0, open_close_worker, file, 0, &thread_id);
|
||||||
# endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
# endif /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
/* clear the cache repeatedly in this thread */
|
/* clear the cache repeatedly in this thread */
|
||||||
for (n = 0; n < 50000; ++n)
|
for (n = 0; n < 50000; ++n)
|
||||||
{
|
{
|
||||||
|
@ -1924,22 +1928,24 @@ START_TEST(eet_cache_concurrency)
|
||||||
|
|
||||||
/* join the other thread, and fail if it returned an error message */
|
/* join the other thread, and fail if it returned an error message */
|
||||||
open_worker_stop = 1;
|
open_worker_stop = 1;
|
||||||
# ifdef EFL_HAVE_POSIX_THREADS
|
# ifdef _EET_INCLUDED_PTHREAD
|
||||||
fail_if(pthread_join(thread, &thread_ret) != 0);
|
fail_if(pthread_join(thread, &thread_ret) != 0);
|
||||||
fail_unless(thread_ret == NULL, (char const *)thread_ret);
|
fail_unless(thread_ret == NULL, (char const *)thread_ret);
|
||||||
# else /* ifdef EFL_HAVE_POSIX_THREADS */
|
# else /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
ret = WaitForSingleObject((HANDLE)thread, INFINITE);
|
ret = WaitForSingleObject((HANDLE)thread, INFINITE);
|
||||||
fail_if(ret != WAIT_OBJECT_0);
|
fail_if(ret != WAIT_OBJECT_0);
|
||||||
fail_if(GetExitCodeThread((HANDLE)thread, &ret) == FALSE);
|
fail_if(GetExitCodeThread((HANDLE)thread, &ret) == FALSE);
|
||||||
fail_if(ret != 0);
|
fail_if(ret != 0);
|
||||||
# endif /* ifdef EFL_HAVE_POSIX_THREADS */
|
# endif /* ifdef _EET_INCLUDED_PTHREAD */
|
||||||
|
|
||||||
fail_if(unlink(file) != 0);
|
fail_if(unlink(file) != 0);
|
||||||
|
|
||||||
|
eina_threads_shutdown();
|
||||||
eet_shutdown();
|
eet_shutdown();
|
||||||
}
|
}
|
||||||
END_TEST
|
END_TEST
|
||||||
|
|
||||||
#endif /* EFL_HAVE_THREADS */
|
#endif /* EINA_HAVE_THREADS */
|
||||||
|
|
||||||
typedef struct _Eet_Connection_Data Eet_Connection_Data;
|
typedef struct _Eet_Connection_Data Eet_Connection_Data;
|
||||||
struct _Eet_Connection_Data
|
struct _Eet_Connection_Data
|
||||||
|
@ -2716,7 +2722,7 @@ eet_suite(void)
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
#endif /* ifdef HAVE_CIPHER */
|
#endif /* ifdef HAVE_CIPHER */
|
||||||
|
|
||||||
#ifdef EFL_HAVE_THREADS
|
#ifdef EINA_HAVE_THREADS
|
||||||
tc = tcase_create("Eet Cache");
|
tc = tcase_create("Eet Cache");
|
||||||
tcase_add_test(tc, eet_cache_concurrency);
|
tcase_add_test(tc, eet_cache_concurrency);
|
||||||
suite_add_tcase(s, tc);
|
suite_add_tcase(s, tc);
|
||||||
|
|
Loading…
Reference in New Issue