]> code.delx.au - pulseaudio/blob - src/mainloop-api.c
main part of the native protocol
[pulseaudio] / src / mainloop-api.c
1 #include <assert.h>
2 #include <stdlib.h>
3 #include "mainloop-api.h"
4
5 struct once_info {
6 void (*callback)(void *userdata);
7 void *userdata;
8 };
9
10 static void once_callback(struct pa_mainloop_api *api, void *id, void *userdata) {
11 struct once_info *i = userdata;
12 assert(api && i && i->callback);
13 i->callback(i->userdata);
14 assert(api->cancel_fixed);
15 api->cancel_fixed(api, id);
16 free(i);
17 }
18
19 void pa_mainloop_api_once(struct pa_mainloop_api* api, void (*callback)(void *userdata), void *userdata) {
20 struct once_info *i;
21 void *id;
22 assert(api && callback);
23
24 i = malloc(sizeof(struct once_info));
25 assert(i);
26 i->callback = callback;
27 i->userdata = userdata;
28
29 assert(api->source_fixed);
30 id = api->source_fixed(api, once_callback, i);
31 assert(id);
32
33 /* Note: if the mainloop is destroyed before once_callback() was called, some memory is leaked. */
34 }
35