core: Add name to flist struct for more informative log messages
authorJyri Sarha <jyri.sarha@nokia.com>
Fri, 26 Nov 2010 16:38:24 +0000 (18:38 +0200)
committerColin Guthrie <cguthrie@mandriva.org>
Sun, 28 Nov 2010 16:37:56 +0000 (16:37 +0000)
PA_STATIC_FLIST_DECLARE macro sets the flist name automatically.

src/pulsecore/flist.c
src/pulsecore/flist.h

index 71feaa9..1867525 100644 (file)
@@ -48,6 +48,7 @@ struct pa_flist_elem {
 typedef struct pa_flist_elem pa_flist_elem;
 
 struct pa_flist {
+    const char *name;
     unsigned size;
     /* Stack that contains pointers stored into free list */
     pa_atomic_ptr_t stored;
@@ -79,7 +80,7 @@ static void stack_push(pa_atomic_ptr_t *list, pa_flist_elem *new_elem) {
     } while (!pa_atomic_ptr_cmpxchg(list, next, new_elem));
 }
 
-pa_flist *pa_flist_new(unsigned size) {
+pa_flist *pa_flist_new_with_name(unsigned size, const char *name) {
     pa_flist *l;
     unsigned i;
 
@@ -88,6 +89,7 @@ pa_flist *pa_flist_new(unsigned size) {
 
     l = pa_xmalloc0(sizeof(pa_flist) + sizeof(pa_flist_elem) * size);
 
+    l->name = name;
     l->size = size;
     pa_atomic_ptr_store(&l->stored, NULL);
     pa_atomic_ptr_store(&l->empty, NULL);
@@ -97,6 +99,10 @@ pa_flist *pa_flist_new(unsigned size) {
     return l;
 }
 
+pa_flist *pa_flist_new(unsigned size) {
+    return pa_flist_new_with_name(size, "unknown");
+}
+
 void pa_flist_free(pa_flist *l, pa_free_cb_t free_cb) {
     pa_assert(l);
 
@@ -117,7 +123,7 @@ int pa_flist_push(pa_flist *l, void *p) {
     elem = stack_pop(&l->empty);
     if (elem == NULL) {
         if (pa_log_ratelimit())
-            pa_log_debug("flist is full (don't worry)");
+            pa_log_debug("%s flist is full (don't worry)", l->name);
         return -1;
     }
     pa_atomic_ptr_store(&elem->ptr, p);
index 184e599..7fb5035 100644 (file)
 
 typedef struct pa_flist pa_flist;
 
-/* Size is required to be a power of two, or 0 for the default size */
 pa_flist * pa_flist_new(unsigned size);
+/* Freeing the name is responsibility of caller. The name is only used
+ * for debug printing. */
+pa_flist * pa_flist_new_with_name(unsigned size, const char *name);
 void pa_flist_free(pa_flist *l, pa_free_cb_t free_cb);
 
 /* Please note that this routine might fail! */
@@ -49,7 +51,8 @@ void* pa_flist_pop(pa_flist*l);
         pa_once once;                                                   \
     } name##_flist = { NULL, PA_ONCE_INIT };                            \
     static void name##_flist_init(void) {                               \
-        name##_flist.flist = pa_flist_new(size);                        \
+        name##_flist.flist =                                            \
+            pa_flist_new_with_name(size, __FILE__ ": " #name);          \
     }                                                                   \
     static inline pa_flist* name##_flist_get(void) {                    \
         pa_run_once(&name##_flist.once, name##_flist_init);             \