]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/rtsig.c
dbus: memory leak, actually free dbus wrapper
[pulseaudio] / src / pulsecore / rtsig.c
index a3226a0e6b71358f1209c899cd49da8c6469a0e6..4cd6aa8f7eefbb5cd85b7aa60ae7b335c822073d 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /***
   This file is part of PulseAudio.
 
 
 #include "rtsig.h"
 
+#ifdef SIGRTMIN
+
 static void _free_rtsig(void *p) {
     pa_rtsig_put(PA_PTR_TO_INT(p));
 }
 
-PA_STATIC_FLIST_DECLARE(rtsig_flist, pa_make_power_of_two(SIGRTMAX-SIGRTMIN+1), NULL);
+PA_STATIC_FLIST_DECLARE(rtsig_flist, pa_make_power_of_two((unsigned) (SIGRTMAX-SIGRTMIN+1)), NULL);
 PA_STATIC_TLS_DECLARE(rtsig_tls, _free_rtsig);
 
 static pa_atomic_t rtsig_current = PA_ATOMIC_INIT(-1);
@@ -50,17 +50,17 @@ static int rtsig_start = -1, rtsig_end = -1;
 int pa_rtsig_get(void) {
     void *p;
     int sig;
-    
+
     if ((p = pa_flist_pop(PA_STATIC_FLIST_GET(rtsig_flist))))
         return PA_PTR_TO_INT(p);
 
-    sig = pa_atomic_inc(&rtsig_current);
+    sig = pa_atomic_dec(&rtsig_current);
 
-    pa_assert(sig >= SIGRTMIN);
-    pa_assert(sig >= rtsig_start);
-    
-    if (sig > rtsig_end) {
-        pa_atomic_dec(&rtsig_current);
+    pa_assert(sig <= SIGRTMAX);
+    pa_assert(sig <= rtsig_end);
+
+    if (sig < rtsig_start) {
+        pa_atomic_inc(&rtsig_current);
         return -1;
     }
 
@@ -71,13 +71,13 @@ int pa_rtsig_get_for_thread(void) {
     int sig;
     void *p;
 
-    if ((p = pa_tls_get(PA_STATIC_TLS_GET(rtsig_tls))))
+    if ((p = PA_STATIC_TLS_GET(rtsig_tls)))
         return PA_PTR_TO_INT(p);
-    
+
     if ((sig = pa_rtsig_get()) < 0)
         return -1;
 
-    pa_tls_set(PA_STATIC_TLS_GET(rtsig_tls), PA_INT_TO_PTR(sig));
+    PA_STATIC_TLS_SET(rtsig_tls, PA_INT_TO_PTR(sig));
     return sig;
 }
 
@@ -102,11 +102,30 @@ void pa_rtsig_configure(int start, int end) {
     rtsig_end = end;
 
     sigemptyset(&ss);
-    
+
     for (s = rtsig_start; s <= rtsig_end; s++)
         pa_assert_se(sigaddset(&ss, s) == 0);
-    
+
     pa_assert(pthread_sigmask(SIG_BLOCK, &ss, NULL) == 0);
-    
-    pa_atomic_store(&rtsig_current, rtsig_start);
+
+    /* We allocate starting from the end */
+    pa_atomic_store(&rtsig_current, rtsig_end);
+}
+
+#else /* SIGRTMIN */
+
+int pa_rtsig_get(void) {
+    return -1;
+}
+
+int pa_rtsig_get_for_thread(void) {
+    return -1;
+}
+
+void pa_rtsig_put(int sig) {
+}
+
+void pa_rtsig_configure(int start, int end) {
 }
+
+#endif /* SIGRTMIN */