\hypertarget{group__Eina__Lock__Group}{}\section{Lock}
\label{group__Eina__Lock__Group}\index{Lock@{Lock}}


This group provides thread locking and synchronization capabilities.  


\subsection*{Macros}
\begin{DoxyCompactItemize}
\item 
\#define \hyperlink{group__Eina__Lock__Group_ga2974eb3f18404edcc375910cc7e4859c}{E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL}(val)
\begin{DoxyCompactList}\small\item\em The macro doesn\textquotesingle{}t do anything unless {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} is defined. \end{DoxyCompactList}\item 
\#define \hyperlink{group__Eina__Lock__Group_ga6900a2b986f5536b73210e2560675cb0}{E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+RN}\hypertarget{group__Eina__Lock__Group_ga6900a2b986f5536b73210e2560675cb0}{}\label{group__Eina__Lock__Group_ga6900a2b986f5536b73210e2560675cb0}

\begin{DoxyCompactList}\small\item\em The macro doesn\textquotesingle{}t do anything unless {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} is defined. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Typedefs}
\begin{DoxyCompactItemize}
\item 
typedef void($\ast$ \hyperlink{group__Eina__Lock__Group_gad1814a18bbe2de0eb98a224275def459}{Eina\+\_\+\+T\+L\+S\+\_\+\+Delete\+\_\+\+Cb}) (void $\ast$ptr)\hypertarget{group__Eina__Lock__Group_gad1814a18bbe2de0eb98a224275def459}{}\label{group__Eina__Lock__Group_gad1814a18bbe2de0eb98a224275def459}

\begin{DoxyCompactList}\small\item\em A callback type for deallocation of thread level sotrage data. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Enumerations}
\begin{DoxyCompactItemize}
\item 
enum \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \{ \\*
\hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} = E\+I\+N\+A\+\_\+\+F\+A\+L\+SE, 
\\*
\hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} = E\+I\+N\+A\+\_\+\+T\+R\+UE, 
\\*
\hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}
 \}\begin{DoxyCompactList}\small\item\em Return codes for lock operations. \end{DoxyCompactList}
\end{DoxyCompactItemize}
\subsection*{Functions}
\begin{DoxyCompactItemize}
\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga8dda398c1db315582a80640c7f78f648}{eina\+\_\+lock\+\_\+new} (Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+Lock. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_gaf8d1c4e3aff3bd26fc85d81ed8c4e71a}{eina\+\_\+lock\+\_\+free} (Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Deallocates an \#\+Eina\+\_\+\+Lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}{eina\+\_\+lock\+\_\+take} (Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Attempts to take a lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_ga13c8270c1589bfd4770ee4cd43977bc5}{eina\+\_\+lock\+\_\+take\+\_\+try} (Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Attempts to take a lock if possible. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_ga469476cfe8d8ca4dfdc46469fb9e31e5}{eina\+\_\+lock\+\_\+release} (Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Releases a lock. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_gacaa58955efb147091249bf45610fdf6a}{eina\+\_\+lock\+\_\+debug} (const Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Print debug information about a lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gaab2b734db1cbdaffe79559f6716ac793}{eina\+\_\+condition\+\_\+new} (Eina\+\_\+\+Condition $\ast$cond, Eina\+\_\+\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Initializes a new condition variable. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_ga838e1e7dfc8bbf114634a7de67de8956}{eina\+\_\+condition\+\_\+free} (Eina\+\_\+\+Condition $\ast$cond)
\begin{DoxyCompactList}\small\item\em Deallocates a condition variable. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga149f387d5f18c469c365147ffbd4dc2c}{eina\+\_\+condition\+\_\+wait} (Eina\+\_\+\+Condition $\ast$cond)
\begin{DoxyCompactList}\small\item\em Causes a thread to wait until signaled by the condition. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gaa9e6e29fffa21b4bef6f089655cf7982}{eina\+\_\+condition\+\_\+timedwait} (Eina\+\_\+\+Condition $\ast$cond, double t)
\begin{DoxyCompactList}\small\item\em Causes a thread to wait until signaled by the condition or a timeout is reached. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga26597941ef6777d759ad4934d3f1655e}{eina\+\_\+condition\+\_\+broadcast} (Eina\+\_\+\+Condition $\ast$cond)
\begin{DoxyCompactList}\small\item\em Signal all threads waiting for a condition. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga42cfdc4920e74fd7ba99527a6a99cd7d}{eina\+\_\+condition\+\_\+signal} (Eina\+\_\+\+Condition $\ast$cond)
\begin{DoxyCompactList}\small\item\em Signal a thread waiting for a condition. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gafe7bfa849c19aa4738d1918219c2ebb5}{eina\+\_\+rwlock\+\_\+new} (Eina\+\_\+\+R\+W\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+R\+W\+Lock. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_gac0b244d4fec104f70a1a6157356c43f2}{eina\+\_\+rwlock\+\_\+free} (Eina\+\_\+\+R\+W\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Deallocates an \#\+Eina\+\_\+\+R\+W\+Lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_ga4bfe2c4dabf66d02481e36168d409cd9}{eina\+\_\+rwlock\+\_\+take\+\_\+read} (Eina\+\_\+\+R\+W\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Attempts to take a read lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_gae9fa682cffd225320e1c07fe644f034e}{eina\+\_\+rwlock\+\_\+take\+\_\+write} (Eina\+\_\+\+R\+W\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Attempts to take a write lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_gab3d34ffb8950e66b820a4de5def7bcd4}{eina\+\_\+rwlock\+\_\+release} (Eina\+\_\+\+R\+W\+Lock $\ast$mutex)
\begin{DoxyCompactList}\small\item\em Releases a lock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga300882739bb49270e52a62164a05276e}{eina\+\_\+tls\+\_\+new} (Eina\+\_\+\+T\+LS $\ast$key)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+T\+LS, or thread level storage, to store thread specific data. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gae128d753144bc09bdfc9e23b05f7ad90}{eina\+\_\+tls\+\_\+cb\+\_\+new} (Eina\+\_\+\+T\+LS $\ast$key, \hyperlink{group__Eina__Lock__Group_gad1814a18bbe2de0eb98a224275def459}{Eina\+\_\+\+T\+L\+S\+\_\+\+Delete\+\_\+\+Cb} delete\+\_\+cb)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+T\+LS, or thread level storage, to store thread specific data. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_ga6f9d5d1a0929b9cc5f1559fca41c9c1a}{eina\+\_\+tls\+\_\+free} (Eina\+\_\+\+T\+LS key)
\begin{DoxyCompactList}\small\item\em Frees an allocated \#\+Eina\+\_\+\+T\+LS. \end{DoxyCompactList}\item 
static void $\ast$ \hyperlink{group__Eina__Lock__Group_ga90d151fea86045136cefee074924f369}{eina\+\_\+tls\+\_\+get} (Eina\+\_\+\+T\+LS key)
\begin{DoxyCompactList}\small\item\em Gets the value in \#\+Eina\+\_\+\+T\+LS for this thread. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gaf8c9890f52c058aa8cab1da3a109c26a}{eina\+\_\+tls\+\_\+set} (Eina\+\_\+\+T\+LS key, const void $\ast$data)
\begin{DoxyCompactList}\small\item\em Sets the value in Eina\+\_\+\+T\+LS for this thread. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga093fddb63d97504084f49dd36df65fd0}{eina\+\_\+semaphore\+\_\+new} (Eina\+\_\+\+Semaphore $\ast$sem, int count\+\_\+init)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+Semaphore. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga3ed968965c79524a43f6efea20459d49}{eina\+\_\+semaphore\+\_\+free} (Eina\+\_\+\+Semaphore $\ast$sem)
\begin{DoxyCompactList}\small\item\em Frees an allocated \#\+Eina\+\_\+\+Semaphore. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga4b1a668ea5e49bb309f9b8c2b983b83c}{eina\+\_\+semaphore\+\_\+lock} (Eina\+\_\+\+Semaphore $\ast$sem)
\begin{DoxyCompactList}\small\item\em Gets a lock on an \#\+Eina\+\_\+\+Semaphore. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gaf0b5612096cedc1d8a80d0fe43c42c43}{eina\+\_\+semaphore\+\_\+release} (Eina\+\_\+\+Semaphore $\ast$sem, int count\+\_\+release)
\begin{DoxyCompactList}\small\item\em Releases a lock on an \#\+Eina\+\_\+\+Semaphore. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga86dd1d3f5b8ae9ac27de7976910a5bb2}{eina\+\_\+barrier\+\_\+new} (Eina\+\_\+\+Barrier $\ast$barrier, int needed)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+Barrier. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_gafe6f7125b084e0b54f3b43e9289b18a0}{eina\+\_\+barrier\+\_\+free} (Eina\+\_\+\+Barrier $\ast$barrier)
\begin{DoxyCompactList}\small\item\em Frees an allocated \#\+Eina\+\_\+\+Barrier. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_gab3a1febe7dc4e0a2f62270dc2602209e}{eina\+\_\+barrier\+\_\+wait} (Eina\+\_\+\+Barrier $\ast$barrier)
\begin{DoxyCompactList}\small\item\em Increments the count of threads that are waiting on {\ttfamily barrier}. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\+\_\+\+Bool} \hyperlink{group__Eina__Lock__Group_ga5f4b36220ae88623031cb0e9bf5de290}{eina\+\_\+spinlock\+\_\+new} (Eina\+\_\+\+Spinlock $\ast$spinlock)
\begin{DoxyCompactList}\small\item\em Initializes a new \#\+Eina\+\_\+\+Spinlock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_gaf9556624e5c6db1a66c20615c523efb5}{eina\+\_\+spinlock\+\_\+take} (Eina\+\_\+\+Spinlock $\ast$spinlock)
\begin{DoxyCompactList}\small\item\em Attempts to take a spinlock. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}{eina\+\_\+spinlock\+\_\+take\+\_\+try} (Eina\+\_\+\+Spinlock $\ast$spinlock)
\begin{DoxyCompactList}\small\item\em Attempts to take a spinlock if possible. \end{DoxyCompactList}\item 
static \hyperlink{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{Eina\+\_\+\+Lock\+\_\+\+Result} \hyperlink{group__Eina__Lock__Group_ga7143ee35b9894e80578753485284256c}{eina\+\_\+spinlock\+\_\+release} (Eina\+\_\+\+Spinlock $\ast$spinlock)
\begin{DoxyCompactList}\small\item\em Releases a spinlock. \end{DoxyCompactList}\item 
static void \hyperlink{group__Eina__Lock__Group_gac2593032eadc7b1e03c0980f2dedb7ca}{eina\+\_\+spinlock\+\_\+free} (Eina\+\_\+\+Spinlock $\ast$spinlock)
\begin{DoxyCompactList}\small\item\em Deallocates an \#\+Eina\+\_\+\+Spinlock. \end{DoxyCompactList}\end{DoxyCompactItemize}
\subsection*{Variables}
\begin{DoxyCompactItemize}
\item 
\hyperlink{group__Elua_ga3db3556eec8ef18cb8ddb43816974ac8}{E\+A\+PI} \hyperlink{group__Eina__Error__Group_ga95b3cbb33e987e7d92a81ea785001686}{Eina\+\_\+\+Error} \hyperlink{group__Eina__Lock__Group_ga55d946144731464bd73ca2dd9c2381bc}{E\+I\+N\+A\+\_\+\+E\+R\+R\+O\+R\+\_\+\+N\+O\+T\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+OP}\hypertarget{group__Eina__Lock__Group_ga55d946144731464bd73ca2dd9c2381bc}{}\label{group__Eina__Lock__Group_ga55d946144731464bd73ca2dd9c2381bc}

\begin{DoxyCompactList}\small\item\em A type definition for warning that a function was called from somewhere other than the E\+FL main loop. \end{DoxyCompactList}\end{DoxyCompactItemize}


\subsection{Detailed Description}
This group provides thread locking and synchronization capabilities. 

Similar to P\+O\+I\+S\+IX threads (pthreads), but it takes care of the platform specific details so you don\textquotesingle{}t have to.

If you know how {\ttfamily pthreads} work, this library will look familiar to you. If you are not familiar with {\ttfamily pthreads}, a good overview is available \href{https://computing.llnl.gov/tutorials/pthreads/}{\tt here}

The Eina lock functions are grouped into several categories to handle different thread locking and sychronization methods\+: \begin{DoxyItemize}
\item eina\+\_\+lock\+\_\+$\ast$ -\/ Functions that implement locking. \item eina\+\_\+condition\+\_\+$\ast$ -\/ Functions that implement condition variables. \item eina\+\_\+rwlock\+\_\+$\ast$ -\/ Functions that implement read/write locks. \item eina\+\_\+tls\+\_\+$\ast$ -\/ Functions that implement thread level storage. \item eina\+\_\+semaphore\+\_\+$\ast$ -\/ Functions that implement semaphores. \item eina\+\_\+barrier\+\_\+$\ast$ -\/ Functions that implement barriers. \item eina\+\_\+spinlock\+\_\+$\ast$ -\/ Functions that implement spinlocks if they are available on the platform. If they are not available, these functuions degrade to plain locks. \end{DoxyItemize}


\subsection{Macro Definition Documentation}
\index{Lock@{Lock}!E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL@{E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL}}
\index{E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL@{E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL}{EINA_MAIN_LOOP_CHECK_RETURN_VAL}}]{\setlength{\rightskip}{0pt plus 5cm}\#define E\+I\+N\+A\+\_\+\+M\+A\+I\+N\+\_\+\+L\+O\+O\+P\+\_\+\+C\+H\+E\+C\+K\+\_\+\+R\+E\+T\+U\+R\+N\+\_\+\+V\+AL(
\begin{DoxyParamCaption}
\item[{}]{val}
\end{DoxyParamCaption}
)}\hypertarget{group__Eina__Lock__Group_ga2974eb3f18404edcc375910cc7e4859c}{}\label{group__Eina__Lock__Group_ga2974eb3f18404edcc375910cc7e4859c}


The macro doesn\textquotesingle{}t do anything unless {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} is defined. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em val} & The value to be returned \\
\hline
\end{DoxyParams}


Referenced by ecore\+\_\+animator\+\_\+del(), ecore\+\_\+animator\+\_\+frametime\+\_\+get(), ecore\+\_\+animator\+\_\+source\+\_\+get(), ecore\+\_\+event\+\_\+add(), ecore\+\_\+event\+\_\+current\+\_\+event\+\_\+get(), ecore\+\_\+event\+\_\+current\+\_\+type\+\_\+get(), ecore\+\_\+event\+\_\+del(), ecore\+\_\+event\+\_\+filter\+\_\+add(), ecore\+\_\+event\+\_\+filter\+\_\+del(), ecore\+\_\+event\+\_\+handler\+\_\+add(), ecore\+\_\+event\+\_\+handler\+\_\+data\+\_\+get(), ecore\+\_\+event\+\_\+handler\+\_\+data\+\_\+set(), ecore\+\_\+event\+\_\+handler\+\_\+del(), ecore\+\_\+event\+\_\+type\+\_\+new(), ecore\+\_\+exe\+\_\+cmd\+\_\+get(), ecore\+\_\+exe\+\_\+data\+\_\+get(), ecore\+\_\+exe\+\_\+data\+\_\+set(), ecore\+\_\+exe\+\_\+event\+\_\+data\+\_\+get(), ecore\+\_\+exe\+\_\+flags\+\_\+get(), ecore\+\_\+exe\+\_\+free(), ecore\+\_\+exe\+\_\+pid\+\_\+get(), ecore\+\_\+exe\+\_\+pipe\+\_\+run(), ecore\+\_\+exe\+\_\+run(), ecore\+\_\+exe\+\_\+run\+\_\+priority\+\_\+get(), ecore\+\_\+exe\+\_\+send(), ecore\+\_\+exe\+\_\+tag\+\_\+get(), ecore\+\_\+idle\+\_\+enterer\+\_\+del(), ecore\+\_\+idle\+\_\+exiter\+\_\+del(), ecore\+\_\+idler\+\_\+del(), ecore\+\_\+job\+\_\+del(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+active\+\_\+get(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+add(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+del(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+fd\+\_\+get(), ecore\+\_\+main\+\_\+fd\+\_\+handler\+\_\+file\+\_\+add(), ecore\+\_\+main\+\_\+loop\+\_\+iterate\+\_\+may\+\_\+block(), ecore\+\_\+main\+\_\+loop\+\_\+select\+\_\+func\+\_\+get(), ecore\+\_\+pipe\+\_\+del(), ecore\+\_\+pipe\+\_\+full\+\_\+add(), ecore\+\_\+pipe\+\_\+read\+\_\+fd(), ecore\+\_\+pipe\+\_\+write\+\_\+fd(), ecore\+\_\+poller\+\_\+add(), ecore\+\_\+poller\+\_\+del(), ecore\+\_\+poller\+\_\+poll\+\_\+interval\+\_\+get(), ecore\+\_\+thread\+\_\+active\+\_\+get(), ecore\+\_\+thread\+\_\+feedback\+\_\+run(), ecore\+\_\+thread\+\_\+max\+\_\+get(), ecore\+\_\+thread\+\_\+pending\+\_\+feedback\+\_\+get(), ecore\+\_\+thread\+\_\+pending\+\_\+get(), ecore\+\_\+thread\+\_\+pending\+\_\+total\+\_\+get(), ecore\+\_\+thread\+\_\+run(), ecore\+\_\+throttle\+\_\+get(), ecore\+\_\+timer\+\_\+add(), ecore\+\_\+timer\+\_\+del(), ecore\+\_\+timer\+\_\+dump(), and ecore\+\_\+timer\+\_\+precision\+\_\+get().



\subsection{Enumeration Type Documentation}
\index{Lock@{Lock}!Eina\+\_\+\+Lock\+\_\+\+Result@{Eina\+\_\+\+Lock\+\_\+\+Result}}
\index{Eina\+\_\+\+Lock\+\_\+\+Result@{Eina\+\_\+\+Lock\+\_\+\+Result}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{Eina\+\_\+\+Lock\+\_\+\+Result}{Eina_Lock_Result}}]{\setlength{\rightskip}{0pt plus 5cm}enum {\bf Eina\+\_\+\+Lock\+\_\+\+Result}}\hypertarget{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}{}\label{group__Eina__Lock__Group_gacba5cc92b99189a86e3620c92836e729}


Return codes for lock operations. 

\begin{Desc}
\item[Enumerator]\par
\begin{description}
\index{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL@{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL}!Lock@{Lock}}\index{Lock@{Lock}!E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL@{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL}}\item[{\em 
E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL\hypertarget{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{}\label{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}
}]Indicates that the lock operation failed. \index{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED@{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED}!Lock@{Lock}}\index{Lock@{Lock}!E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED@{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED}}\item[{\em 
E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED\hypertarget{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{}\label{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}
}]Indicates that the lock operation succeeded. \index{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK@{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}!Lock@{Lock}}\index{Lock@{Lock}!E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK@{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}}\item[{\em 
E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK\hypertarget{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{}\label{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}
}]Indicates that the lock is deadlocked. \end{description}
\end{Desc}


\subsection{Function Documentation}
\index{Lock@{Lock}!eina\+\_\+lock\+\_\+new@{eina\+\_\+lock\+\_\+new}}
\index{eina\+\_\+lock\+\_\+new@{eina\+\_\+lock\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+lock\+\_\+new(\+Eina\+\_\+\+Lock $\ast$mutex)}{eina_lock_new(Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+lock\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga8dda398c1db315582a80640c7f78f648}{}\label{group__Eina__Lock__Group_ga8dda398c1db315582a80640c7f78f648}


Initializes a new \#\+Eina\+\_\+\+Lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock structure to be initialized \\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise
\end{DoxyReturn}
This function initializes an \#\+Eina\+\_\+\+Lock with appropriate values. These values are platform dependent as is the structure of the \#\+Eina\+\_\+\+Lock itself.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gaf8d1c4e3aff3bd26fc85d81ed8c4e71a}{eina\+\_\+lock\+\_\+free()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by ecore\+\_\+init(), ecore\+\_\+main\+\_\+loop\+\_\+thread\+\_\+safe\+\_\+call\+\_\+sync(), ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+begin(), eet\+\_\+init(), eina\+\_\+file\+\_\+mkstemp(), eina\+\_\+file\+\_\+open(), eina\+\_\+file\+\_\+virtualize(), eio\+\_\+init(), evas\+\_\+async\+\_\+events\+\_\+put(), evas\+\_\+new(), efl\+::eina\+::mutex\+::mutex(), and efl\+::eina\+::thread\+::thread().

\index{Lock@{Lock}!eina\+\_\+lock\+\_\+free@{eina\+\_\+lock\+\_\+free}}
\index{eina\+\_\+lock\+\_\+free@{eina\+\_\+lock\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+lock\+\_\+free(\+Eina\+\_\+\+Lock $\ast$mutex)}{eina_lock_free(Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+lock\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gaf8d1c4e3aff3bd26fc85d81ed8c4e71a}{}\label{group__Eina__Lock__Group_gaf8d1c4e3aff3bd26fc85d81ed8c4e71a}


Deallocates an \#\+Eina\+\_\+\+Lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock structure to be deallocated\\
\hline
\end{DoxyParams}
This function deallocates an \#\+Eina\+\_\+\+Lock allocated by \hyperlink{group__Eina__Lock__Group_ga8dda398c1db315582a80640c7f78f648}{eina\+\_\+lock\+\_\+new()} and does any platform dependent cleanup that is required.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga8dda398c1db315582a80640c7f78f648}{eina\+\_\+lock\+\_\+new()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by ecore\+\_\+shutdown(), ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+end(), eet\+\_\+shutdown(), eina\+\_\+file\+\_\+mkstemp(), eio\+\_\+shutdown(), emotion\+\_\+shutdown(), evas\+\_\+async\+\_\+events\+\_\+put(), evas\+\_\+free(), efl\+::eina\+::thread\+::thread(), and efl\+::eina\+::mutex\+::$\sim$mutex().

\index{Lock@{Lock}!eina\+\_\+lock\+\_\+take@{eina\+\_\+lock\+\_\+take}}
\index{eina\+\_\+lock\+\_\+take@{eina\+\_\+lock\+\_\+take}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+lock\+\_\+take(\+Eina\+\_\+\+Lock $\ast$mutex)}{eina_lock_take(Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+lock\+\_\+take (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}{}\label{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}


Attempts to take a lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock to take\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success. If the operation fails because a deadlock condition exists, it returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}. If some other condition causes the take to fail, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} is returned.
\end{DoxyReturn}
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 \hyperlink{group__Eina__Lock__Group_ga13c8270c1589bfd4770ee4cd43977bc5}{eina\+\_\+lock\+\_\+take\+\_\+try()} if you don\textquotesingle{}t need to block.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga13c8270c1589bfd4770ee4cd43977bc5}{eina\+\_\+lock\+\_\+take\+\_\+try()} 

\hyperlink{group__Eina__Lock__Group_ga469476cfe8d8ca4dfdc46469fb9e31e5}{eina\+\_\+lock\+\_\+release()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


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\+\_\+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(), emotion\+\_\+init(), emotion\+\_\+shutdown(), evas\+\_\+async\+\_\+events\+\_\+put(), efl\+::eina\+::mutex\+::lock(), and efl\+::eina\+::thread\+::thread().

\index{Lock@{Lock}!eina\+\_\+lock\+\_\+take\+\_\+try@{eina\+\_\+lock\+\_\+take\+\_\+try}}
\index{eina\+\_\+lock\+\_\+take\+\_\+try@{eina\+\_\+lock\+\_\+take\+\_\+try}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+lock\+\_\+take\+\_\+try(\+Eina\+\_\+\+Lock $\ast$mutex)}{eina_lock_take_try(Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+lock\+\_\+take\+\_\+try (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga13c8270c1589bfd4770ee4cd43977bc5}{}\label{group__Eina__Lock__Group_ga13c8270c1589bfd4770ee4cd43977bc5}


Attempts to take a lock if possible. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock to take\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success. If the operation fails because a deadlock condition exists, it returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}. If some other condition causes the take to fail, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} is returned.
\end{DoxyReturn}
This function attempts to gain a lock on the indicated \#\+Eina\+\_\+\+Lock. Identical \hyperlink{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}{eina\+\_\+lock\+\_\+take()}, but returns immediately if the lock is already taken.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}{eina\+\_\+lock\+\_\+take()} 

\hyperlink{group__Eina__Lock__Group_ga469476cfe8d8ca4dfdc46469fb9e31e5}{eina\+\_\+lock\+\_\+release()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by efl\+::eina\+::mutex\+::try\+\_\+lock().

\index{Lock@{Lock}!eina\+\_\+lock\+\_\+release@{eina\+\_\+lock\+\_\+release}}
\index{eina\+\_\+lock\+\_\+release@{eina\+\_\+lock\+\_\+release}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+lock\+\_\+release(\+Eina\+\_\+\+Lock $\ast$mutex)}{eina_lock_release(Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+lock\+\_\+release (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga469476cfe8d8ca4dfdc46469fb9e31e5}{}\label{group__Eina__Lock__Group_ga469476cfe8d8ca4dfdc46469fb9e31e5}


Releases a lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock to release\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success. If it fails, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} is returned.
\end{DoxyReturn}
This function releases the lock on the indicated \#\+Eina\+\_\+\+Lock. If successful, and {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} is defined, {\ttfamily mutex} is updated and information about the locking process is removed (e.\+g. thread number and backtrace for P\+O\+S\+IX).

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}{eina\+\_\+lock\+\_\+take()} 

\hyperlink{group__Eina__Lock__Group_ga13c8270c1589bfd4770ee4cd43977bc5}{eina\+\_\+lock\+\_\+take\+\_\+try()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


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\+\_\+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(), emotion\+\_\+init(), emotion\+\_\+shutdown(), evas\+\_\+async\+\_\+events\+\_\+put(), efl\+::eina\+::thread\+::thread(), and efl\+::eina\+::mutex\+::unlock().

\index{Lock@{Lock}!eina\+\_\+lock\+\_\+debug@{eina\+\_\+lock\+\_\+debug}}
\index{eina\+\_\+lock\+\_\+debug@{eina\+\_\+lock\+\_\+debug}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+lock\+\_\+debug(const Eina\+\_\+\+Lock $\ast$mutex)}{eina_lock_debug(const Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+lock\+\_\+debug (
\begin{DoxyParamCaption}
\item[{const Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gacaa58955efb147091249bf45610fdf6a}{}\label{group__Eina__Lock__Group_gacaa58955efb147091249bf45610fdf6a}


Print debug information about a lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock to print debug info for.\\
\hline
\end{DoxyParams}
This function prints debug information for {\ttfamily mutex}. The information is platform dependant. On P\+O\+S\+IX systems it prints the address of {\ttfamily mutex}, lock state, thread number and a backtrace.

\begin{DoxyNote}{Note}
If {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} is not defined, this function does nothing. 

This function is implemented on Win32 or Win\+CE, but it does not not produce any output, regardless of {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} being set. 
\end{DoxyNote}


Referenced by efl\+::eina\+::mutex\+::debug(), and eina\+\_\+threads\+\_\+shutdown().

\index{Lock@{Lock}!eina\+\_\+condition\+\_\+new@{eina\+\_\+condition\+\_\+new}}
\index{eina\+\_\+condition\+\_\+new@{eina\+\_\+condition\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+condition\+\_\+new(\+Eina\+\_\+\+Condition $\ast$cond, Eina\+\_\+\+Lock $\ast$mutex)}{eina_condition_new(Eina_Condition *cond, Eina_Lock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+condition\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Condition $\ast$}]{cond, }
\item[{Eina\+\_\+\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gaab2b734db1cbdaffe79559f6716ac793}{}\label{group__Eina__Lock__Group_gaab2b734db1cbdaffe79559f6716ac793}


Initializes a new condition variable. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em cond} & The condition variable to create \\
\hline
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+Lock structure that controls access to this condition variable\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes an \#\+Eina\+\_\+\+Condition structure and associates it with an existing lock.

Condition variables are used to coordinate actions between threads. See \href{https://computing.llnl.gov/tutorials/pthreads/#ConVarOverview}{\tt Condition Varable Overview } for an introduction to condition variables and their use.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga838e1e7dfc8bbf114634a7de67de8956}{eina\+\_\+condition\+\_\+free()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by efl\+::eina\+::condition\+\_\+variable\+::condition\+\_\+variable(), ecore\+\_\+init(), ecore\+\_\+main\+\_\+loop\+\_\+thread\+\_\+safe\+\_\+call\+\_\+sync(), ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+begin(), eio\+\_\+init(), evas\+\_\+async\+\_\+events\+\_\+put(), and efl\+::eina\+::thread\+::thread().

\index{Lock@{Lock}!eina\+\_\+condition\+\_\+free@{eina\+\_\+condition\+\_\+free}}
\index{eina\+\_\+condition\+\_\+free@{eina\+\_\+condition\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+condition\+\_\+free(\+Eina\+\_\+\+Condition $\ast$cond)}{eina_condition_free(Eina_Condition *cond)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+condition\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Condition $\ast$}]{cond}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga838e1e7dfc8bbf114634a7de67de8956}{}\label{group__Eina__Lock__Group_ga838e1e7dfc8bbf114634a7de67de8956}


Deallocates a condition variable. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em cond} & The condition variable to be deallocated.\\
\hline
\end{DoxyParams}
This function deallocates a condition variable and does any platform dependent cleanup that is required.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gaab2b734db1cbdaffe79559f6716ac793}{eina\+\_\+condition\+\_\+new()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by ecore\+\_\+shutdown(), ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+end(), eio\+\_\+shutdown(), evas\+\_\+async\+\_\+events\+\_\+put(), efl\+::eina\+::thread\+::thread(), and efl\+::eina\+::condition\+\_\+variable\+::$\sim$condition\+\_\+variable().

\index{Lock@{Lock}!eina\+\_\+condition\+\_\+wait@{eina\+\_\+condition\+\_\+wait}}
\index{eina\+\_\+condition\+\_\+wait@{eina\+\_\+condition\+\_\+wait}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+condition\+\_\+wait(\+Eina\+\_\+\+Condition $\ast$cond)}{eina_condition_wait(Eina_Condition *cond)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+condition\+\_\+wait (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Condition $\ast$}]{cond}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga149f387d5f18c469c365147ffbd4dc2c}{}\label{group__Eina__Lock__Group_ga149f387d5f18c469c365147ffbd4dc2c}


Causes a thread to wait until signaled by the condition. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em cond} & The \#\+Eina\+\_\+\+Condition upon which the thread waits.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function makes a thread block until a signal is sent to it via {\ttfamily cond}.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gaa9e6e29fffa21b4bef6f089655cf7982}{eina\+\_\+condition\+\_\+timedwait()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by ecore\+\_\+main\+\_\+loop\+\_\+thread\+\_\+safe\+\_\+call\+\_\+sync(), ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+begin(), ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+end(), evas\+\_\+async\+\_\+events\+\_\+put(), efl\+::eina\+::thread\+::thread(), and efl\+::eina\+::condition\+\_\+variable\+::wait().

\index{Lock@{Lock}!eina\+\_\+condition\+\_\+timedwait@{eina\+\_\+condition\+\_\+timedwait}}
\index{eina\+\_\+condition\+\_\+timedwait@{eina\+\_\+condition\+\_\+timedwait}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+condition\+\_\+timedwait(\+Eina\+\_\+\+Condition $\ast$cond, double t)}{eina_condition_timedwait(Eina_Condition *cond, double t)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+condition\+\_\+timedwait (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Condition $\ast$}]{cond, }
\item[{double}]{t}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gaa9e6e29fffa21b4bef6f089655cf7982}{}\label{group__Eina__Lock__Group_gaa9e6e29fffa21b4bef6f089655cf7982}


Causes a thread to wait until signaled by the condition or a timeout is reached. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em cond} & The \#\+Eina\+\_\+\+Condition upon which the thread waits. \\
\hline
\mbox{\tt in}  & {\em t} & The maximum amount of time to wait, in seconds.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function makes a thread block until either a signal is sent to it via {\ttfamily cond} or {\ttfamily t} seconds have passed.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga149f387d5f18c469c365147ffbd4dc2c}{eina\+\_\+condition\+\_\+wait()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+condition\+\_\+broadcast@{eina\+\_\+condition\+\_\+broadcast}}
\index{eina\+\_\+condition\+\_\+broadcast@{eina\+\_\+condition\+\_\+broadcast}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+condition\+\_\+broadcast(\+Eina\+\_\+\+Condition $\ast$cond)}{eina_condition_broadcast(Eina_Condition *cond)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+condition\+\_\+broadcast (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Condition $\ast$}]{cond}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga26597941ef6777d759ad4934d3f1655e}{}\label{group__Eina__Lock__Group_ga26597941ef6777d759ad4934d3f1655e}


Signal all threads waiting for a condition. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em cond} & The \#\+Eina\+\_\+\+Condition that signals all its waiting threads.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function sends a signal to all the threads waiting on the condition {\ttfamily cond}. If you know for sure that there is only one thread waiting, use \hyperlink{group__Eina__Lock__Group_ga42cfdc4920e74fd7ba99527a6a99cd7d}{eina\+\_\+condition\+\_\+signal()} instead to gain a little optimization.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga42cfdc4920e74fd7ba99527a6a99cd7d}{eina\+\_\+condition\+\_\+signal()} 
\end{DoxySeeAlso}


Referenced by ecore\+\_\+thread\+\_\+main\+\_\+loop\+\_\+end(), eio\+\_\+memory\+\_\+burst\+\_\+limit\+\_\+set(), evas\+\_\+async\+\_\+events\+\_\+put(), and efl\+::eina\+::condition\+\_\+variable\+::notify\+\_\+all().

\index{Lock@{Lock}!eina\+\_\+condition\+\_\+signal@{eina\+\_\+condition\+\_\+signal}}
\index{eina\+\_\+condition\+\_\+signal@{eina\+\_\+condition\+\_\+signal}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+condition\+\_\+signal(\+Eina\+\_\+\+Condition $\ast$cond)}{eina_condition_signal(Eina_Condition *cond)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+condition\+\_\+signal (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Condition $\ast$}]{cond}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga42cfdc4920e74fd7ba99527a6a99cd7d}{}\label{group__Eina__Lock__Group_ga42cfdc4920e74fd7ba99527a6a99cd7d}


Signal a thread waiting for a condition. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em cond} & The \#\+Eina\+\_\+\+Condition that signals its waiting thread.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function sends a signal to a thread waiting on the condition {\ttfamily cond}. If you do not know for sure that there is only one thread waiting, use \hyperlink{group__Eina__Lock__Group_ga26597941ef6777d759ad4934d3f1655e}{eina\+\_\+condition\+\_\+broadcast()} instead.

\begin{DoxyNote}{Note}
If there is more than one thread waiting on this condition, one of them is signalled, but which one is undefined.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga26597941ef6777d759ad4934d3f1655e}{eina\+\_\+condition\+\_\+broadcast()} 
\end{DoxySeeAlso}
\begin{Desc}
\item[Examples\+: ]\par
\hyperlink{ecore_thread_example_8c-example}{ecore\+\_\+thread\+\_\+example.\+c}.\end{Desc}


Referenced by efl\+::eina\+::condition\+\_\+variable\+::notify\+\_\+one().

\index{Lock@{Lock}!eina\+\_\+rwlock\+\_\+new@{eina\+\_\+rwlock\+\_\+new}}
\index{eina\+\_\+rwlock\+\_\+new@{eina\+\_\+rwlock\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+rwlock\+\_\+new(\+Eina\+\_\+\+R\+W\+Lock $\ast$mutex)}{eina_rwlock_new(Eina_RWLock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+rwlock\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+R\+W\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gafe7bfa849c19aa4738d1918219c2ebb5}{}\label{group__Eina__Lock__Group_gafe7bfa849c19aa4738d1918219c2ebb5}


Initializes a new \#\+Eina\+\_\+\+R\+W\+Lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+R\+W\+Lock to be initialized.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes an \#\+Eina\+\_\+\+R\+W\+Lock with appropriate values. These values are platform dependent as is the structure of the \#\+Eina\+\_\+\+R\+W\+Lock itself.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gac0b244d4fec104f70a1a6157356c43f2}{eina\+\_\+rwlock\+\_\+free()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+rwlock\+\_\+free@{eina\+\_\+rwlock\+\_\+free}}
\index{eina\+\_\+rwlock\+\_\+free@{eina\+\_\+rwlock\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+rwlock\+\_\+free(\+Eina\+\_\+\+R\+W\+Lock $\ast$mutex)}{eina_rwlock_free(Eina_RWLock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+rwlock\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+R\+W\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gac0b244d4fec104f70a1a6157356c43f2}{}\label{group__Eina__Lock__Group_gac0b244d4fec104f70a1a6157356c43f2}


Deallocates an \#\+Eina\+\_\+\+R\+W\+Lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+R\+W\+Lock structure to be deallocated.\\
\hline
\end{DoxyParams}
This function deallocates an \#\+Eina\+\_\+\+R\+W\+Lock and does any platform dependent cleanup that is required.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gafe7bfa849c19aa4738d1918219c2ebb5}{eina\+\_\+rwlock\+\_\+new()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+rwlock\+\_\+take\+\_\+read@{eina\+\_\+rwlock\+\_\+take\+\_\+read}}
\index{eina\+\_\+rwlock\+\_\+take\+\_\+read@{eina\+\_\+rwlock\+\_\+take\+\_\+read}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+rwlock\+\_\+take\+\_\+read(\+Eina\+\_\+\+R\+W\+Lock $\ast$mutex)}{eina_rwlock_take_read(Eina_RWLock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+rwlock\+\_\+take\+\_\+read (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+R\+W\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga4bfe2c4dabf66d02481e36168d409cd9}{}\label{group__Eina__Lock__Group_ga4bfe2c4dabf66d02481e36168d409cd9}


Attempts to take a read lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+R\+W\+Lock to take.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} on failure.
\end{DoxyReturn}
This function attempts to gain a read lock on the indicated \#\+Eina\+\_\+\+R\+W\+Lock. If the \#\+Eina\+\_\+\+R\+W\+Lock is write locked, this call can be blocked until the lock is released.

\begin{DoxyNote}{Note}
This function never return \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gab3d34ffb8950e66b820a4de5def7bcd4}{eina\+\_\+rwlock\+\_\+release()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+rwlock\+\_\+take\+\_\+write@{eina\+\_\+rwlock\+\_\+take\+\_\+write}}
\index{eina\+\_\+rwlock\+\_\+take\+\_\+write@{eina\+\_\+rwlock\+\_\+take\+\_\+write}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+rwlock\+\_\+take\+\_\+write(\+Eina\+\_\+\+R\+W\+Lock $\ast$mutex)}{eina_rwlock_take_write(Eina_RWLock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+rwlock\+\_\+take\+\_\+write (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+R\+W\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gae9fa682cffd225320e1c07fe644f034e}{}\label{group__Eina__Lock__Group_gae9fa682cffd225320e1c07fe644f034e}


Attempts to take a write lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+R\+W\+Lock to take.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} on failure.
\end{DoxyReturn}
This function attempts to gain a write lock on the indicated \#\+Eina\+\_\+\+R\+W\+Lock. If the \#\+Eina\+\_\+\+R\+W\+Lock is locked for reading or writing, this call can be blocked until the lock is released.

\begin{DoxyNote}{Note}
This function never return \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gab3d34ffb8950e66b820a4de5def7bcd4}{eina\+\_\+rwlock\+\_\+release()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+rwlock\+\_\+release@{eina\+\_\+rwlock\+\_\+release}}
\index{eina\+\_\+rwlock\+\_\+release@{eina\+\_\+rwlock\+\_\+release}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+rwlock\+\_\+release(\+Eina\+\_\+\+R\+W\+Lock $\ast$mutex)}{eina_rwlock_release(Eina_RWLock *mutex)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+rwlock\+\_\+release (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+R\+W\+Lock $\ast$}]{mutex}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gab3d34ffb8950e66b820a4de5def7bcd4}{}\label{group__Eina__Lock__Group_gab3d34ffb8950e66b820a4de5def7bcd4}


Releases a lock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em mutex} & The \#\+Eina\+\_\+\+R\+W\+Lock to release.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success. If it fails, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} is returned.
\end{DoxyReturn}
This function releases the lock on the indicated \#\+Eina\+\_\+\+R\+W\+Lock.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga4bfe2c4dabf66d02481e36168d409cd9}{eina\+\_\+rwlock\+\_\+take\+\_\+read()} 

\hyperlink{group__Eina__Lock__Group_gae9fa682cffd225320e1c07fe644f034e}{eina\+\_\+rwlock\+\_\+take\+\_\+write()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+tls\+\_\+new@{eina\+\_\+tls\+\_\+new}}
\index{eina\+\_\+tls\+\_\+new@{eina\+\_\+tls\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+tls\+\_\+new(\+Eina\+\_\+\+T\+L\+S $\ast$key)}{eina_tls_new(Eina_TLS *key)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+tls\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+T\+LS $\ast$}]{key}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga300882739bb49270e52a62164a05276e}{}\label{group__Eina__Lock__Group_ga300882739bb49270e52a62164a05276e}


Initializes a new \#\+Eina\+\_\+\+T\+LS, or thread level storage, to store thread specific data. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & The \#\+Eina\+\_\+\+T\+LS to be initialized.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes an \#\+Eina\+\_\+\+T\+LS with {\ttfamily key} but does not set a callback to deallocate {\ttfamily key} when the thread exits. The implementation is platform dependent as is the structure of the \#\+Eina\+\_\+\+T\+LS itself.

\begin{DoxyNote}{Note}
use \hyperlink{group__Eina__Lock__Group_gae128d753144bc09bdfc9e23b05f7ad90}{eina\+\_\+tls\+\_\+cb\+\_\+new()} instead to set a callback for deallocating {\ttfamily key}.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gae128d753144bc09bdfc9e23b05f7ad90}{eina\+\_\+tls\+\_\+cb\+\_\+new()} 

\hyperlink{group__Eina__Lock__Group_ga6f9d5d1a0929b9cc5f1559fca41c9c1a}{eina\+\_\+tls\+\_\+free()} 
\end{DoxySeeAlso}


Referenced by evas\+\_\+gl\+\_\+new().

\index{Lock@{Lock}!eina\+\_\+tls\+\_\+cb\+\_\+new@{eina\+\_\+tls\+\_\+cb\+\_\+new}}
\index{eina\+\_\+tls\+\_\+cb\+\_\+new@{eina\+\_\+tls\+\_\+cb\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+tls\+\_\+cb\+\_\+new(\+Eina\+\_\+\+T\+L\+S $\ast$key, Eina\+\_\+\+T\+L\+S\+\_\+\+Delete\+\_\+\+Cb delete\+\_\+cb)}{eina_tls_cb_new(Eina_TLS *key, Eina_TLS_Delete_Cb delete_cb)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+tls\+\_\+cb\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+T\+LS $\ast$}]{key, }
\item[{{\bf Eina\+\_\+\+T\+L\+S\+\_\+\+Delete\+\_\+\+Cb}}]{delete\+\_\+cb}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gae128d753144bc09bdfc9e23b05f7ad90}{}\label{group__Eina__Lock__Group_gae128d753144bc09bdfc9e23b05f7ad90}


Initializes a new \#\+Eina\+\_\+\+T\+LS, or thread level storage, to store thread specific data. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & The \#\+Eina\+\_\+\+T\+LS to be initialized. \\
\hline
\mbox{\tt in}  & {\em delete\+\_\+cb} & A pointer to a function that deallocates {\ttfamily key}.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes an \#\+Eina\+\_\+\+T\+LS with {\ttfamily key} and sets a callback to deallocate {\ttfamily key} when the thread exits. The implementation is platform dependent as is the structure of the \#\+Eina\+\_\+\+T\+LS itself.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga300882739bb49270e52a62164a05276e}{eina\+\_\+tls\+\_\+new()} 

\hyperlink{group__Eina__Lock__Group_ga6f9d5d1a0929b9cc5f1559fca41c9c1a}{eina\+\_\+tls\+\_\+free()} 
\end{DoxySeeAlso}


Referenced by eo\+\_\+init().

\index{Lock@{Lock}!eina\+\_\+tls\+\_\+free@{eina\+\_\+tls\+\_\+free}}
\index{eina\+\_\+tls\+\_\+free@{eina\+\_\+tls\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+tls\+\_\+free(\+Eina\+\_\+\+T\+L\+S key)}{eina_tls_free(Eina_TLS key)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+tls\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+T\+LS}]{key}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga6f9d5d1a0929b9cc5f1559fca41c9c1a}{}\label{group__Eina__Lock__Group_ga6f9d5d1a0929b9cc5f1559fca41c9c1a}


Frees an allocated \#\+Eina\+\_\+\+T\+LS. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & The \#\+Eina\+\_\+\+T\+LS to be freed.\\
\hline
\end{DoxyParams}
This function frees the \#\+Eina\+\_\+\+T\+LS {\ttfamily key}. The implementation is platform dependent.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga300882739bb49270e52a62164a05276e}{eina\+\_\+tls\+\_\+new()} 

\hyperlink{group__Eina__Lock__Group_gae128d753144bc09bdfc9e23b05f7ad90}{eina\+\_\+tls\+\_\+cb\+\_\+new()} 
\end{DoxySeeAlso}


Referenced by eo\+\_\+shutdown().

\index{Lock@{Lock}!eina\+\_\+tls\+\_\+get@{eina\+\_\+tls\+\_\+get}}
\index{eina\+\_\+tls\+\_\+get@{eina\+\_\+tls\+\_\+get}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+tls\+\_\+get(\+Eina\+\_\+\+T\+L\+S key)}{eina_tls_get(Eina_TLS key)}}]{\setlength{\rightskip}{0pt plus 5cm}static void$\ast$ eina\+\_\+tls\+\_\+get (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+T\+LS}]{key}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga90d151fea86045136cefee074924f369}{}\label{group__Eina__Lock__Group_ga90d151fea86045136cefee074924f369}


Gets the value in \#\+Eina\+\_\+\+T\+LS for this thread. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & The \#\+Eina\+\_\+\+T\+LS to be retrieved.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
A pointer to the data associated with {\ttfamily key}.
\end{DoxyReturn}
This function gets a pointer to the data associated with \#\+Eina\+\_\+\+T\+LS {\ttfamily key} for this thread. The implementation is platform dependent.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gaf8c9890f52c058aa8cab1da3a109c26a}{eina\+\_\+tls\+\_\+set()} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+error\+\_\+get(), evas\+\_\+gl\+\_\+current\+\_\+evas\+\_\+gl\+\_\+get(), and evas\+\_\+gl\+\_\+free().

\index{Lock@{Lock}!eina\+\_\+tls\+\_\+set@{eina\+\_\+tls\+\_\+set}}
\index{eina\+\_\+tls\+\_\+set@{eina\+\_\+tls\+\_\+set}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+tls\+\_\+set(\+Eina\+\_\+\+T\+L\+S key, const void $\ast$data)}{eina_tls_set(Eina_TLS key, const void *data)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+tls\+\_\+set (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+T\+LS}]{key, }
\item[{const void $\ast$}]{data}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gaf8c9890f52c058aa8cab1da3a109c26a}{}\label{group__Eina__Lock__Group_gaf8c9890f52c058aa8cab1da3a109c26a}


Sets the value in Eina\+\_\+\+T\+LS for this thread. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em key} & The \#\+Eina\+\_\+\+T\+LS to be set. \\
\hline
\mbox{\tt in}  & {\em data} & A pointer to the data to be stored.\\
\hline
\end{DoxyParams}
This function sets the value associated with {\ttfamily key} to the pointer to the data {\ttfamily data}. The implementation is platform dependent.

\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga90d151fea86045136cefee074924f369}{eina\+\_\+tls\+\_\+get()} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+error\+\_\+set(), evas\+\_\+gl\+\_\+free(), evas\+\_\+gl\+\_\+make\+\_\+current(), and evas\+\_\+gl\+\_\+new().

\index{Lock@{Lock}!eina\+\_\+semaphore\+\_\+new@{eina\+\_\+semaphore\+\_\+new}}
\index{eina\+\_\+semaphore\+\_\+new@{eina\+\_\+semaphore\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+semaphore\+\_\+new(\+Eina\+\_\+\+Semaphore $\ast$sem, int count\+\_\+init)}{eina_semaphore_new(Eina_Semaphore *sem, int count_init)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+semaphore\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Semaphore $\ast$}]{sem, }
\item[{int}]{count\+\_\+init}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga093fddb63d97504084f49dd36df65fd0}{}\label{group__Eina__Lock__Group_ga093fddb63d97504084f49dd36df65fd0}


Initializes a new \#\+Eina\+\_\+\+Semaphore. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em sem} & The \#\+Eina\+\_\+\+Semaphore to be initialized. \\
\hline
\mbox{\tt in}  & {\em count\+\_\+init} & Indicates the initial count of threads waiting on this semaphore.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes an unnamed \#\+Eina\+\_\+\+Semaphore with appropriate values. These values are platform dependent.

\begin{DoxyNote}{Note}
Semaphores are not avialable on the Win\+CE platform.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga3ed968965c79524a43f6efea20459d49}{eina\+\_\+semaphore\+\_\+free()} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+thread\+\_\+queue\+\_\+new().

\index{Lock@{Lock}!eina\+\_\+semaphore\+\_\+free@{eina\+\_\+semaphore\+\_\+free}}
\index{eina\+\_\+semaphore\+\_\+free@{eina\+\_\+semaphore\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+semaphore\+\_\+free(\+Eina\+\_\+\+Semaphore $\ast$sem)}{eina_semaphore_free(Eina_Semaphore *sem)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+semaphore\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Semaphore $\ast$}]{sem}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga3ed968965c79524a43f6efea20459d49}{}\label{group__Eina__Lock__Group_ga3ed968965c79524a43f6efea20459d49}


Frees an allocated \#\+Eina\+\_\+\+Semaphore. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em sem} & The \#\+Eina\+\_\+\+Semaphore to be freed.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function frees the \#\+Eina\+\_\+\+Semaphore {\ttfamily sem}. The implementation is platform dependent.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga093fddb63d97504084f49dd36df65fd0}{eina\+\_\+semaphore\+\_\+new()} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+thread\+\_\+queue\+\_\+free().

\index{Lock@{Lock}!eina\+\_\+semaphore\+\_\+lock@{eina\+\_\+semaphore\+\_\+lock}}
\index{eina\+\_\+semaphore\+\_\+lock@{eina\+\_\+semaphore\+\_\+lock}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+semaphore\+\_\+lock(\+Eina\+\_\+\+Semaphore $\ast$sem)}{eina_semaphore_lock(Eina_Semaphore *sem)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+semaphore\+\_\+lock (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Semaphore $\ast$}]{sem}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga4b1a668ea5e49bb309f9b8c2b983b83c}{}\label{group__Eina__Lock__Group_ga4b1a668ea5e49bb309f9b8c2b983b83c}


Gets a lock on an \#\+Eina\+\_\+\+Semaphore. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em sem} & The \#\+Eina\+\_\+\+Semaphore to lock.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function locks the \#\+Eina\+\_\+\+Semaphore {\ttfamily sem}. The implementation is platform dependent.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gaf0b5612096cedc1d8a80d0fe43c42c43}{eina\+\_\+semaphore\+\_\+release()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+semaphore\+\_\+release@{eina\+\_\+semaphore\+\_\+release}}
\index{eina\+\_\+semaphore\+\_\+release@{eina\+\_\+semaphore\+\_\+release}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+semaphore\+\_\+release(\+Eina\+\_\+\+Semaphore $\ast$sem, int count\+\_\+release)}{eina_semaphore_release(Eina_Semaphore *sem, int count_release)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+semaphore\+\_\+release (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Semaphore $\ast$}]{sem, }
\item[{int}]{count\+\_\+release}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gaf0b5612096cedc1d8a80d0fe43c42c43}{}\label{group__Eina__Lock__Group_gaf0b5612096cedc1d8a80d0fe43c42c43}


Releases a lock on an \#\+Eina\+\_\+\+Semaphore. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em sem} & The \#\+Eina\+\_\+\+Semaphore to release. \\
\hline
\mbox{\tt in}  & {\em count\+\_\+release} & Not used.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function releases a lock on the \#\+Eina\+\_\+\+Semaphore {\ttfamily sem}. The implementation is platform dependent.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga4b1a668ea5e49bb309f9b8c2b983b83c}{eina\+\_\+semaphore\+\_\+lock()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+barrier\+\_\+new@{eina\+\_\+barrier\+\_\+new}}
\index{eina\+\_\+barrier\+\_\+new@{eina\+\_\+barrier\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+barrier\+\_\+new(\+Eina\+\_\+\+Barrier $\ast$barrier, int needed)}{eina_barrier_new(Eina_Barrier *barrier, int needed)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+barrier\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Barrier $\ast$}]{barrier, }
\item[{int}]{needed}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga86dd1d3f5b8ae9ac27de7976910a5bb2}{}\label{group__Eina__Lock__Group_ga86dd1d3f5b8ae9ac27de7976910a5bb2}


Initializes a new \#\+Eina\+\_\+\+Barrier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em barrier} & The \#\+Eina\+\_\+\+Barrier to be initialized. \\
\hline
\mbox{\tt in}  & {\em needed} & The number of thread waits that causes this barrier to be reset.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes a new \#\+Eina\+\_\+\+Barrier. It sets the {\ttfamily needed} flag to the value of {\ttfamily needed}, sets the barrier\textquotesingle{}s {\ttfamily count} member to 0 and creates new \#\+Eina\+\_\+\+Lock and \#\+Eina\+\_\+\+Condition objects for the barrier.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gafe6f7125b084e0b54f3b43e9289b18a0}{eina\+\_\+barrier\+\_\+free()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+barrier\+\_\+free@{eina\+\_\+barrier\+\_\+free}}
\index{eina\+\_\+barrier\+\_\+free@{eina\+\_\+barrier\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+barrier\+\_\+free(\+Eina\+\_\+\+Barrier $\ast$barrier)}{eina_barrier_free(Eina_Barrier *barrier)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+barrier\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Barrier $\ast$}]{barrier}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gafe6f7125b084e0b54f3b43e9289b18a0}{}\label{group__Eina__Lock__Group_gafe6f7125b084e0b54f3b43e9289b18a0}


Frees an allocated \#\+Eina\+\_\+\+Barrier. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em barrier} & The \#\+Eina\+\_\+\+Barrier to be freed.\\
\hline
\end{DoxyParams}
This function frees the \#\+Eina\+\_\+\+Barrier {\ttfamily barrier}.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga86dd1d3f5b8ae9ac27de7976910a5bb2}{eina\+\_\+barrier\+\_\+new()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+barrier\+\_\+wait@{eina\+\_\+barrier\+\_\+wait}}
\index{eina\+\_\+barrier\+\_\+wait@{eina\+\_\+barrier\+\_\+wait}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+barrier\+\_\+wait(\+Eina\+\_\+\+Barrier $\ast$barrier)}{eina_barrier_wait(Eina_Barrier *barrier)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+barrier\+\_\+wait (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Barrier $\ast$}]{barrier}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gab3a1febe7dc4e0a2f62270dc2602209e}{}\label{group__Eina__Lock__Group_gab3a1febe7dc4e0a2f62270dc2602209e}


Increments the count of threads that are waiting on {\ttfamily barrier}. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em barrier} & The \#\+Eina\+\_\+\+Barrier to be incremented.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, else \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
When the count of threads reaches the {\ttfamily needed} value for the barrier, all waiting threads are notified via \hyperlink{group__Eina__Lock__Group_ga26597941ef6777d759ad4934d3f1655e}{eina\+\_\+condition\+\_\+broadcast()}. \index{Lock@{Lock}!eina\+\_\+spinlock\+\_\+new@{eina\+\_\+spinlock\+\_\+new}}
\index{eina\+\_\+spinlock\+\_\+new@{eina\+\_\+spinlock\+\_\+new}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+spinlock\+\_\+new(\+Eina\+\_\+\+Spinlock $\ast$spinlock)}{eina_spinlock_new(Eina_Spinlock *spinlock)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Bool} eina\+\_\+spinlock\+\_\+new (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Spinlock $\ast$}]{spinlock}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga5f4b36220ae88623031cb0e9bf5de290}{}\label{group__Eina__Lock__Group_ga5f4b36220ae88623031cb0e9bf5de290}


Initializes a new \#\+Eina\+\_\+\+Spinlock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em spinlock} & The \#\+Eina\+\_\+\+Spinlock to be initialized.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{E\+I\+N\+A\+\_\+\+T\+R\+UE} on success, \hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{E\+I\+N\+A\+\_\+\+F\+A\+L\+SE} otherwise.
\end{DoxyReturn}
This function initializes a new \#\+Eina\+\_\+\+Spinlock, if spinlocks are available. If spinlocks are not avialable, it creates a new \#\+Eina\+\_\+\+Lock.

\begin{DoxyNote}{Note}
Spinlocks are only implemented on the P\+O\+S\+IX platform and are only available if \#\+E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+P\+O\+S\+I\+X\+\_\+\+S\+P\+I\+N\+L\+O\+CK is defined. you get a new \#\+Eina\+\_\+\+Lock on All other platforms.
\end{DoxyNote}
\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gac2593032eadc7b1e03c0980f2dedb7ca}{eina\+\_\+spinlock\+\_\+free()} 
\end{DoxySeeAlso}


Referenced by eina\+\_\+thread\+\_\+queue\+\_\+new(), eio\+\_\+init(), eo\+\_\+class\+\_\+new(), eo\+\_\+init(), and evas\+\_\+new().

\index{Lock@{Lock}!eina\+\_\+spinlock\+\_\+take@{eina\+\_\+spinlock\+\_\+take}}
\index{eina\+\_\+spinlock\+\_\+take@{eina\+\_\+spinlock\+\_\+take}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+spinlock\+\_\+take(\+Eina\+\_\+\+Spinlock $\ast$spinlock)}{eina_spinlock_take(Eina_Spinlock *spinlock)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+spinlock\+\_\+take (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Spinlock $\ast$}]{spinlock}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gaf9556624e5c6db1a66c20615c523efb5}{}\label{group__Eina__Lock__Group_gaf9556624e5c6db1a66c20615c523efb5}


Attempts to take a spinlock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em spinlock} & The \#\+Eina\+\_\+\+Spinlock to take.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success. If the operation fails because a deadlock condition exists, it returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}. If some other condition causes the take to fail, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} is returned.
\end{DoxyReturn}
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 \hyperlink{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}{eina\+\_\+spinlock\+\_\+take\+\_\+try()} if you don\textquotesingle{}t need to block.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}{eina\+\_\+spinlock\+\_\+take\+\_\+try()} 

\hyperlink{group__Eina__Lock__Group_ga7143ee35b9894e80578753485284256c}{eina\+\_\+spinlock\+\_\+release()} 
\end{DoxySeeAlso}


Referenced by eet\+\_\+dictionary\+\_\+count(), eet\+\_\+dictionary\+\_\+string\+\_\+check(), eina\+\_\+stringshare\+\_\+add\+\_\+length(), eina\+\_\+stringshare\+\_\+del(), eina\+\_\+stringshare\+\_\+ref(), eina\+\_\+thread\+\_\+queue\+\_\+pending\+\_\+get(), eina\+\_\+thread\+\_\+queue\+\_\+poll(), eina\+\_\+thread\+\_\+queue\+\_\+send(), eina\+\_\+thread\+\_\+queue\+\_\+wait(), eo\+\_\+class\+\_\+new(), evas\+\_\+async\+\_\+events\+\_\+fd\+\_\+get(), evas\+\_\+async\+\_\+events\+\_\+put(), and evas\+\_\+render\+\_\+updates\+\_\+free().

\index{Lock@{Lock}!eina\+\_\+spinlock\+\_\+take\+\_\+try@{eina\+\_\+spinlock\+\_\+take\+\_\+try}}
\index{eina\+\_\+spinlock\+\_\+take\+\_\+try@{eina\+\_\+spinlock\+\_\+take\+\_\+try}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+spinlock\+\_\+take\+\_\+try(\+Eina\+\_\+\+Spinlock $\ast$spinlock)}{eina_spinlock_take_try(Eina_Spinlock *spinlock)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+spinlock\+\_\+take\+\_\+try (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Spinlock $\ast$}]{spinlock}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}{}\label{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}


Attempts to take a spinlock if possible. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em spinlock} & The \#\+Eina\+\_\+\+Spinlock to take.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success. If the operation fails because a deadlock condition exists, it returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a42ea61e3245e1b9f1db5ea63615e6e67}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+D\+E\+A\+D\+L\+O\+CK}. If some other condition causes the take to fail, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} is returned.
\end{DoxyReturn}
This function attempts to gain a lock on the indicated \#\+Eina\+\_\+\+Spinlock. Identical to \hyperlink{group__Eina__Lock__Group_ga2ad27b83cf8562a41fe67557d8d2d753}{eina\+\_\+lock\+\_\+take()}, but returns immediately if the lock is already taken.

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}{eina\+\_\+spinlock\+\_\+take\+\_\+try()} 

\hyperlink{group__Eina__Lock__Group_ga7143ee35b9894e80578753485284256c}{eina\+\_\+spinlock\+\_\+release()} 
\end{DoxySeeAlso}
\index{Lock@{Lock}!eina\+\_\+spinlock\+\_\+release@{eina\+\_\+spinlock\+\_\+release}}
\index{eina\+\_\+spinlock\+\_\+release@{eina\+\_\+spinlock\+\_\+release}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+spinlock\+\_\+release(\+Eina\+\_\+\+Spinlock $\ast$spinlock)}{eina_spinlock_release(Eina_Spinlock *spinlock)}}]{\setlength{\rightskip}{0pt plus 5cm}static {\bf Eina\+\_\+\+Lock\+\_\+\+Result} eina\+\_\+spinlock\+\_\+release (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Spinlock $\ast$}]{spinlock}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_ga7143ee35b9894e80578753485284256c}{}\label{group__Eina__Lock__Group_ga7143ee35b9894e80578753485284256c}


Releases a spinlock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em spinlock} & The \#\+Eina\+\_\+\+Spinlock to release.\\
\hline
\end{DoxyParams}
\begin{DoxyReturn}{Returns}
Returns \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729aebeef2702bf7645b094e48bc79705b99}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+S\+U\+C\+C\+E\+ED} on success, \hyperlink{group__Eina__Lock__Group_ggacba5cc92b99189a86e3620c92836e729a8b4d357ca18a463b01f789b24c8eb3b9}{E\+I\+N\+A\+\_\+\+L\+O\+C\+K\+\_\+\+F\+A\+IL} otherwise.
\end{DoxyReturn}
This function will release the lock on the indicated \#\+Eina\+\_\+\+Spinlock. If successful, and {\ttfamily E\+I\+N\+A\+\_\+\+H\+A\+V\+E\+\_\+\+D\+E\+B\+U\+G\+\_\+\+T\+H\+R\+E\+A\+DS} is defined, {\ttfamily mutex} is updated and information about the locking process is removed (e.\+g. thread number and backtrace for P\+O\+S\+IX).

\begin{DoxySeeAlso}{See also}
\hyperlink{group__Eina__Lock__Group_gaf9556624e5c6db1a66c20615c523efb5}{eina\+\_\+spinlock\+\_\+take()} 

\hyperlink{group__Eina__Lock__Group_ga8e3592cdc708ac984f0caabc236d3f2e}{eina\+\_\+spinlock\+\_\+take\+\_\+try()} 
\end{DoxySeeAlso}


Referenced by eet\+\_\+dictionary\+\_\+count(), eet\+\_\+dictionary\+\_\+string\+\_\+check(), eina\+\_\+stringshare\+\_\+add\+\_\+length(), eina\+\_\+stringshare\+\_\+del(), eina\+\_\+stringshare\+\_\+ref(), eina\+\_\+thread\+\_\+queue\+\_\+pending\+\_\+get(), eina\+\_\+thread\+\_\+queue\+\_\+poll(), eina\+\_\+thread\+\_\+queue\+\_\+send(), eina\+\_\+thread\+\_\+queue\+\_\+wait(), eo\+\_\+class\+\_\+new(), evas\+\_\+async\+\_\+events\+\_\+fd\+\_\+get(), evas\+\_\+async\+\_\+events\+\_\+put(), and evas\+\_\+render\+\_\+updates\+\_\+free().

\index{Lock@{Lock}!eina\+\_\+spinlock\+\_\+free@{eina\+\_\+spinlock\+\_\+free}}
\index{eina\+\_\+spinlock\+\_\+free@{eina\+\_\+spinlock\+\_\+free}!Lock@{Lock}}
\subsubsection[{\texorpdfstring{eina\+\_\+spinlock\+\_\+free(\+Eina\+\_\+\+Spinlock $\ast$spinlock)}{eina_spinlock_free(Eina_Spinlock *spinlock)}}]{\setlength{\rightskip}{0pt plus 5cm}static void eina\+\_\+spinlock\+\_\+free (
\begin{DoxyParamCaption}
\item[{Eina\+\_\+\+Spinlock $\ast$}]{spinlock}
\end{DoxyParamCaption}
)\hspace{0.3cm}{\ttfamily [inline]}, {\ttfamily [static]}}\hypertarget{group__Eina__Lock__Group_gac2593032eadc7b1e03c0980f2dedb7ca}{}\label{group__Eina__Lock__Group_gac2593032eadc7b1e03c0980f2dedb7ca}


Deallocates an \#\+Eina\+\_\+\+Spinlock. 


\begin{DoxyParams}[1]{Parameters}
\mbox{\tt in}  & {\em spinlock} & The \#\+Eina\+\_\+\+Spinlock to be deallocated.\\
\hline
\end{DoxyParams}
This function deallocates an \#\+Eina\+\_\+\+Spinlock and does any platform dependent cleanup that is required. 

Referenced by eina\+\_\+thread\+\_\+queue\+\_\+free(), eio\+\_\+shutdown(), eo\+\_\+class\+\_\+name\+\_\+get(), eo\+\_\+class\+\_\+new(), eo\+\_\+shutdown(), and evas\+\_\+free().

