summaryrefslogtreecommitdiffstats
path: root/src/mainloop.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-06-19 01:01:09 +0000
committerLennart Poettering <lennart@poettering.net>2004-06-19 01:01:09 +0000
commit56f8c953dd609bc5c94011fe4acdd9ef6b875747 (patch)
tree9fb30d4fa48eea2b66f81bd84e16ebc22a9b09c6 /src/mainloop.c
parent382e7aefd471a4600010a04e6497d4bfd2fd8663 (diff)
some more work on the cli
git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@24 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'src/mainloop.c')
-rw-r--r--src/mainloop.c33
1 files changed, 29 insertions, 4 deletions
diff --git a/src/mainloop.c b/src/mainloop.c
index 37dbdb12..fba0461c 100644
--- a/src/mainloop.c
+++ b/src/mainloop.c
@@ -242,8 +242,8 @@ int mainloop_iterate(struct mainloop *m, int block) {
free_sources(&m->signal_sources, 0);
for (s = m->fixed_sources.sources; s; s = s->next) {
- assert(!s->dead && s->type == MAINLOOP_SOURCE_TYPE_FIXED);
- if (s->enabled) {
+ assert(s->type == MAINLOOP_SOURCE_TYPE_FIXED);
+ if (!s->dead && s->enabled) {
assert(s->fixed.callback);
s->fixed.callback(s, s->userdata);
}
@@ -264,8 +264,8 @@ int mainloop_iterate(struct mainloop *m, int block) {
dispatch_pollfds(m);
else if (c == 0) {
for (s = m->idle_sources.sources; s; s = s->next) {
- assert(!s->dead && s->type == MAINLOOP_SOURCE_TYPE_IDLE);
- if (s->enabled) {
+ assert(s->type == MAINLOOP_SOURCE_TYPE_IDLE);
+ if (!s->dead && s->enabled) {
assert(s->idle.callback);
s->idle.callback(s, s->userdata);
}
@@ -448,3 +448,28 @@ struct mainloop *mainloop_source_get_mainloop(struct mainloop_source *s) {
return s->mainloop;
}
+
+struct once_info {
+ void (*callback)(void *userdata);
+ void *userdata;
+};
+
+static void once_callback(struct mainloop_source *s, void *userdata) {
+ struct once_info *i = userdata;
+ assert(s && i && i->callback);
+ i->callback(i->userdata);
+ mainloop_source_free(s);
+ free(i);
+}
+
+void mainloop_once(struct mainloop*m, void (*callback)(void *userdata), void *userdata) {
+ struct once_info *i;
+ assert(m && callback);
+
+ i = malloc(sizeof(struct once_info));
+ assert(i);
+ i->callback = callback;
+ i->userdata = userdata;
+
+ mainloop_source_new_fixed(m, once_callback, i);
+}