Eina_Lock_Group(3)

NAME
Eina_Lock_Group - Lock

 - This group provides thread locking and synchronization capabilities.

SYNOPSIS

  Macros
#define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) do {} while(0)
Definition for the macro that doesn't do anything unless EINA_HAVE_DEBUG_THREADS is defined.
#define EINA_MAIN_LOOP_CHECK_RETURN do {} while(0)
Definition for the macro that doesn't do anything unless EINA_HAVE_DEBUG_THREADS is defined.

  Typedefs
typedef void(* Eina_TLS_Delete_Cb) (void *ptr)
A callback type for deallocation of thread level storage data.
typedef struct _Eina_Barrier Eina_Barrier
An opaque type for working with barrier locks.
typedef struct _Eina_Lock Eina_Lock
An opaque type for working with locks.
typedef struct _Eina_Condition Eina_Condition
An opaque type that represents a condition variable.
typedef struct _Eina_RWLock Eina_RWLock
An opaque type for working with read/write locks.
typedef pthread_key_t Eina_TLS
An opaque type for working with thread level storage.
typedef sem_t Eina_Semaphore
An opaque type for working with semaphores.
typedef Eina_Lock Eina_Spinlock
An opaque type for working with spinlocks.

  Enumerations
enum Eina_Lock_Result { EINA_LOCK_FAIL = EINA_FALSE, EINA_LOCK_SUCCEED = EINA_TRUE, EINA_LOCK_DEADLOCK }
Return codes for lock operations.

  Functions
static Eina_Bool eina_lock_new (Eina_Lock *mutex)
Initializes a new Eina_Lock.
static Eina_Bool eina_lock_recursive_new (Eina_Lock *mutex)
Initializes a new Eina_Lock that is recursive.
static void eina_lock_free (Eina_Lock *mutex)
Deallocates an Eina_Lock.
static Eina_Lock_Result eina_lock_take (Eina_Lock *mutex)
Attempts to take a lock.
static Eina_Lock_Result eina_lock_take_try (Eina_Lock *mutex)
Attempts to take a lock if possible.
static Eina_Lock_Result eina_lock_release (Eina_Lock *mutex)
Releases a lock.
EINA_API void eina_lock_debug (const Eina_Lock *mutex)
Prints debug information about a lock.
static Eina_Bool eina_condition_new (Eina_Condition *cond, Eina_Lock *mutex)
Initializes a new condition variable.
static void eina_condition_free (Eina_Condition *cond)
Deallocates a condition variable.
static Eina_Bool eina_condition_wait (Eina_Condition *cond)
Causes a thread to wait until signaled by the condition.
static Eina_Bool eina_condition_timedwait (Eina_Condition *cond, double t)
Causes a thread to wait until signaled by the condition or a timeout is reached.
static Eina_Bool eina_condition_broadcast (Eina_Condition *cond)
Signals all threads waiting for a condition.
static Eina_Bool eina_condition_signal (Eina_Condition *cond)
Signals a thread waiting for a condition.
static Eina_Bool eina_rwlock_new (Eina_RWLock *mutex)
Initializes a new Eina_RWLock.
static void eina_rwlock_free (Eina_RWLock *mutex)
Deallocates an Eina_RWLock.
static Eina_Lock_Result eina_rwlock_take_read (Eina_RWLock *mutex)
Attempts to take a read lock.
static Eina_Lock_Result eina_rwlock_take_write (Eina_RWLock *mutex)
Attempts to take a write lock.
static Eina_Lock_Result eina_rwlock_release (Eina_RWLock *mutex)
Releases a lock.
static Eina_Bool eina_tls_new (Eina_TLS *key)
Initializes a new Eina_TLS, or thread level storage, to store thread specific data.
static Eina_Bool eina_tls_cb_new (Eina_TLS *key, Eina_TLS_Delete_Cb delete_cb)
Initializes a new Eina_TLS, or thread level storage, to store thread specific data.
static void eina_tls_free (Eina_TLS key)
Frees an allocated Eina_TLS.
static void * eina_tls_get (Eina_TLS key)
Gets the value in Eina_TLS for this thread.
static Eina_Bool eina_tls_set (Eina_TLS key, const void *data)
Sets the value in Eina_TLS for this thread.
static Eina_Bool eina_semaphore_new (Eina_Semaphore *sem, int count_init)
Initializes a new Eina_Semaphore.
static Eina_Bool eina_semaphore_free (Eina_Semaphore *sem)
Frees an allocated Eina_Semaphore.
static Eina_Bool eina_semaphore_lock (Eina_Semaphore *sem)
Gets a lock on an Eina_Semaphore.
static Eina_Bool eina_semaphore_release (Eina_Semaphore *sem, int count_release)
Releases a lock on an Eina_Semaphore.
static Eina_Bool eina_barrier_new (Eina_Barrier *barrier, int needed)
Initializes a new Eina_Barrier.
static void eina_barrier_free (Eina_Barrier *barrier)
Frees an allocated Eina_Barrier.
static Eina_Bool eina_barrier_wait (Eina_Barrier *barrier)
Increments the count of threads that are waiting on barrier.
static Eina_Bool eina_spinlock_new (Eina_Spinlock *spinlock)
Initializes a new Eina_Spinlock.
static Eina_Lock_Result eina_spinlock_take (Eina_Spinlock *spinlock)
Attempts to take a spinlock.
static Eina_Lock_Result eina_spinlock_take_try (Eina_Spinlock *spinlock)
Attempts to take a spinlock if possible.
static Eina_Lock_Result eina_spinlock_release (Eina_Spinlock *spinlock)
Releases a spinlock.
static void eina_spinlock_free (Eina_Spinlock *spinlock)
Deallocates an Eina_Spinlock.

  Variables
EINA_API Eina_Error EINA_ERROR_NOT_MAIN_LOOP
A type definition for warning that a function was called from somewhere other than the EFL main loop.

Detailed Description

This group provides thread locking and synchronization capabilities. Similar to POSIX threads (pthreads), but it takes care of the platform specific details so you don't have to.

If you know how pthreads work, this library will look familiar to you. If you are not familiar with pthreads, a good overview is available here

The Eina lock functions are grouped into several categories to handle different thread locking and synchronization methods:
•   eina_lock_* - Functions that implement locking.
•   eina_condition_* - Functions that implement condition variables.
•   eina_rwlock_* - Functions that implement read/write locks.
•   eina_tls_* - Functions that implement thread level storage.
•   eina_semaphore_* - Functions that implement semaphores.
•   eina_barrier_* - Functions that implement barriers.
•   eina_spinlock_* - Functions that implement spinlocks if they are available on the platform. If they are not available, these functions degrade to plain locks.

Macro Definition Documentation

  #define EINA_MAIN_LOOP_CHECK_RETURN_VAL(val) do {} while(0)
Definition for the macro that doesn't do anything unless EINA_HAVE_DEBUG_THREADS is defined.
Parameters
    val The value to be returned

Enumeration Type Documentation

  enum Eina_Lock_Result
Return codes for lock operations.
Enumerator
EINA_LOCK_FAIL
    Indicates that the lock operation failed.
EINA_LOCK_SUCCEED
    Indicates that the lock operation succeeded.
EINA_LOCK_DEADLOCK
    Indicates that the lock is deadlocked.

Function Documentation

  static Eina_Bool eina_lock_new (Eina_Lock * mutex) [inline], [static]
Initializes a new Eina_Lock.
Parameters
    mutex The Eina_Lock structure to be initialized
Returns
    EINA_TRUE on success, EINA_FALSE otherwise
This function initializes an Eina_Lock with appropriate values. These values are platform dependent as is the structure of the Eina_Lock itself.
See also
    eina_lock_free()
Examples
ecore_thread_example.c.
Referenced by ecore_init(), ecore_main_loop_thread_safe_call_sync(), ecore_thread_main_loop_begin(), eet_init(), eina_file_open(), and eio_init().

  static Eina_Bool eina_lock_recursive_new (Eina_Lock * mutex) [inline], [static]
Initializes a new Eina_Lock that is recursive.
Parameters
    mutex The Eina_Lock structure to be initialized
Returns
    EINA_TRUE on success, EINA_FALSE otherwise
This function initializes an Eina_Lock with appropriate values. These values are platform dependent as is the structure of the Eina_Lock itself.
See also
    eina_lock_new()
    eina_lock_free()
Since
    1.19
Referenced by eina_file_virtualize().

  static void eina_lock_free (Eina_Lock * mutex) [inline], [static]
Deallocates an Eina_Lock. This function deallocates an Eina_Lock allocated by eina_lock_new() and does any platform dependent cleanup that is required.
Parameters
    mutex The Eina_Lock structure to be deallocated
See also
    eina_lock_new()
Examples
ecore_thread_example.c.
Referenced by eet_shutdown(), eina_freeq_free(), elm_store_free(), and emotion_shutdown().

  static Eina_Lock_Result eina_lock_take (Eina_Lock * mutex) [inline], [static]
Attempts to take a lock. This function attempts to gain a lock on the indicated Eina_Lock. If the underlying Eina_Lock is locked already, this call can be blocked until the lock is released. This is appropriate in many cases, but consider using eina_lock_take_try() if you don't need to block.
Parameters
    mutex The Eina_Lock to take
Returns
    Returns EINA_LOCK_SUCCEED on success. If the operation fails because a deadlock condition exists, it returns EINA_LOCK_DEADLOCK. If some other condition causes the take to fail, EINA_LOCK_FAIL is returned.
See also
    eina_lock_take_try()
    eina_lock_release()
Examples
ecore_thread_example.c.
Referenced by ecore_fork_reset(), ecore_main_loop_thread_safe_call_sync(), ecore_thread_main_loop_begin(), ecore_thread_main_loop_end(), efreet_desktop_category_add(), efreet_desktop_category_del(), efreet_desktop_free(), efreet_desktop_new(), efreet_desktop_ref(), efreet_desktop_x_field_del(), efreet_desktop_x_field_get(), efreet_desktop_x_field_set(), efreet_util_path_to_file_id(), eina_debug_session_terminate(), eina_file_close(), eina_file_dup(), eina_file_flush(), eina_file_map_all(), eina_file_map_faulted(), eina_file_map_free(), eina_file_map_lines(), eina_file_map_new(), eina_file_map_populate(), eina_file_open(), eina_file_virtual_map_all(), eina_file_virtual_map_free(), eina_file_virtual_map_new(), eina_tmpstr_add_length(), eina_tmpstr_del(), eina_tmpstr_len(), eina_tmpstr_manage_new_length(), eio_memory_burst_limit_set(), elm_store_free(), and emotion_shutdown().

  static Eina_Lock_Result eina_lock_take_try (Eina_Lock * mutex) [inline], [static]
Attempts to take a lock if possible. This function attempts to gain a lock on the indicated Eina_Lock. Identical eina_lock_take(), but returns immediately if the lock is already taken.
Parameters
    mutex The Eina_Lock to take
Returns
    Returns EINA_LOCK_SUCCEED on success. If the operation fails because a deadlock condition exists, it returns EINA_LOCK_DEADLOCK. If some other condition causes the take to fail, EINA_LOCK_FAIL is returned.
See also
    eina_lock_take()
    eina_lock_release()
Examples
ecore_thread_example.c.

  static Eina_Lock_Result eina_lock_release (Eina_Lock * mutex) [inline], [static]
Releases a lock. This function releases the lock on the indicated Eina_Lock. If successful, and EINA_HAVE_DEBUG_THREADS is defined, mutex is updated and information about the locking process is removed (e.g. thread number and backtrace for POSIX).
Parameters
    mutex The Eina_Lock to release
Returns
    Returns EINA_LOCK_SUCCEED on success, If it fails, EINA_LOCK_FAIL is returned.
See also
    eina_lock_take()
    eina_lock_take_try()
Examples
ecore_thread_example.c.
Referenced by ecore_fork_reset(), ecore_main_loop_thread_safe_call_sync(), ecore_thread_main_loop_begin(), ecore_thread_main_loop_end(), efreet_desktop_category_add(), efreet_desktop_category_del(), efreet_desktop_free(), efreet_desktop_new(), efreet_desktop_ref(), efreet_desktop_x_field_del(), efreet_desktop_x_field_get(), efreet_desktop_x_field_set(), efreet_util_path_to_file_id(), eina_debug_session_terminate(), eina_file_close(), eina_file_dup(), eina_file_flush(), eina_file_map_all(), eina_file_map_faulted(), eina_file_map_free(), eina_file_map_lines(), eina_file_map_new(), eina_file_map_populate(), eina_file_open(), eina_file_virtual_map_all(), eina_file_virtual_map_free(), eina_file_virtual_map_new(), eina_tmpstr_add_length(), eina_tmpstr_del(), eina_tmpstr_len(), eina_tmpstr_manage_new_length(), eio_memory_burst_limit_set(), elm_store_free(), and emotion_shutdown().

  EINA_API void eina_lock_debug (const Eina_Lock * mutex)
Prints debug information about a lock. This function prints debug information for mutex. The information is platform dependent. On POSIX systems it prints the address of mutex, lock state, thread number and a backtrace.
Parameters
    mutex The Eina_Lock to print debug info for.
Note
    If EINA_HAVE_DEBUG_THREADS is not defined, this function does nothing.
Since
    1.19

  static Eina_Bool eina_condition_new (Eina_Condition * cond, Eina_Lock * mutex) [inline], [static]
Initializes a new condition variable. This function initializes an Eina_Condition structure and associates it with an existing lock.
Parameters
    cond The condition variable to create
    mutex The Eina_Lock structure that controls access to this condition variable
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
Condition variables are used to coordinate actions between threads. See Condition Variable Overview for an introduction to condition variables and their use.
See also
    eina_condition_free()
Examples
ecore_thread_example.c.
Referenced by ecore_init(), ecore_main_loop_thread_safe_call_sync(), ecore_thread_main_loop_begin(), and eio_init().

  static void eina_condition_free (Eina_Condition * cond) [inline], [static]
Deallocates a condition variable. This function deallocates a condition variable and does any platform dependent cleanup that is required.
Parameters
    cond The condition variable to be deallocated.
See also
    eina_condition_new()
Examples
ecore_thread_example.c.

  static Eina_Bool eina_condition_wait (Eina_Condition * cond) [inline], [static]
Causes a thread to wait until signaled by the condition. This function makes a thread block until a signal is sent to it via cond.
Parameters
    cond The Eina_Condition upon which the thread waits.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_condition_timedwait()
Examples
ecore_thread_example.c.
Referenced by ecore_main_loop_thread_safe_call_sync(), ecore_thread_main_loop_begin(), and ecore_thread_main_loop_end().

  static Eina_Bool eina_condition_timedwait (Eina_Condition * cond, double t) [inline], [static]
Causes a thread to wait until signaled by the condition or a timeout is reached. This function makes a thread block until either a signal is sent to it via cond or t seconds have passed.
Parameters
    cond The Eina_Condition upon which the thread waits.
    t The maximum amount of time to wait, in seconds.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise. If the operation timed out, eina error will be set to ETIMEDOUT.
See also
    eina_condition_wait()

  static Eina_Bool eina_condition_broadcast (Eina_Condition * cond) [inline], [static]
Signals all threads waiting for a condition. This function sends a signal to all the threads waiting on the condition cond. If you know for sure that there is only one thread waiting, use eina_condition_signal() instead to gain a little optimization.
Parameters
    cond The Eina_Condition that signals all its waiting threads.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_condition_signal()
Referenced by ecore_thread_main_loop_end(), and eio_memory_burst_limit_set().

  static Eina_Bool eina_condition_signal (Eina_Condition * cond) [inline], [static]
Signals a thread waiting for a condition. This function sends a signal to a thread waiting on the condition cond. If you do not know for sure that there is only one thread waiting, use eina_condition_broadcast() instead.
Parameters
    cond The Eina_Condition that signals its waiting thread.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
Note
    If there is more than one thread waiting on this condition, one of them is signaled, but which one is undefined.
See also
    eina_condition_broadcast()
Examples
ecore_thread_example.c.

  static Eina_Bool eina_rwlock_new (Eina_RWLock * mutex) [inline], [static]
Initializes a new Eina_RWLock. This function initializes an Eina_RWLock with appropriate values. These values are platform dependent as is the structure of the Eina_RWLock itself.
Parameters
    mutex The Eina_RWLock to be initialized.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_rwlock_free()

  static void eina_rwlock_free (Eina_RWLock * mutex) [inline], [static]
Deallocates an Eina_RWLock. This function deallocates an Eina_RWLock and does any platform dependent cleanup that is required.
Parameters
    mutex The Eina_RWLock structure to be deallocated.
See also
    eina_rwlock_new()

  static Eina_Lock_Result eina_rwlock_take_read (Eina_RWLock * mutex) [inline], [static]
Attempts to take a read lock. This function attempts to gain a read lock on the indicated Eina_RWLock. If the Eina_RWLock is write locked, this call can be blocked until the lock is released.
Parameters
    mutex The Eina_RWLock to take.
Returns
    Returns EINA_LOCK_SUCCEED on success, EINA_LOCK_FAIL on failure.
Note
    This function never returns EINA_LOCK_DEADLOCK.
See also
    eina_rwlock_release()
Referenced by eet_dictionary_count(), and eet_dictionary_string_check().

  static Eina_Lock_Result eina_rwlock_take_write (Eina_RWLock * mutex) [inline], [static]
Attempts to take a write lock. This function attempts to gain a write lock on the indicated Eina_RWLock. If the Eina_RWLock is locked for reading or writing, this call can be blocked until the lock is released.
Parameters
    mutex The Eina_RWLock to take.
Returns
    Returns EINA_LOCK_SUCCEED on success, EINA_LOCK_FAIL on failure.
Note
    This function never returns EINA_LOCK_DEADLOCK.
See also
    eina_rwlock_release()

  static Eina_Lock_Result eina_rwlock_release (Eina_RWLock * mutex) [inline], [static]
Releases a lock. This function releases the lock on the indicated Eina_RWLock.
Parameters
    mutex The Eina_RWLock to release.
Returns
    Returns EINA_LOCK_SUCCEED on success. If it fails, EINA_LOCK_FAIL is returned.
See also
    eina_rwlock_take_read()
    eina_rwlock_take_write()
Referenced by eet_dictionary_count(), and eet_dictionary_string_check().

  static Eina_Bool eina_tls_new (Eina_TLS * key) [inline], [static]
Initializes a new Eina_TLS, or thread level storage, to store thread specific data. This function initializes an Eina_TLS with key but does not set a callback to deallocate key when the thread exits. The implementation is platform dependent as is the structure of the Eina_TLS itself.
Parameters
    key The Eina_TLS to be initialized.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
Note
    use eina_tls_cb_new() instead to set a callback for deallocating key.
See also
    eina_tls_cb_new()
    eina_tls_free()
Referenced by evas_gl_new().

  static Eina_Bool eina_tls_cb_new (Eina_TLS * key, Eina_TLS_Delete_Cb delete_cb) [inline], [static]
Initializes a new Eina_TLS, or thread level storage, to store thread specific data. This function initializes an Eina_TLS with key and sets a callback to deallocate key when the thread exits. The implementation is platform dependent as is the structure of the Eina_TLS itself.
Parameters
    key The Eina_TLS to be initialized.
    delete_cb A pointer to a function that deallocates key.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_tls_new()
    eina_tls_free()

  static void eina_tls_free (Eina_TLS key) [inline], [static]
Frees an allocated Eina_TLS. This function frees the Eina_TLS key. The implementation is platform dependent.
Parameters
    key The Eina_TLS to be freed.
See also
    eina_tls_new()
    eina_tls_cb_new()

  static void* eina_tls_get (Eina_TLS key) [inline], [static]
Gets the value in Eina_TLS for this thread. This function gets a pointer to the data associated with Eina_TLS key for this thread. The implementation is platform dependent.
Parameters
    key The Eina_TLS to be retrieved.
Returns
    A pointer to the data associated with key.
See also
    eina_tls_set()
Referenced by eina_error_get(), evas_gl_current_evas_gl_get(), evas_gl_free(), and evas_module_task_cancelled().

  static Eina_Bool eina_tls_set (Eina_TLS key, const void * data) [inline], [static]
Sets the value in Eina_TLS for this thread. This function sets the value associated with key to the pointer to the data data. The implementation is platform dependent.
Parameters
    key The Eina_TLS to be set.
    data A pointer to the data to be stored.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_tls_get()
Referenced by eina_error_set(), evas_gl_free(), evas_gl_make_current(), and evas_gl_new().

  static Eina_Bool eina_semaphore_new (Eina_Semaphore * sem, int count_init) [inline], [static]
Initializes a new Eina_Semaphore. This function initializes an unnamed Eina_Semaphore with appropriate values. These values are platform dependent.
Parameters
    sem The Eina_Semaphore to be initialized.
    count_init Indicates the initial count of threads waiting on this semaphore.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_semaphore_free()
Referenced by eina_thread_queue_new().

  static Eina_Bool eina_semaphore_free (Eina_Semaphore * sem) [inline], [static]
Frees an allocated Eina_Semaphore. This function frees the Eina_Semaphore sem. The implementation is platform dependent.
Parameters
    sem The Eina_Semaphore to be freed.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_semaphore_new()
Referenced by eina_thread_queue_free().

  static Eina_Bool eina_semaphore_lock (Eina_Semaphore * sem) [inline], [static]
Gets a lock on an Eina_Semaphore. This function locks the Eina_Semaphore sem. The implementation is platform dependent.
Parameters
    sem The Eina_Semaphore to lock.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_semaphore_release()

  static Eina_Bool eina_semaphore_release (Eina_Semaphore * sem, int count_release) [inline], [static]
Releases a lock on an Eina_Semaphore. This function releases a lock on the Eina_Semaphore sem. The implementation is platform dependent.
Parameters
    sem The Eina_Semaphore to release.
    count_release Not used.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_semaphore_lock()

  static Eina_Bool eina_barrier_new (Eina_Barrier * barrier, int needed) [inline], [static]
Initializes a new Eina_Barrier. This function initializes a new Eina_Barrier. It sets the needed flag to the value of needed, sets the barrier's count member to 0 and creates new Eina_Lock and Eina_Condition objects for the barrier.
Parameters
    barrier The Eina_Barrier to be initialized.
    needed The number of thread waits that causes this barrier to be reset.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
See also
    eina_barrier_free()

  static void eina_barrier_free (Eina_Barrier * barrier) [inline], [static]
Frees an allocated Eina_Barrier. This function frees the Eina_Barrier barrier.
Parameters
    barrier The Eina_Barrier to be freed.
See also
    eina_barrier_new()

  static Eina_Bool eina_barrier_wait (Eina_Barrier * barrier) [inline], [static]
Increments the count of threads that are waiting on barrier. When the count of threads reaches the needed value for the barrier, all waiting threads are notified via eina_condition_broadcast().
Parameters
    barrier The Eina_Barrier to be incremented.
Returns
    EINA_TRUE on success, else EINA_FALSE otherwise.

  static Eina_Bool eina_spinlock_new (Eina_Spinlock * spinlock) [inline], [static]
Initializes a new Eina_Spinlock. This function initializes a new Eina_Spinlock, if spinlocks are available. If spinlocks are not available, it creates a new Eina_Lock.
Parameters
    spinlock The Eina_Spinlock to be initialized.
Returns
    EINA_TRUE on success, EINA_FALSE otherwise.
Note
    Spinlocks are only implemented on the POSIX platform and are only available if EINA_HAVE_POSIX_SPINLOCK is defined. You get a new Eina_Lock on All other platforms.
See also
    eina_spinlock_free()
Referenced by eina_thread_queue_new(), and eio_init().

  static Eina_Lock_Result eina_spinlock_take (Eina_Spinlock * spinlock) [inline], [static]
Attempts to take a spinlock. This function attempts to gain a lock on the indicated Eina_Spinlock. If the underlying Eina_Spinlock is locked already, this call can be blocked until the lock is released. This is appropriate in many cases, but consider using eina_spinlock_take_try() if you don't need to block.
Parameters
    spinlock The Eina_Spinlock to take.
Returns
    Returns EINA_LOCK_SUCCEED on success. If the operation fails because a deadlock condition exists, it returns EINA_LOCK_DEADLOCK. If some other condition causes the take to fail, EINA_LOCK_FAIL is returned.
See also
    eina_spinlock_take_try()
    eina_spinlock_release()
Referenced by eina_debug_session_send(), eina_debug_timer_add(), eina_debug_timer_del(), eina_error_msg_get(), eina_evlog_start(), eina_evlog_steal(), eina_evlog_stop(), eina_file_statgen_disable(), eina_file_statgen_enable(), eina_file_statgen_get(), eina_file_statgen_next(), eina_rectangle_free(), eina_rectangle_new(), eina_safepointer_register(), eina_safepointer_unregister(), eina_stringshare_add_length(), eina_stringshare_del(), eina_stringshare_ref(), eina_thread_queue_poll(), eina_thread_queue_send(), eina_thread_queue_wait(), and evas_async_events_put().

  static Eina_Lock_Result eina_spinlock_take_try (Eina_Spinlock * spinlock) [inline], [static]
Attempts to take a spinlock if possible. This function attempts to gain a lock on the indicated Eina_Spinlock. Identical to eina_lock_take(), but returns immediately if the lock is already taken.
Parameters
    spinlock The Eina_Spinlock to take.
Returns
    Returns EINA_LOCK_SUCCEED on success. If the operation fails because a deadlock condition exists, it returns EINA_LOCK_DEADLOCK. If some other condition causes the take to fail, EINA_LOCK_FAIL is returned.
See also
    eina_spinlock_take_try()
    eina_spinlock_release()

  static Eina_Lock_Result eina_spinlock_release (Eina_Spinlock * spinlock) [inline], [static]
Releases a spinlock. This function will release the lock on the indicated Eina_Spinlock. If successful, and EINA_HAVE_DEBUG_THREADS is defined, mutex is updated and information about the locking process is removed (e.g. thread number and backtrace for POSIX).
Parameters
    spinlock The Eina_Spinlock to release.
Returns
    Returns EINA_LOCK_SUCCEED on success, EINA_LOCK_FAIL otherwise.
See also
    eina_spinlock_take()
    eina_spinlock_take_try()
Referenced by eina_debug_session_send(), eina_debug_timer_add(), eina_debug_timer_del(), eina_error_msg_get(), eina_evlog_start(), eina_evlog_steal(), eina_evlog_stop(), eina_file_statgen_disable(), eina_file_statgen_enable(), eina_file_statgen_get(), eina_file_statgen_next(), eina_rectangle_free(), eina_rectangle_new(), eina_safepointer_register(), eina_safepointer_unregister(), eina_stringshare_add_length(), eina_stringshare_del(), eina_stringshare_ref(), eina_thread_queue_poll(), eina_thread_queue_send(), eina_thread_queue_wait(), and evas_async_events_put().

  static void eina_spinlock_free (Eina_Spinlock * spinlock) [inline], [static]
Deallocates an Eina_Spinlock. This function deallocates an Eina_Spinlock and does any platform dependent cleanup that is required.
Parameters
    spinlock The Eina_Spinlock to be deallocated.
Referenced by eina_thread_queue_free().

Author
Generated automatically by Doxygen for EFL from the source code.