X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_mtime.h;h=f3bb895d42fdbde9294c2c60d378f5889ddaf684;hb=a1aca436efc0cb60dd5ab4aea77a3c944a6adbea;hp=324c8eb38668717cdf1ee3adb7a45020f96d5e88;hpb=b22e2a9f33242e1fb69b9811b839fab4a97e1f23;p=vlc diff --git a/include/vlc_mtime.h b/include/vlc_mtime.h index 324c8eb386..f3bb895d42 100644 --- a/include/vlc_mtime.h +++ b/include/vlc_mtime.h @@ -68,41 +68,57 @@ VLC_EXPORT( void, mwait, ( mtime_t date ) ); VLC_EXPORT( void, msleep, ( mtime_t delay ) ); VLC_EXPORT( char *, secstotimestr, ( char *psz_buffer, int secs ) ); -#ifdef __GNUC__ -# ifdef __linux__ -# define VLC_HARD_MIN_SLEEP 1000 /* Linux has 100, 250, 300 or 1000Hz */ -# else -# define VLC_HARD_MIN_SLEEP 0 -# endif -#define VLC_SOFT_MIN_SLEEP 29000000 +#if defined (__GNUC__) && defined (__linux__) +# define VLC_HARD_MIN_SLEEP 1000 /* Linux has 100, 250, 300 or 1000Hz */ +# define VLC_SOFT_MIN_SLEEP 9000000 static __attribute__((unused)) __attribute__((noinline)) __attribute__((error("sorry, cannot sleep for such short a time"))) -void impossible_msleep( mtime_t delay ) +mtime_t impossible_delay( mtime_t delay ) { (void) delay; - msleep( VLC_HARD_MIN_SLEEP ); + return VLC_HARD_MIN_SLEEP; } static __attribute__((unused)) __attribute__((noinline)) -__attribute__((warning("use proper event handling instead"))) -void bad_msleep( mtime_t delay ) +__attribute__((warning("use proper event handling instead of short delay"))) +mtime_t harmful_delay( mtime_t delay ) { - msleep( delay ); + return delay; } -# define msleep( d ) \ - (__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \ - ? impossible_msleep(d) \ - : (__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \ - ? bad_msleep(d) \ - : msleep(d))) +# define check_delay( d ) \ + ((__builtin_constant_p(d < VLC_HARD_MIN_SLEEP) \ + && (d < VLC_HARD_MIN_SLEEP)) \ + ? impossible_delay(d) \ + : ((__builtin_constant_p(d < VLC_SOFT_MIN_SLEEP) \ + && (d < VLC_SOFT_MIN_SLEEP)) \ + ? harmful_delay(d) \ + : d)) + +static +__attribute__((unused)) +__attribute__((noinline)) +__attribute__((error("deadlines can not be constant"))) +mtime_t impossible_deadline( mtime_t deadline ) +{ + return deadline; +} + +# define check_deadline( d ) \ + (__builtin_constant_p(d) ? impossible_deadline(d) : d) +#else +# define check_delay(d) (d) +# define check_deadline(d) (d) #endif +#define msleep(d) msleep(check_delay(d)) +#define mwait(d) mwait(check_deadline(d)) + /***************************************************************************** * date_t: date incrementation without long-term rounding errors *****************************************************************************/