From b22e2a9f33242e1fb69b9811b839fab4a97e1f23 Mon Sep 17 00:00:00 2001 From: =?utf8?q?R=C3=A9mi=20Denis-Courmont?= Date: Sat, 6 Sep 2008 19:23:57 +0300 Subject: [PATCH] Detect unsupported sleep delay at compile time (Currently, <1ms on Linux, and <0 on others) --- include/vlc_mtime.h | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/include/vlc_mtime.h b/include/vlc_mtime.h index c2ad1bea80..324c8eb386 100644 --- a/include/vlc_mtime.h +++ b/include/vlc_mtime.h @@ -69,6 +69,23 @@ 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 + +static +__attribute__((unused)) +__attribute__((noinline)) +__attribute__((error("sorry, cannot sleep for such short a time"))) +void impossible_msleep( mtime_t delay ) +{ + (void) delay; + msleep( VLC_HARD_MIN_SLEEP ); +} + static __attribute__((unused)) __attribute__((noinline)) @@ -77,8 +94,13 @@ void bad_msleep( mtime_t delay ) { msleep( delay ); } + # define msleep( d ) \ - ((__builtin_constant_p(d) && (d < 29000000)) ? bad_msleep(d) : 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))) #endif /***************************************************************************** -- 2.39.2