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