On Mon, 30 May 2011, Enlightenment SVN wrote:

> Log:
> eina: add eina_condition_timedwait.
>
>
> Author:       cedric
> Date:         2011-05-30 08:24:06 -0700 (Mon, 30 May 2011)
> New Revision: 59819
> Trac:         http://trac.enlightenment.org/e/changeset/59819
>
> Modified:
>  trunk/eina/ChangeLog trunk/eina/src/include/eina_inline_lock_posix.x 
> trunk/eina/src/include/eina_inline_lock_void.x 
> trunk/eina/src/include/eina_inline_lock_win32.x 
> trunk/eina/src/include/eina_inline_lock_wince.x 
> trunk/eina/src/include/eina_lock.h
>
> Modified: trunk/eina/ChangeLog
> ===================================================================
> --- trunk/eina/ChangeLog      2011-05-30 15:18:53 UTC (rev 59818)
> +++ trunk/eina/ChangeLog      2011-05-30 15:24:06 UTC (rev 59819)
> @@ -93,3 +93,7 @@
> 2011-05-24  Cedric Bail
>
>       * Add eina_inlist_sorted_insert.
> +
> +2011-05-30  Cedric Bail
> +
> +     * Add eina_condition_timedwait.
>
> Modified: trunk/eina/src/include/eina_inline_lock_posix.x
> ===================================================================
> --- trunk/eina/src/include/eina_inline_lock_posix.x   2011-05-30 15:18:53 UTC 
> (rev 59818)
> +++ trunk/eina/src/include/eina_inline_lock_posix.x   2011-05-30 15:24:06 UTC 
> (rev 59819)
> @@ -310,10 +310,30 @@
>    assert(cond->lock != NULL);
> #endif
>
> -   return pthread_cond_wait(&(cond->condition), &(cond->lock->mutex)) == 0 ? 
> EINA_TRUE : EINA_FALSE;
> +   return pthread_cond_wait(&(cond->condition),
> +                            &(cond->lock->mutex)) == 0 ? EINA_TRUE : 
> EINA_FALSE;
> }
>
> static inline Eina_Bool
> +eina_condition_timedwait(Eina_Condition *cond, double t)
> +{
> +   struct timespec tv;
> +
> +#ifdef EINA_HAVE_DEBUG_THREADS
> +   assert(_eina_threads_activated);
> +   assert(cond->lock != NULL);
> +#endif
> +
> +   tv.tv_sec = t;
> +   tv.tv_nsec = (t - (double) tv.tv_sec) * 1000000000;
> +
> +   return pthread_cond_timedwait(&(cond->condition),
> +                                 &(cond->lock->mutex),
> +                                 &tv) == 0 ?
> +     EINA_TRUE : EINA_FALSE;
> +}
> +
> +static inline Eina_Bool
> eina_condition_broadcast(Eina_Condition *cond)
> {
> #ifdef EINA_HAVE_DEBUG_THREADS
>
> Modified: trunk/eina/src/include/eina_inline_lock_void.x
> ===================================================================
> --- trunk/eina/src/include/eina_inline_lock_void.x    2011-05-30 15:18:53 UTC 
> (rev 59818)
> +++ trunk/eina/src/include/eina_inline_lock_void.x    2011-05-30 15:24:06 UTC 
> (rev 59819)
> @@ -156,6 +156,12 @@
> }
>
> static inline Eina_Bool
> +eina_condition_timedwait(Eina_Condition *cond EINA_UNUSED, double val)
> +{
> +   return EINA_FALSE;
> +}
> +
> +static inline Eina_Bool
> eina_condition_broadcast(Eina_Condition *cond EINA_UNUSED)
> {
>    return EINA_FALSE;
>
> Modified: trunk/eina/src/include/eina_inline_lock_win32.x
> ===================================================================
> --- trunk/eina/src/include/eina_inline_lock_win32.x   2011-05-30 15:18:53 UTC 
> (rev 59818)
> +++ trunk/eina/src/include/eina_inline_lock_win32.x   2011-05-30 15:24:06 UTC 
> (rev 59819)
> @@ -144,7 +144,7 @@
> }
>
> static inline Eina_Bool
> -eina_condition_wait(Eina_Condition *cond)
> +_eina_condition_internal_timedwait(Eina_Condition *cond, DWORD t)
> {
> #if _WIN32_WINNT >= 0x0600
>    SleepConditionVariableCS(&cond->condition, cond->mutex, INFINITE);

you forgot that case

Vincent

> @@ -162,7 +162,7 @@
>     * semaphore until <pthread_cond_signal> or <pthread_cond_broadcast>
>     * are called by another thread.
>     */
> -   ret = SignalObjectAndWait(cond->mutex, cond->semaphore, INFINITE, FALSE);
> +   ret = SignalObjectAndWait(cond->mutex, cond->semaphore, t, FALSE);
>    if (ret == WAIT_FAILED)
>      return EINA_FALSE;
>
> @@ -187,7 +187,7 @@
>         * This call atomically signals the <waiters_done_> event and waits 
> until
>         * it can acquire the <external_mutex>.  This is required to ensure 
> fairness.
>         */
> -       ret = SignalObjectAndWait(cond->waiters_done, cond->mutex, INFINITE, 
> FALSE);
> +       ret = SignalObjectAndWait(cond->waiters_done, cond->mutex, t, FALSE);
>        if (ret == WAIT_FAILED)
>          return EINA_FALSE;
>     }
> @@ -197,7 +197,7 @@
>         * Always regain the external mutex since that's the guarantee we
>         * give to our callers.
>         */
> -       ret = WaitForSingleObject(cond->mutex, INFINITE);
> +       ret = WaitForSingleObject(cond->mutex, t);
>        if (ret == WAIT_FAILED)
>          return EINA_FALSE;
>     }
> @@ -207,6 +207,18 @@
> }
>
> static inline Eina_Bool
> +eina_condition_timedwait(Eina_Condition *cond, double val)
> +{
> +   _eina_condition_internal_timedwait(cond, val * 1000);
> +}
> +
> +static inline Eina_Bool
> +eina_condition_wait(Eina_Condition *cond)
> +{
> +   _eina_condition_internal_timedwait(cond, INFINITE);
> +}
> +
> +static inline Eina_Bool
> eina_condition_broadcast(Eina_Condition *cond)
> {
> #if _WIN32_WINNT >= 0x0600
>
> Modified: trunk/eina/src/include/eina_inline_lock_wince.x
> ===================================================================
> --- trunk/eina/src/include/eina_inline_lock_wince.x   2011-05-30 15:18:53 UTC 
> (rev 59818)
> +++ trunk/eina/src/include/eina_inline_lock_wince.x   2011-05-30 15:24:06 UTC 
> (rev 59819)
> @@ -96,6 +96,12 @@
> }
>
> static inline Eina_Bool
> +eina_condition_timedwait(Eina_Condition *cond, double t)
> +{
> +   return EINA_FALSE;
> +}
> +
> +static inline Eina_Bool
> eina_condition_broadcast(Eina_Condition *cond)
> {
>    return EINA_FALSE;
>
> Modified: trunk/eina/src/include/eina_lock.h
> ===================================================================
> --- trunk/eina/src/include/eina_lock.h        2011-05-30 15:18:53 UTC (rev 
> 59818)
> +++ trunk/eina/src/include/eina_lock.h        2011-05-30 15:24:06 UTC (rev 
> 59819)
> @@ -63,6 +63,7 @@
> static inline Eina_Bool eina_condition_new(Eina_Condition *cond, Eina_Lock 
> *mutex);
> static inline void eina_condition_free(Eina_Condition *cond);
> static inline Eina_Bool eina_condition_wait(Eina_Condition *cond);
> +static inline Eina_Bool eina_condition_timedwait(Eina_Condition *cond, 
> double t);
> static inline Eina_Bool eina_condition_broadcast(Eina_Condition *cond);
> static inline Eina_Bool eina_condition_signal(Eina_Condition *cond);
>
>
>
> ------------------------------------------------------------------------------
> vRanger cuts backup time in half-while increasing security.
> With the market-leading solution for virtual backup and recovery,
> you get blazing-fast, flexible, and affordable data protection.
> Download your free trial now.
> http://p.sf.net/sfu/quest-d2dcopy1
> _______________________________________________
> enlightenment-svn mailing list
> enlightenment-...@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/enlightenment-svn
>
>

------------------------------------------------------------------------------
vRanger cuts backup time in half-while increasing security.
With the market-leading solution for virtual backup and recovery, 
you get blazing-fast, flexible, and affordable data protection.
Download your free trial now. 
http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to