4 This file is part of PulseAudio.
6 PulseAudio is free software; you can redistribute it and/or modify
7 it under the terms of the GNU Lesser General Public License as
8 published by the Free Software Foundation; either version 2.1 of the
9 License, or (at your option) any later version.
11 PulseAudio is distributed in the hope that it will be useful, but
12 WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
16 You should have received a copy of the GNU Lesser General Public
17 License along with PulseAudio; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
29 #include <pulse/xmalloc.h>
31 #include <pulsecore/gccmacro.h>
33 #include "mainloop-api.h"
36 void (*callback
)(pa_mainloop_api
*m
, void *userdata
);
40 static void once_callback(pa_mainloop_api
*m
, pa_defer_event
*e
, void *userdata
) {
41 struct once_info
*i
= userdata
;
42 assert(m
&& i
&& i
->callback
);
44 i
->callback(m
, i
->userdata
);
46 assert(m
->defer_free
);
50 static void free_callback(pa_mainloop_api
*m
, PA_GCC_UNUSED pa_defer_event
*e
, void *userdata
) {
51 struct once_info
*i
= userdata
;
56 void pa_mainloop_api_once(pa_mainloop_api
* m
, void (*callback
)(pa_mainloop_api
*m
, void *userdata
), void *userdata
) {
59 assert(m
&& callback
);
61 i
= pa_xnew(struct once_info
, 1);
62 i
->callback
= callback
;
63 i
->userdata
= userdata
;
66 e
= m
->defer_new(m
, once_callback
, i
);
68 m
->defer_set_destroy(e
, free_callback
);