X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=include%2Fvlc_mtime.h;h=f3bb895d42fdbde9294c2c60d378f5889ddaf684;hb=1fcd8954bc872b9d6b338b3d4aa4e0281bf7b94d;hp=c2ad1bea802d8d244e6f34854f2765417d095b9f;hpb=218bc1f9815d90acfd1dc3ac5f2aafd7ac217838;p=vlc diff --git a/include/vlc_mtime.h b/include/vlc_mtime.h index c2ad1bea80..f3bb895d42 100644 --- a/include/vlc_mtime.h +++ b/include/vlc_mtime.h @@ -68,19 +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__ +#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"))) +mtime_t impossible_delay( mtime_t delay ) +{ + (void) delay; + return VLC_HARD_MIN_SLEEP; +} + +static +__attribute__((unused)) +__attribute__((noinline)) +__attribute__((warning("use proper event handling instead of short delay"))) +mtime_t harmful_delay( mtime_t delay ) +{ + return delay; +} + +# 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__((warning("use proper event handling instead"))) -void bad_msleep( mtime_t delay ) +__attribute__((error("deadlines can not be constant"))) +mtime_t impossible_deadline( mtime_t deadline ) { - msleep( delay ); + return deadline; } -# define msleep( d ) \ - ((__builtin_constant_p(d) && (d < 29000000)) ? bad_msleep(d) : msleep(d)) + +# 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 *****************************************************************************/