mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-10 13:29:58 -05:00
commit
fc33f7ee97
56 changed files with 510 additions and 335 deletions
|
|
@ -23,6 +23,7 @@
|
|||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
|
||||
#include <pulsecore/log.h>
|
||||
|
|
@ -116,14 +117,13 @@ struct AvahiTimeout {
|
|||
void *userdata;
|
||||
};
|
||||
|
||||
static void timeout_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *tv, void *userdata) {
|
||||
AvahiTimeout *t = userdata;
|
||||
static void timeout_callback(pa_mainloop_api*a, pa_time_event* e, const struct timeval *t, void *userdata) {
|
||||
AvahiTimeout *to = userdata;
|
||||
|
||||
pa_assert(a);
|
||||
pa_assert(e);
|
||||
pa_assert(t);
|
||||
|
||||
t->callback(t, t->userdata);
|
||||
to->callback(to, to->userdata);
|
||||
}
|
||||
|
||||
static AvahiTimeout* timeout_new(const AvahiPoll *api, const struct timeval *tv, AvahiTimeoutCallback callback, void *userdata) {
|
||||
|
|
@ -145,6 +145,7 @@ static AvahiTimeout* timeout_new(const AvahiPoll *api, const struct timeval *tv,
|
|||
}
|
||||
|
||||
static void timeout_update(AvahiTimeout *t, const struct timeval *tv) {
|
||||
|
||||
pa_assert(t);
|
||||
|
||||
if (t->time_event && tv)
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
#include <pulsecore/macro.h>
|
||||
#include <pulsecore/core-error.h>
|
||||
|
||||
#include "rtclock.h"
|
||||
#include "core-rtclock.h"
|
||||
|
||||
pa_usec_t pa_rtclock_age(const struct timeval *tv) {
|
||||
struct timeval now;
|
||||
|
|
@ -122,12 +122,6 @@ void pa_rtclock_hrtimer_enable(void) {
|
|||
#endif
|
||||
}
|
||||
|
||||
pa_usec_t pa_rtclock_usec(void) {
|
||||
struct timeval tv;
|
||||
|
||||
return pa_timeval_load(pa_rtclock_get(&tv));
|
||||
}
|
||||
|
||||
struct timeval* pa_rtclock_from_wallclock(struct timeval *tv) {
|
||||
|
||||
#ifdef HAVE_CLOCK_GETTIME
|
||||
|
|
@ -156,3 +150,41 @@ pa_usec_t pa_timespec_load(const struct timespec *ts) {
|
|||
(pa_usec_t) ts->tv_sec * PA_USEC_PER_SEC +
|
||||
(pa_usec_t) ts->tv_nsec / PA_NSEC_PER_USEC;
|
||||
}
|
||||
|
||||
|
||||
static struct timeval* wallclock_from_rtclock(struct timeval *tv) {
|
||||
|
||||
#ifdef HAVE_CLOCK_GETTIME
|
||||
struct timeval wc_now, rt_now;
|
||||
|
||||
pa_gettimeofday(&wc_now);
|
||||
pa_rtclock_get(&rt_now);
|
||||
|
||||
pa_assert(tv);
|
||||
|
||||
if (pa_timeval_cmp(&rt_now, tv) < 0)
|
||||
pa_timeval_add(&wc_now, pa_timeval_diff(tv, &rt_now));
|
||||
else
|
||||
pa_timeval_sub(&wc_now, pa_timeval_diff(&rt_now, tv));
|
||||
|
||||
*tv = wc_now;
|
||||
#endif
|
||||
|
||||
return 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)
|
||||
tv->tv_usec |= PA_TIMEVAL_RTCLOCK;
|
||||
else
|
||||
wallclock_from_rtclock(tv);
|
||||
|
||||
return tv;
|
||||
}
|
||||
|
|
@ -31,8 +31,6 @@ struct timeval;
|
|||
|
||||
struct timeval *pa_rtclock_get(struct timeval *ts);
|
||||
|
||||
pa_usec_t pa_rtclock_usec(void);
|
||||
|
||||
pa_usec_t pa_rtclock_age(const struct timeval *tv);
|
||||
pa_bool_t pa_rtclock_hrtimer(void);
|
||||
void pa_rtclock_hrtimer_enable(void);
|
||||
|
|
@ -40,8 +38,13 @@ void pa_rtclock_hrtimer_enable(void);
|
|||
/* timer with a resolution better than this are considered high-resolution */
|
||||
#define PA_HRTIMER_THRESHOLD_USEC 10
|
||||
|
||||
/* bit to set in tv.tv_usec to mark that the timeval is in monotonic time */
|
||||
#define PA_TIMEVAL_RTCLOCK (1 << 30)
|
||||
|
||||
struct timeval* pa_rtclock_from_wallclock(struct timeval *tv);
|
||||
|
||||
pa_usec_t pa_timespec_load(const struct timespec *ts);
|
||||
|
||||
struct timeval* pa_timeval_rtstore(struct timeval *tv, pa_usec_t v, pa_bool_t rtclock);
|
||||
|
||||
#endif
|
||||
|
|
@ -47,6 +47,7 @@
|
|||
#include <pulse/util.h>
|
||||
#include <pulse/volume.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
#include <pulse/rtclock.h>
|
||||
|
||||
#include <pulsecore/sink-input.h>
|
||||
#include <pulsecore/sample-util.h>
|
||||
|
|
@ -54,6 +55,7 @@
|
|||
#include <pulsecore/core-subscribe.h>
|
||||
#include <pulsecore/namereg.h>
|
||||
#include <pulsecore/sound-file.h>
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/log.h>
|
||||
#include <pulsecore/core-error.h>
|
||||
|
|
@ -61,11 +63,10 @@
|
|||
|
||||
#include "core-scache.h"
|
||||
|
||||
#define UNLOAD_POLL_TIME 60
|
||||
#define UNLOAD_POLL_TIME (60 * PA_USEC_PER_SEC)
|
||||
|
||||
static void timeout_callback(pa_mainloop_api *m, pa_time_event*e, const struct timeval *tv, void *userdata) {
|
||||
static void timeout_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
|
||||
pa_core *c = userdata;
|
||||
struct timeval ntv;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(c->mainloop == m);
|
||||
|
|
@ -73,9 +74,7 @@ static void timeout_callback(pa_mainloop_api *m, pa_time_event*e, const struct t
|
|||
|
||||
pa_scache_unload_unused(c);
|
||||
|
||||
pa_gettimeofday(&ntv);
|
||||
ntv.tv_sec += UNLOAD_POLL_TIME;
|
||||
m->time_restart(e, &ntv);
|
||||
pa_core_rttime_restart(c, e, pa_rtclock_now() + UNLOAD_POLL_TIME);
|
||||
}
|
||||
|
||||
static void free_entry(pa_scache_entry *e) {
|
||||
|
|
@ -256,12 +255,8 @@ int pa_scache_add_file_lazy(pa_core *c, const char *name, const char *filename,
|
|||
|
||||
pa_proplist_sets(e->proplist, PA_PROP_MEDIA_FILENAME, filename);
|
||||
|
||||
if (!c->scache_auto_unload_event) {
|
||||
struct timeval ntv;
|
||||
pa_gettimeofday(&ntv);
|
||||
ntv.tv_sec += UNLOAD_POLL_TIME;
|
||||
c->scache_auto_unload_event = c->mainloop->time_new(c->mainloop, &ntv, timeout_callback, c);
|
||||
}
|
||||
if (!c->scache_auto_unload_event)
|
||||
c->scache_auto_unload_event = pa_core_rttime_new(c, pa_rtclock_now() + UNLOAD_POLL_TIME, timeout_callback, c);
|
||||
|
||||
if (idx)
|
||||
*idx = e->index;
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include <stdio.h>
|
||||
#include <signal.h>
|
||||
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
|
||||
|
|
@ -35,6 +36,7 @@
|
|||
#include <pulsecore/sink.h>
|
||||
#include <pulsecore/source.h>
|
||||
#include <pulsecore/namereg.h>
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/core-scache.h>
|
||||
#include <pulsecore/core-subscribe.h>
|
||||
|
|
@ -214,7 +216,7 @@ static void core_free(pa_object *o) {
|
|||
pa_xfree(c);
|
||||
}
|
||||
|
||||
static void exit_callback(pa_mainloop_api*m, pa_time_event *e, const struct timeval *tv, void *userdata) {
|
||||
static void exit_callback(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
|
||||
pa_core *c = userdata;
|
||||
pa_assert(c->exit_event == e);
|
||||
|
||||
|
|
@ -229,11 +231,7 @@ void pa_core_check_idle(pa_core *c) {
|
|||
c->exit_idle_time >= 0 &&
|
||||
pa_idxset_size(c->clients) == 0) {
|
||||
|
||||
struct timeval tv;
|
||||
pa_gettimeofday(&tv);
|
||||
tv.tv_sec+= c->exit_idle_time;
|
||||
|
||||
c->exit_event = c->mainloop->time_new(c->mainloop, &tv, exit_callback, c);
|
||||
c->exit_event = pa_core_rttime_new(c, pa_rtclock_now() + c->exit_idle_time * PA_USEC_PER_SEC, exit_callback, c);
|
||||
|
||||
} else if (c->exit_event && pa_idxset_size(c->clients) > 0) {
|
||||
c->mainloop->time_free(c->exit_event);
|
||||
|
|
@ -261,3 +259,21 @@ void pa_core_maybe_vacuum(pa_core *c) {
|
|||
pa_log_debug("Hmm, no streams around, trying to vacuum.");
|
||||
pa_mempool_vacuum(c->mempool);
|
||||
}
|
||||
|
||||
pa_time_event* pa_core_rttime_new(pa_core *c, pa_usec_t usec, pa_time_event_cb_t cb, void *userdata) {
|
||||
struct timeval tv;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(c->mainloop);
|
||||
|
||||
return c->mainloop->time_new(c->mainloop, pa_timeval_rtstore(&tv, usec, TRUE), cb, userdata);
|
||||
}
|
||||
|
||||
void pa_core_rttime_restart(pa_core *c, pa_time_event *e, pa_usec_t usec) {
|
||||
struct timeval tv;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(c->mainloop);
|
||||
|
||||
c->mainloop->time_restart(e, pa_timeval_rtstore(&tv, usec, TRUE));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -183,4 +183,8 @@ int pa_core_exit(pa_core *c, pa_bool_t force, int retval);
|
|||
|
||||
void pa_core_maybe_vacuum(pa_core *c);
|
||||
|
||||
/* wrapper for c->mainloop->time_*() RT time events */
|
||||
pa_time_event* pa_core_rttime_new(pa_core *c, pa_usec_t usec, pa_time_event_cb_t cb, void *userdata);
|
||||
void pa_core_rttime_restart(pa_core *c, pa_time_event *e, pa_usec_t usec);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ pa_dbus_connection* pa_dbus_bus_get(pa_core *c, DBusBusType type, DBusError *err
|
|||
if ((pconn = pa_shared_get(c, prop_name[type])))
|
||||
return pa_dbus_connection_ref(pconn);
|
||||
|
||||
if (!(conn = pa_dbus_wrap_connection_new(c->mainloop, type, error)))
|
||||
if (!(conn = pa_dbus_wrap_connection_new(c->mainloop, TRUE, type, error)))
|
||||
return NULL;
|
||||
|
||||
return dbus_connection_new(c, conn, prop_name[type]);
|
||||
|
|
|
|||
|
|
@ -26,9 +26,11 @@
|
|||
|
||||
#include <stdarg.h>
|
||||
|
||||
#include <pulse/xmalloc.h>
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/log.h>
|
||||
|
||||
|
|
@ -38,6 +40,12 @@ struct pa_dbus_wrap_connection {
|
|||
pa_mainloop_api *mainloop;
|
||||
DBusConnection *connection;
|
||||
pa_defer_event* dispatch_event;
|
||||
pa_bool_t use_rtclock:1;
|
||||
};
|
||||
|
||||
struct timeout_data {
|
||||
pa_dbus_wrap_connection *c;
|
||||
DBusTimeout *timeout;
|
||||
};
|
||||
|
||||
static void dispatch_cb(pa_mainloop_api *ea, pa_defer_event *ev, void *userdata) {
|
||||
|
|
@ -118,16 +126,18 @@ static void handle_io_event(pa_mainloop_api *ea, pa_io_event *e, int fd, pa_io_e
|
|||
}
|
||||
|
||||
/* pa_time_event_cb_t timer event handler */
|
||||
static void handle_time_event(pa_mainloop_api *ea, pa_time_event* e, const struct timeval *tv, void *userdata) {
|
||||
DBusTimeout *timeout = userdata;
|
||||
static void handle_time_event(pa_mainloop_api *ea, pa_time_event* e, const struct timeval *t, void *userdata) {
|
||||
struct timeval tv;
|
||||
struct timeout_data *d = userdata;
|
||||
|
||||
if (dbus_timeout_get_enabled(timeout)) {
|
||||
struct timeval next = *tv;
|
||||
dbus_timeout_handle(timeout);
|
||||
pa_assert(d);
|
||||
pa_assert(d->c);
|
||||
|
||||
if (dbus_timeout_get_enabled(d->timeout)) {
|
||||
dbus_timeout_handle(d->timeout);
|
||||
|
||||
/* restart it for the next scheduled time */
|
||||
pa_timeval_add(&next, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
|
||||
ea->time_restart(e, &next);
|
||||
ea->time_restart(e, pa_timeval_rtstore(&tv, pa_timeval_load(t) + dbus_timeout_get_interval(d->timeout) * PA_USEC_PER_MSEC, d->c->use_rtclock));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -179,11 +189,16 @@ static void toggle_watch(DBusWatch *watch, void *data) {
|
|||
c->mainloop->io_enable(ev, get_watch_flags(watch));
|
||||
}
|
||||
|
||||
static void time_event_destroy_cb(pa_mainloop_api *a, pa_time_event *e, void *userdata) {
|
||||
pa_xfree(userdata);
|
||||
}
|
||||
|
||||
/* DBusAddTimeoutFunction callback for pa mainloop */
|
||||
static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data) {
|
||||
pa_dbus_wrap_connection *c = data;
|
||||
pa_time_event *ev;
|
||||
struct timeval tv;
|
||||
struct timeout_data *d;
|
||||
|
||||
pa_assert(timeout);
|
||||
pa_assert(c);
|
||||
|
|
@ -191,10 +206,11 @@ static dbus_bool_t add_timeout(DBusTimeout *timeout, void *data) {
|
|||
if (!dbus_timeout_get_enabled(timeout))
|
||||
return FALSE;
|
||||
|
||||
pa_gettimeofday(&tv);
|
||||
pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
|
||||
|
||||
ev = c->mainloop->time_new(c->mainloop, &tv, handle_time_event, timeout);
|
||||
d = pa_xnew(struct timeout_data, 1);
|
||||
d->c = c;
|
||||
d->timeout = timeout;
|
||||
ev = c->mainloop->time_new(c->mainloop, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, c->use_rtclock), handle_time_event, d);
|
||||
c->mainloop->time_set_destroy(ev, time_event_destroy_cb);
|
||||
|
||||
dbus_timeout_set_data(timeout, ev, NULL);
|
||||
|
||||
|
|
@ -215,23 +231,20 @@ static void remove_timeout(DBusTimeout *timeout, void *data) {
|
|||
|
||||
/* DBusTimeoutToggledFunction callback for pa mainloop */
|
||||
static void toggle_timeout(DBusTimeout *timeout, void *data) {
|
||||
pa_dbus_wrap_connection *c = data;
|
||||
struct timeout_data *d = data;
|
||||
pa_time_event *ev;
|
||||
struct timeval tv;
|
||||
|
||||
pa_assert(d);
|
||||
pa_assert(d->c);
|
||||
pa_assert(timeout);
|
||||
pa_assert(c);
|
||||
|
||||
pa_assert_se(ev = dbus_timeout_get_data(timeout));
|
||||
|
||||
if (dbus_timeout_get_enabled(timeout)) {
|
||||
struct timeval tv;
|
||||
|
||||
pa_gettimeofday(&tv);
|
||||
pa_timeval_add(&tv, (pa_usec_t) dbus_timeout_get_interval(timeout) * 1000);
|
||||
|
||||
c->mainloop->time_restart(ev, &tv);
|
||||
d->c->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, pa_rtclock_now() + dbus_timeout_get_interval(timeout) * PA_USEC_PER_MSEC, d->c->use_rtclock));
|
||||
} else
|
||||
c->mainloop->time_restart(ev, NULL);
|
||||
d->c->mainloop->time_restart(ev, pa_timeval_rtstore(&tv, PA_USEC_INVALID, d->c->use_rtclock));
|
||||
}
|
||||
|
||||
static void wakeup_main(void *userdata) {
|
||||
|
|
@ -244,7 +257,7 @@ static void wakeup_main(void *userdata) {
|
|||
c->mainloop->defer_enable(c->dispatch_event, 1);
|
||||
}
|
||||
|
||||
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBusType type, DBusError *error) {
|
||||
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, pa_bool_t use_rtclock, DBusBusType type, DBusError *error) {
|
||||
DBusConnection *conn;
|
||||
pa_dbus_wrap_connection *pconn;
|
||||
char *id;
|
||||
|
|
@ -257,6 +270,7 @@ pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *m, DBusBus
|
|||
pconn = pa_xnew(pa_dbus_wrap_connection, 1);
|
||||
pconn->mainloop = m;
|
||||
pconn->connection = conn;
|
||||
pconn->use_rtclock = use_rtclock;
|
||||
|
||||
dbus_connection_set_exit_on_disconnect(conn, FALSE);
|
||||
dbus_connection_set_dispatch_status_function(conn, dispatch_status, pconn, NULL);
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@
|
|||
/* A wrap connection is not shared or refcounted, it is available in client side */
|
||||
typedef struct pa_dbus_wrap_connection pa_dbus_wrap_connection;
|
||||
|
||||
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *mainloop, DBusBusType type, DBusError *error);
|
||||
pa_dbus_wrap_connection* pa_dbus_wrap_connection_new(pa_mainloop_api *mainloop, pa_bool_t use_rtclock, DBusBusType type, DBusError *error);
|
||||
void pa_dbus_wrap_connection_free(pa_dbus_wrap_connection* conn);
|
||||
|
||||
DBusConnection* pa_dbus_wrap_connection_get(pa_dbus_wrap_connection *conn);
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@
|
|||
#include <syslog.h>
|
||||
#endif
|
||||
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/utf8.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
#include <pulse/util.h>
|
||||
|
|
@ -45,7 +46,7 @@
|
|||
|
||||
#include <pulsecore/macro.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/rtclock.h>
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
#include <pulsecore/once.h>
|
||||
#include <pulsecore/ratelimit.h>
|
||||
|
||||
|
|
@ -294,7 +295,7 @@ void pa_log_levelv_meta(
|
|||
static pa_usec_t start, last;
|
||||
pa_usec_t u, a, r;
|
||||
|
||||
u = pa_rtclock_usec();
|
||||
u = pa_rtclock_now();
|
||||
|
||||
PA_ONCE_BEGIN {
|
||||
start = u;
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@
|
|||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
|
||||
|
|
@ -37,6 +38,7 @@
|
|||
#include <pulsecore/macro.h>
|
||||
#include <pulsecore/refcnt.h>
|
||||
#include <pulsecore/flist.h>
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
|
||||
#include "pdispatch.h"
|
||||
|
||||
|
|
@ -204,6 +206,7 @@ struct pa_pdispatch {
|
|||
pa_pdispatch_drain_callback drain_callback;
|
||||
void *drain_userdata;
|
||||
const pa_creds *creds;
|
||||
pa_bool_t use_rtclock:1;
|
||||
};
|
||||
|
||||
static void reply_info_free(struct reply_info *r) {
|
||||
|
|
@ -220,7 +223,7 @@ static void reply_info_free(struct reply_info *r) {
|
|||
pa_xfree(r);
|
||||
}
|
||||
|
||||
pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *mainloop, const pa_pdispatch_cb_t*table, unsigned entries) {
|
||||
pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *mainloop, pa_bool_t use_rtclock, const pa_pdispatch_cb_t *table, unsigned entries) {
|
||||
pa_pdispatch *pd;
|
||||
pa_assert(mainloop);
|
||||
|
||||
|
|
@ -235,6 +238,7 @@ pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *mainloop, const pa_pdispatch_cb_
|
|||
pd->drain_callback = NULL;
|
||||
pd->drain_userdata = NULL;
|
||||
pd->creds = NULL;
|
||||
pd->use_rtclock = use_rtclock;
|
||||
|
||||
return pd;
|
||||
}
|
||||
|
|
@ -342,7 +346,7 @@ finish:
|
|||
return ret;
|
||||
}
|
||||
|
||||
static void timeout_callback(pa_mainloop_api*m, pa_time_event*e, const struct timeval *tv, void *userdata) {
|
||||
static void timeout_callback(pa_mainloop_api*m, pa_time_event*e, const struct timeval *t, void *userdata) {
|
||||
struct reply_info*r = userdata;
|
||||
|
||||
pa_assert(r);
|
||||
|
|
@ -371,10 +375,7 @@ void pa_pdispatch_register_reply(pa_pdispatch *pd, uint32_t tag, int timeout, pa
|
|||
r->free_cb = free_cb;
|
||||
r->tag = tag;
|
||||
|
||||
pa_gettimeofday(&tv);
|
||||
tv.tv_sec += timeout;
|
||||
|
||||
pa_assert_se(r->time_event = pd->mainloop->time_new(pd->mainloop, &tv, timeout_callback, r));
|
||||
pa_assert_se(r->time_event = pd->mainloop->time_new(pd->mainloop, pa_timeval_rtstore(&tv, pa_rtclock_now() + timeout * PA_USEC_PER_SEC, pd->use_rtclock), timeout_callback, r));
|
||||
|
||||
PA_LLIST_PREPEND(struct reply_info, pd->replies, r);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@ typedef struct pa_pdispatch pa_pdispatch;
|
|||
typedef void (*pa_pdispatch_cb_t)(pa_pdispatch *pd, uint32_t command, uint32_t tag, pa_tagstruct *t, void *userdata);
|
||||
typedef void (*pa_pdispatch_drain_callback)(pa_pdispatch *pd, void *userdata);
|
||||
|
||||
pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *m, const pa_pdispatch_cb_t*table, unsigned entries);
|
||||
pa_pdispatch* pa_pdispatch_new(pa_mainloop_api *m, pa_bool_t use_rtclock, const pa_pdispatch_cb_t*table, unsigned entries);
|
||||
void pa_pdispatch_unref(pa_pdispatch *pd);
|
||||
pa_pdispatch* pa_pdispatch_ref(pa_pdispatch *pd);
|
||||
|
||||
|
|
|
|||
|
|
@ -30,6 +30,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/sample.h>
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/utf8.h>
|
||||
|
|
@ -63,7 +64,7 @@
|
|||
#define MAX_CONNECTIONS 64
|
||||
|
||||
/* Kick a client if it doesn't authenticate within this time */
|
||||
#define AUTH_TIMEOUT 5
|
||||
#define AUTH_TIMEOUT (5*PA_USEC_PER_SEC)
|
||||
|
||||
#define DEFAULT_COOKIE_FILE ".esd_auth"
|
||||
|
||||
|
|
@ -1459,11 +1460,10 @@ static pa_usec_t source_output_get_latency_cb(pa_source_output *o) {
|
|||
|
||||
/*** entry points ***/
|
||||
|
||||
static void auth_timeout(pa_mainloop_api*m, pa_time_event *e, const struct timeval *tv, void *userdata) {
|
||||
static void auth_timeout(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
|
||||
connection *c = CONNECTION(userdata);
|
||||
|
||||
pa_assert(m);
|
||||
pa_assert(tv);
|
||||
connection_assert_ref(c);
|
||||
pa_assert(c->auth_timeout_event == e);
|
||||
|
||||
|
|
@ -1553,12 +1553,9 @@ void pa_esound_protocol_connect(pa_esound_protocol *p, pa_iochannel *io, pa_esou
|
|||
c->authorized = TRUE;
|
||||
}
|
||||
|
||||
if (!c->authorized) {
|
||||
struct timeval tv;
|
||||
pa_gettimeofday(&tv);
|
||||
tv.tv_sec += AUTH_TIMEOUT;
|
||||
c->auth_timeout_event = p->core->mainloop->time_new(p->core->mainloop, &tv, auth_timeout, c);
|
||||
} else
|
||||
if (!c->authorized)
|
||||
c->auth_timeout_event = pa_core_rttime_new(p->core, pa_rtclock_now() + AUTH_TIMEOUT, auth_timeout, c);
|
||||
else
|
||||
c->auth_timeout_event = NULL;
|
||||
|
||||
c->defer_event = p->core->mainloop->defer_new(p->core->mainloop, defer_callback, c);
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/version.h>
|
||||
#include <pulse/utf8.h>
|
||||
|
|
@ -61,7 +62,7 @@
|
|||
#include "protocol-native.h"
|
||||
|
||||
/* Kick a client if it doesn't authenticate within this time */
|
||||
#define AUTH_TIMEOUT 60
|
||||
#define AUTH_TIMEOUT (60 * PA_USEC_PER_SEC)
|
||||
|
||||
/* Don't accept more connection than this */
|
||||
#define MAX_CONNECTIONS 64
|
||||
|
|
@ -4479,11 +4480,10 @@ static void client_send_event_cb(pa_client *client, const char*event, pa_proplis
|
|||
|
||||
/*** module entry points ***/
|
||||
|
||||
static void auth_timeout(pa_mainloop_api*m, pa_time_event *e, const struct timeval *tv, void *userdata) {
|
||||
static void auth_timeout(pa_mainloop_api*m, pa_time_event *e, const struct timeval *t, void *userdata) {
|
||||
pa_native_connection *c = PA_NATIVE_CONNECTION(userdata);
|
||||
|
||||
pa_assert(m);
|
||||
pa_assert(tv);
|
||||
pa_native_connection_assert_ref(c);
|
||||
pa_assert(c->auth_timeout_event == e);
|
||||
|
||||
|
|
@ -4541,12 +4541,9 @@ void pa_native_protocol_connect(pa_native_protocol *p, pa_iochannel *io, pa_nati
|
|||
c->authorized = TRUE;
|
||||
}
|
||||
|
||||
if (!c->authorized) {
|
||||
struct timeval tv;
|
||||
pa_gettimeofday(&tv);
|
||||
tv.tv_sec += AUTH_TIMEOUT;
|
||||
c->auth_timeout_event = p->core->mainloop->time_new(p->core->mainloop, &tv, auth_timeout, c);
|
||||
} else
|
||||
if (!c->authorized)
|
||||
c->auth_timeout_event = pa_core_rttime_new(p->core, pa_rtclock_now() + AUTH_TIMEOUT, auth_timeout, c);
|
||||
else
|
||||
c->auth_timeout_event = NULL;
|
||||
|
||||
c->is_local = pa_iochannel_socket_is_local(io);
|
||||
|
|
@ -4565,7 +4562,7 @@ void pa_native_protocol_connect(pa_native_protocol *p, pa_iochannel *io, pa_nati
|
|||
pa_pstream_set_revoke_callback(c->pstream, pstream_revoke_callback, c);
|
||||
pa_pstream_set_release_callback(c->pstream, pstream_release_callback, c);
|
||||
|
||||
c->pdispatch = pa_pdispatch_new(p->core->mainloop, command_table, PA_COMMAND_MAX);
|
||||
c->pdispatch = pa_pdispatch_new(p->core->mainloop, TRUE, command_table, PA_COMMAND_MAX);
|
||||
|
||||
c->record_streams = pa_idxset_new(NULL, NULL);
|
||||
c->output_streams = pa_idxset_new(NULL, NULL);
|
||||
|
|
|
|||
|
|
@ -23,7 +23,8 @@
|
|||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include <pulsecore/rtclock.h>
|
||||
#include <pulse/rtclock.h>
|
||||
|
||||
#include <pulsecore/log.h>
|
||||
#include <pulsecore/mutex.h>
|
||||
|
||||
|
|
@ -38,7 +39,7 @@ pa_bool_t pa_ratelimit_test(pa_ratelimit *r) {
|
|||
pa_usec_t now;
|
||||
pa_mutex *m;
|
||||
|
||||
now = pa_rtclock_usec();
|
||||
now = pa_rtclock_now();
|
||||
|
||||
m = pa_static_mutex_get(&mutex, FALSE, FALSE);
|
||||
pa_mutex_lock(m);
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
#include <pulse/timeval.h>
|
||||
|
||||
#include <pulsecore/core-error.h>
|
||||
#include <pulsecore/rtclock.h>
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
#include <pulsecore/macro.h>
|
||||
#include <pulsecore/llist.h>
|
||||
#include <pulsecore/flist.h>
|
||||
|
|
@ -112,7 +112,7 @@ pa_rtpoll *pa_rtpoll_new(void) {
|
|||
PA_LLIST_HEAD_INIT(pa_rtpoll_item, p->items);
|
||||
|
||||
#ifdef DEBUG_TIMING
|
||||
p->timestamp = pa_rtclock_usec();
|
||||
p->timestamp = pa_rtclock_now();
|
||||
p->slept = p->awake = 0;
|
||||
#endif
|
||||
|
||||
|
|
@ -299,7 +299,7 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait) {
|
|||
|
||||
#ifdef DEBUG_TIMING
|
||||
{
|
||||
pa_usec_t now = pa_rtclock_usec();
|
||||
pa_usec_t now = pa_rtclock_now();
|
||||
p->awake = now - p->timestamp;
|
||||
p->timestamp = now;
|
||||
}
|
||||
|
|
@ -319,7 +319,7 @@ int pa_rtpoll_run(pa_rtpoll *p, pa_bool_t wait) {
|
|||
|
||||
#ifdef DEBUG_TIMING
|
||||
{
|
||||
pa_usec_t now = pa_rtclock_usec();
|
||||
pa_usec_t now = pa_rtclock_now();
|
||||
p->slept = now - p->timestamp;
|
||||
p->timestamp = now;
|
||||
|
||||
|
|
|
|||
|
|
@ -52,12 +52,14 @@
|
|||
#include <asyncns.h>
|
||||
#endif
|
||||
|
||||
#include <pulse/rtclock.h>
|
||||
#include <pulse/timeval.h>
|
||||
#include <pulse/xmalloc.h>
|
||||
|
||||
#include <pulsecore/winsock.h>
|
||||
#include <pulsecore/core-error.h>
|
||||
#include <pulsecore/socket-util.h>
|
||||
#include <pulsecore/core-rtclock.h>
|
||||
#include <pulsecore/core-util.h>
|
||||
#include <pulsecore/socket-util.h>
|
||||
#include <pulsecore/log.h>
|
||||
|
|
@ -420,12 +422,11 @@ fail:
|
|||
|
||||
#endif
|
||||
|
||||
static void timeout_cb(pa_mainloop_api *m, pa_time_event *e, const struct timeval *tv, void *userdata) {
|
||||
static void timeout_cb(pa_mainloop_api *m, pa_time_event *e, const struct timeval *t, void *userdata) {
|
||||
pa_socket_client *c = userdata;
|
||||
|
||||
pa_assert(m);
|
||||
pa_assert(e);
|
||||
pa_assert(tv);
|
||||
pa_assert(c);
|
||||
|
||||
if (c->fd >= 0) {
|
||||
|
|
@ -437,17 +438,16 @@ static void timeout_cb(pa_mainloop_api *m, pa_time_event *e, const struct timeva
|
|||
do_call(c);
|
||||
}
|
||||
|
||||
static void start_timeout(pa_socket_client *c) {
|
||||
static void start_timeout(pa_socket_client *c, pa_bool_t use_rtclock) {
|
||||
struct timeval tv;
|
||||
|
||||
pa_assert(c);
|
||||
pa_assert(!c->timeout_event);
|
||||
|
||||
pa_gettimeofday(&tv);
|
||||
pa_timeval_add(&tv, CONNECT_TIMEOUT * PA_USEC_PER_SEC);
|
||||
c->timeout_event = c->mainloop->time_new(c->mainloop, &tv, timeout_cb, c);
|
||||
c->timeout_event = c->mainloop->time_new(c->mainloop, pa_timeval_rtstore(&tv, pa_rtclock_now() + CONNECT_TIMEOUT * PA_USEC_PER_SEC, use_rtclock), timeout_cb, c);
|
||||
}
|
||||
|
||||
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*name, uint16_t default_port) {
|
||||
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, pa_bool_t use_rtclock, const char*name, uint16_t default_port) {
|
||||
pa_socket_client *c = NULL;
|
||||
pa_parsed_address a;
|
||||
|
||||
|
|
@ -463,7 +463,7 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
|||
switch (a.type) {
|
||||
case PA_PARSED_ADDRESS_UNIX:
|
||||
if ((c = pa_socket_client_new_unix(m, a.path_or_host)))
|
||||
start_timeout(c);
|
||||
start_timeout(c, use_rtclock);
|
||||
break;
|
||||
|
||||
case PA_PARSED_ADDRESS_TCP4: /* Fallthrough */
|
||||
|
|
@ -499,7 +499,7 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
|||
c->asyncns_io_event = m->io_new(m, asyncns_fd(c->asyncns), PA_IO_EVENT_INPUT, asyncns_cb, c);
|
||||
c->asyncns_query = asyncns_getaddrinfo(c->asyncns, a.path_or_host, port, &hints);
|
||||
pa_assert(c->asyncns_query);
|
||||
start_timeout(c);
|
||||
start_timeout(c, use_rtclock);
|
||||
}
|
||||
#elif defined(HAVE_GETADDRINFO)
|
||||
{
|
||||
|
|
@ -513,7 +513,7 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
|||
|
||||
if (res->ai_addr) {
|
||||
if ((c = pa_socket_client_new_sockaddr(m, res->ai_addr, res->ai_addrlen)))
|
||||
start_timeout(c);
|
||||
start_timeout(c, use_rtclock);
|
||||
}
|
||||
|
||||
freeaddrinfo(res);
|
||||
|
|
@ -546,7 +546,7 @@ pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char*nam
|
|||
s.sin_port = htons(a.port);
|
||||
|
||||
if ((c = pa_socket_client_new_sockaddr(m, (struct sockaddr*)&s, sizeof(s))))
|
||||
start_timeout(c);
|
||||
start_timeout(c, use_rtclock);
|
||||
}
|
||||
#endif /* HAVE_LIBASYNCNS */
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@ pa_socket_client* pa_socket_client_new_ipv6(pa_mainloop_api *m, uint8_t address[
|
|||
#endif
|
||||
pa_socket_client* pa_socket_client_new_unix(pa_mainloop_api *m, const char *filename);
|
||||
pa_socket_client* pa_socket_client_new_sockaddr(pa_mainloop_api *m, const struct sockaddr *sa, size_t salen);
|
||||
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, const char *a, uint16_t default_port);
|
||||
pa_socket_client* pa_socket_client_new_string(pa_mainloop_api *m, pa_bool_t use_rtclock, const char *a, uint16_t default_port);
|
||||
|
||||
pa_socket_client* pa_socket_client_ref(pa_socket_client *c);
|
||||
void pa_socket_client_unref(pa_socket_client *c);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue