Commit a056e64e authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

mwait/mdate: remove cached_time - not thread-safe

Could go badly wrong on platforms without atomic 64-bits access
parent e2b38c96
...@@ -172,8 +172,6 @@ static inline unsigned mprec( void ) ...@@ -172,8 +172,6 @@ static inline unsigned mprec( void )
#endif #endif
} }
static volatile mtime_t cached_time = 0;
/** /**
* Return high precision date * Return high precision date
* *
...@@ -313,7 +311,7 @@ mtime_t mdate( void ) ...@@ -313,7 +311,7 @@ mtime_t mdate( void )
res = (mtime_t) tv_date.tv_sec * 1000000 + (mtime_t) tv_date.tv_usec; res = (mtime_t) tv_date.tv_sec * 1000000 + (mtime_t) tv_date.tv_usec;
#endif #endif
return cached_time = res; return res;
} }
/** /**
...@@ -327,9 +325,8 @@ mtime_t mdate( void ) ...@@ -327,9 +325,8 @@ mtime_t mdate( void )
void mwait( mtime_t date ) void mwait( mtime_t date )
{ {
/* If the deadline is already elapsed, or within the clock precision, /* If the deadline is already elapsed, or within the clock precision,
* do not even bother the clock. */ * do not even bother the system timer. */
if( ( date - cached_time ) < (mtime_t)mprec() ) // OK: mtime_t is signed date -= mprec();
return;
#if 0 && defined (HAVE_CLOCK_NANOSLEEP) #if 0 && defined (HAVE_CLOCK_NANOSLEEP)
lldiv_t d = lldiv( date, 1000000 ); lldiv_t d = lldiv( date, 1000000 );
...@@ -360,8 +357,6 @@ void mwait( mtime_t date ) ...@@ -360,8 +357,6 @@ void mwait( mtime_t date )
*/ */
void msleep( mtime_t delay ) void msleep( mtime_t delay )
{ {
mtime_t earlier = cached_time;
#if defined( HAVE_CLOCK_NANOSLEEP ) #if defined( HAVE_CLOCK_NANOSLEEP )
lldiv_t d = lldiv( delay, 1000000 ); lldiv_t d = lldiv( delay, 1000000 );
struct timespec ts = { d.quot, d.rem * 1000 }; struct timespec ts = { d.quot, d.rem * 1000 };
...@@ -398,10 +393,6 @@ void msleep( mtime_t delay ) ...@@ -398,10 +393,6 @@ void msleep( mtime_t delay )
* or clock_nanosleep() if this is an issue. */ * or clock_nanosleep() if this is an issue. */
select( 0, NULL, NULL, NULL, &tv_delay ); select( 0, NULL, NULL, NULL, &tv_delay );
#endif #endif
earlier += delay;
if( cached_time < earlier )
cached_time = earlier;
} }
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment