]> git.sesse.net Git - vlc/blobdiff - src/misc/mtime.c
Qt: actions_manager: Change constructor and inline some functions.
[vlc] / src / misc / mtime.c
index c5b1bc22346a92d9117c76469b2aedc1d7381860..2b27fbf40a05ecd74c17c0c90bb38a744dcbf3bf 100644 (file)
 #   include <mmsystem.h>
 #endif
 
-#if defined( UNDER_CE )
-#   define SleepEx(a,b)  Sleep(a)
-#endif
-
 #if defined(HAVE_SYS_TIME_H)
 #   include <sys/time.h>
 #endif
@@ -354,6 +350,25 @@ void mwait( mtime_t date )
     }
     vlc_testcancel();
 
+#elif defined( __APPLE__ )
+    /* Explicit hack: OSX does not cancel at nanosleep() */
+    vlc_mutex_t lock;
+    vlc_cond_t  wait;
+
+    vlc_mutex_init (&lock);
+    vlc_cond_init (&wait);
+    vlc_mutex_lock (&lock);
+
+    vlc_cleanup_push (vlc_mutex_destroy, &lock);
+    vlc_cleanup_push (vlc_cond_destroy, &wait);
+    vlc_cleanup_push (vlc_mutex_unlock, &lock);
+
+    vlc_cond_timedwait (&wait, &lock, date);
+
+    vlc_cleanup_run ();
+    vlc_cleanup_run ();
+    vlc_cleanup_run ();
+
 #else
     mtime_t delay = date - mdate();
     if( delay > 0 )
@@ -402,7 +417,7 @@ void msleep( mtime_t delay )
 #elif defined( HAVE_KERNEL_OS_H )
     snooze( delay );
 
-#elif defined( WIN32 ) || defined( UNDER_CE )
+#elif defined( WIN32 ) || defined( UNDER_CE ) || defined( __APPLE__ )
     mwait (mdate () + delay);
 
 #elif defined( HAVE_NANOSLEEP )