* add pa_mainloop_wakeup() calls for deferred events

* place pa_mainloop_wakeup() calls a little bit more carfully, to minimize needless wakeups.


git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@734 fefdeb5f-60dc-0310-8127-8f9354f1896f
This commit is contained in:
Lennart Poettering 2006-04-16 17:25:14 +00:00
parent 76296ca8ad
commit 40f171f5de

View file

@ -121,8 +121,6 @@ static pa_io_event* mainloop_io_new(
m = a->userdata; m = a->userdata;
assert(a == &m->api); assert(a == &m->api);
pa_mainloop_wakeup(m);
e = pa_xmalloc(sizeof(pa_io_event)); e = pa_xmalloc(sizeof(pa_io_event));
e->mainloop = m; e->mainloop = m;
e->dead = 0; e->dead = 0;
@ -156,24 +154,27 @@ static pa_io_event* mainloop_io_new(
pa_idxset_put(m->io_events, e, NULL); pa_idxset_put(m->io_events, e, NULL);
m->rebuild_pollfds = 1; m->rebuild_pollfds = 1;
pa_mainloop_wakeup(m);
return e; return e;
} }
static void mainloop_io_enable(pa_io_event *e, pa_io_event_flags_t events) { static void mainloop_io_enable(pa_io_event *e, pa_io_event_flags_t events) {
assert(e && e->mainloop); assert(e && e->mainloop);
pa_mainloop_wakeup(e->mainloop);
e->events = events; e->events = events;
e->mainloop->rebuild_pollfds = 1; e->mainloop->rebuild_pollfds = 1;
pa_mainloop_wakeup(e->mainloop);
} }
static void mainloop_io_free(pa_io_event *e) { static void mainloop_io_free(pa_io_event *e) {
assert(e && e->mainloop); assert(e && e->mainloop);
pa_mainloop_wakeup(e->mainloop);
e->dead = e->mainloop->io_events_scan_dead = e->mainloop->rebuild_pollfds = 1; e->dead = e->mainloop->io_events_scan_dead = e->mainloop->rebuild_pollfds = 1;
pa_mainloop_wakeup(e->mainloop);
} }
static void mainloop_io_set_destroy(pa_io_event *e, void (*callback)(pa_mainloop_api*a, pa_io_event *e, void *userdata)) { static void mainloop_io_set_destroy(pa_io_event *e, void (*callback)(pa_mainloop_api*a, pa_io_event *e, void *userdata)) {
@ -202,6 +203,9 @@ static pa_defer_event* mainloop_defer_new(pa_mainloop_api*a, void (*callback) (p
pa_idxset_put(m->defer_events, e, NULL); pa_idxset_put(m->defer_events, e, NULL);
m->deferred_pending++; m->deferred_pending++;
pa_mainloop_wakeup(e->mainloop);
return e; return e;
} }
@ -211,8 +215,10 @@ static void mainloop_defer_enable(pa_defer_event *e, int b) {
if (e->enabled && !b) { if (e->enabled && !b) {
assert(e->mainloop->deferred_pending > 0); assert(e->mainloop->deferred_pending > 0);
e->mainloop->deferred_pending--; e->mainloop->deferred_pending--;
} else if (!e->enabled && b) } else if (!e->enabled && b) {
e->mainloop->deferred_pending++; e->mainloop->deferred_pending++;
pa_mainloop_wakeup(e->mainloop);
}
e->enabled = b; e->enabled = b;
} }
@ -242,8 +248,6 @@ static pa_time_event* mainloop_time_new(pa_mainloop_api*a, const struct timeval
m = a->userdata; m = a->userdata;
assert(a == &m->api); assert(a == &m->api);
pa_mainloop_wakeup(m);
e = pa_xmalloc(sizeof(pa_time_event)); e = pa_xmalloc(sizeof(pa_time_event));
e->mainloop = m; e->mainloop = m;
e->dead = 0; e->dead = 0;
@ -258,17 +262,20 @@ static pa_time_event* mainloop_time_new(pa_mainloop_api*a, const struct timeval
pa_idxset_put(m->time_events, e, NULL); pa_idxset_put(m->time_events, e, NULL);
if (e->enabled)
pa_mainloop_wakeup(m);
return e; return e;
} }
static void mainloop_time_restart(pa_time_event *e, const struct timeval *tv) { static void mainloop_time_restart(pa_time_event *e, const struct timeval *tv) {
assert(e); assert(e);
pa_mainloop_wakeup(e->mainloop);
if (tv) { if (tv) {
e->enabled = 1; e->enabled = 1;
e->timeval = *tv; e->timeval = *tv;
pa_mainloop_wakeup(e->mainloop);
} else } else
e->enabled = 0; e->enabled = 0;
} }
@ -276,9 +283,9 @@ static void mainloop_time_restart(pa_time_event *e, const struct timeval *tv) {
static void mainloop_time_free(pa_time_event *e) { static void mainloop_time_free(pa_time_event *e) {
assert(e); assert(e);
pa_mainloop_wakeup(e->mainloop);
e->dead = e->mainloop->time_events_scan_dead = 1; e->dead = e->mainloop->time_events_scan_dead = 1;
/* no wakeup needed here. Think about it! */
} }
static void mainloop_time_set_destroy(pa_time_event *e, void (*callback)(pa_mainloop_api*a, pa_time_event *e, void *userdata)) { static void mainloop_time_set_destroy(pa_time_event *e, void (*callback)(pa_mainloop_api*a, pa_time_event *e, void *userdata)) {
@ -294,10 +301,10 @@ static void mainloop_quit(pa_mainloop_api*a, int retval) {
m = a->userdata; m = a->userdata;
assert(a == &m->api); assert(a == &m->api);
pa_mainloop_wakeup(m);
m->quit = 1; m->quit = 1;
m->retval = retval; m->retval = retval;
pa_mainloop_wakeup(m);
} }
static const pa_mainloop_api vtable = { static const pa_mainloop_api vtable = {