diff options
| author | Marc-André Lureau <marcandre.lureau@gmail.com> | 2009-06-20 16:52:41 +0300 | 
|---|---|---|
| committer | Marc-André Lureau <marcandre.lureau@gmail.com> | 2009-06-20 17:29:34 +0300 | 
| commit | e4d914c945c13d23b131d7ba75fbdd03cb6d0043 (patch) | |
| tree | 19b10b6376a2f28b570d95771363449037f8bfa8 /src | |
| parent | 0955e3d45b6e992308e2d51fcbf28a9f9376f788 (diff) | |
rtclock: fix issues found by Lennart
Diffstat (limited to 'src')
| -rw-r--r-- | src/pulse/context.c | 14 | ||||
| -rw-r--r-- | src/pulse/mainloop.c | 20 | ||||
| -rw-r--r-- | src/pulsecore/core-rtclock.c | 3 | ||||
| -rw-r--r-- | src/tests/mainloop-test.c | 1 | 
4 files changed, 26 insertions, 12 deletions
diff --git a/src/pulse/context.c b/src/pulse/context.c index 0c1810f3..b71659de 100644 --- a/src/pulse/context.c +++ b/src/pulse/context.c @@ -54,6 +54,8 @@  #include <pulse/utf8.h>  #include <pulse/util.h>  #include <pulse/i18n.h> +#include <pulse/mainloop.h> +#include <pulse/timeval.h>  #include <pulsecore/winsock.h>  #include <pulsecore/core-error.h> @@ -1451,6 +1453,9 @@ pa_time_event* pa_context_rttime_new(pa_context *c, pa_usec_t usec, pa_time_even      pa_assert(c);      pa_assert(c->mainloop); +    if (usec == PA_USEC_INVALID) +        return c->mainloop->time_new(c->mainloop, NULL, cb, userdata); +      pa_timeval_rtstore(&tv, usec, c->use_rtclock);      return c->mainloop->time_new(c->mainloop, &tv, cb, userdata); @@ -1462,7 +1467,10 @@ void pa_context_rttime_restart(pa_context *c, pa_time_event *e, pa_usec_t usec)      pa_assert(c);      pa_assert(c->mainloop); -    pa_timeval_rtstore(&tv, usec, c->use_rtclock); - -    c->mainloop->time_restart(e, &tv); +    if (usec == PA_USEC_INVALID) +        c->mainloop->time_restart(e, NULL); +    else { +        pa_timeval_rtstore(&tv, usec, c->use_rtclock); +        c->mainloop->time_restart(e, &tv); +    }  } diff --git a/src/pulse/mainloop.c b/src/pulse/mainloop.c index 1b779468..5d0e0ffc 100644 --- a/src/pulse/mainloop.c +++ b/src/pulse/mainloop.c @@ -319,19 +319,21 @@ static void mainloop_defer_set_destroy(pa_defer_event *e, pa_defer_event_destroy  }  /* Time events */ -static pa_usec_t timeval_load(struct timeval *tv) { +static pa_usec_t timeval_load(const struct timeval *tv) {      pa_bool_t is_rtclock; +    struct timeval ttv;      if (!tv)          return PA_USEC_INVALID; -    is_rtclock = !!(tv->tv_usec & PA_TIMEVAL_RTCLOCK); -    tv->tv_usec &= ~PA_TIMEVAL_RTCLOCK; +    ttv = *tv; +    is_rtclock = !!(ttv.tv_usec & PA_TIMEVAL_RTCLOCK); +    ttv.tv_usec &= ~PA_TIMEVAL_RTCLOCK;      if (!is_rtclock) -        pa_rtclock_from_wallclock(tv); +        pa_rtclock_from_wallclock(&ttv); -    return pa_timeval_load(tv); +    return pa_timeval_load(&ttv);  }  static pa_time_event* mainloop_time_new( @@ -343,13 +345,13 @@ static pa_time_event* mainloop_time_new(      pa_mainloop *m;      pa_time_event *e;      pa_usec_t t; -    struct timeval ttv;      pa_assert(a);      pa_assert(a->userdata);      pa_assert(callback); -    t = timeval_load(tv? ttv = *tv, &ttv : NULL); +    t = timeval_load(tv); +      m = a->userdata;      pa_assert(a == &m->api); @@ -385,12 +387,12 @@ static pa_time_event* mainloop_time_new(  static void mainloop_time_restart(pa_time_event *e, const struct timeval *tv) {      pa_bool_t valid;      pa_usec_t t; -    struct timeval ttv;      pa_assert(e);      pa_assert(!e->dead); -    t = timeval_load(tv? ttv = *tv, &ttv : NULL); +    t = timeval_load(tv); +      valid = (t != PA_USEC_INVALID);      if (e->enabled && !valid) {          pa_assert(e->mainloop->n_enabled_time_events > 0); diff --git a/src/pulsecore/core-rtclock.c b/src/pulsecore/core-rtclock.c index 1fa71c80..a4a70bee 100644 --- a/src/pulsecore/core-rtclock.c +++ b/src/pulsecore/core-rtclock.c @@ -176,6 +176,9 @@ static struct timeval* wallclock_from_rtclock(struct timeval *tv) {  struct timeval* pa_timeval_rtstore(struct timeval *tv, pa_usec_t v, pa_bool_t rtclock) {      pa_assert(tv); +    if (v == PA_USEC_INVALID) +        return NULL; +      pa_timeval_store(tv, v);      if (rtclock) diff --git a/src/tests/mainloop-test.c b/src/tests/mainloop-test.c index 55331d12..3ec6d115 100644 --- a/src/tests/mainloop-test.c +++ b/src/tests/mainloop-test.c @@ -31,6 +31,7 @@  #include <pulse/gccmacro.h>  #include <pulsecore/core-util.h> +#include <pulsecore/core-rtclock.h>  #ifdef GLIB_MAIN_LOOP  | 
