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

Android: remove polling timer in mwait() and msleep()

parent 22203a58
...@@ -494,34 +494,25 @@ mtime_t mdate (void) ...@@ -494,34 +494,25 @@ mtime_t mdate (void)
#undef mwait #undef mwait
void mwait (mtime_t deadline) void mwait (mtime_t deadline)
{ {
deadline -= mdate (); vlc_mutex_t lock;
if (deadline > 0) vlc_cond_t wait;
msleep (deadline);
vlc_mutex_init (&lock);
vlc_cond_init (&wait);
vlc_mutex_lock (&lock);
mutex_cleanup_push (&lock);
while (!vlc_cond_timedwait (&wait, &lock, deadline));
vlc_cleanup_run ();
vlc_cond_destroy (&wait);
vlc_mutex_destroy (&lock);
} }
#undef msleep #undef msleep
void msleep (mtime_t delay) void msleep (mtime_t delay)
{ {
struct timespec ts = mtime_to_ts (delay); mwait (mdate () + delay);
vlc_testcancel();
for (;;) {
/* FIXME: drift */
struct timespec t = { 0, 10 * 1000 * 1000 };
if (ts.tv_sec <= 0 && t.tv_nsec > ts.tv_nsec)
t.tv_nsec = ts.tv_nsec;
while (nanosleep (&t, &t) == -1) {
vlc_testcancel();
vlc_assert (errno == EINTR);
}
ts.tv_nsec -= 10 * 1000 * 1000;
if (ts.tv_nsec < 0) {
if (--ts.tv_sec < 0)
return;
ts.tv_nsec += 1000 * 1000 * 1000;
}
}
} }
/* cpu */ /* cpu */
......
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