[pulseaudio-commits] r1526 - /branches/lennart/src/pulsecore/flist.h
svnmailer-noreply at 0pointer.de
svnmailer-noreply at 0pointer.de
Wed Jul 25 07:43:06 PDT 2007
Author: lennart
Date: Wed Jul 25 16:43:05 2007
New Revision: 1526
URL: http://0pointer.de/cgi-bin/viewcvs.cgi?rev=3D1526&root=3Dpulseaudio&vi=
ew=3Drev
Log:
destruct freelists properly, by using gcc destructors. we do this only to m=
ake valgrind shut up, not because it would have any real value during runti=
me
Modified:
branches/lennart/src/pulsecore/flist.h
Modified: branches/lennart/src/pulsecore/flist.h
URL: http://0pointer.de/cgi-bin/viewcvs.cgi/branches/lennart/src/pulsecore/=
flist.h?rev=3D1526&root=3Dpulseaudio&r1=3D1525&r2=3D1526&view=3Ddiff
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- branches/lennart/src/pulsecore/flist.h (original)
+++ branches/lennart/src/pulsecore/flist.h Wed Jul 25 16:43:05 2007
@@ -27,6 +27,7 @@
#include <pulse/def.h>
=
#include <pulsecore/once.h>
+#include <pulsecore/gccmacro.h>
=
/* A multiple-reader multipler-write lock-free free list implementation */
=
@@ -40,20 +41,26 @@
int pa_flist_push(pa_flist*l, void *p);
void* pa_flist_pop(pa_flist*l);
=
-#define PA_STATIC_FLIST_DECLARE(name, size) \
- static struct { \
- pa_flist *flist; \
- pa_once_t once; \
- } name##_static_flist =3D { NULL, PA_ONCE_INIT }; \
- \
- static void name##_init(void) { \
- name##_static_flist.flist =3D pa_flist_new(size); \
- } \
- \
- static inline pa_flist* name##_get(void) { \
- pa_once(&name##_static_flist.once, name##_init); \
- return name##_static_flist.flist; \
- } \
+/* Please not that the destructor stuff is not really necesary, we do
+ * this just to make valgrind output more useful. */
+
+#define PA_STATIC_FLIST_DECLARE(name, size, destroy_cb) \
+ static struct { \
+ pa_flist *flist; \
+ pa_once_t once; \
+ } name##_static_flist =3D { NULL, PA_ONCE_INIT }; \
+ static void name##_init(void) { \
+ name##_static_flist.flist =3D pa_flist_new(size); \
+ } \
+ static inline pa_flist* name##_get(void) { \
+ pa_once(&name##_static_flist.once, name##_init); \
+ return name##_static_flist.flist; \
+ } \
+ static void name##_destructor(void) PA_GCC_DESTRUCTOR; \
+ static void name##_destructor(void) { \
+ if (name##_static_flist.flist) \
+ pa_flist_free(name##_static_flist.flist, destroy_cb); \
+ } \
struct __stupid_useless_struct_to_allow_trailing_semicolon
=
#define PA_STATIC_FLIST_GET(name) (name##_get())
More information about the pulseaudio-commits
mailing list