]> code.delx.au - pulseaudio/commitdiff
allow destruction of pa_fdsem object that are still in 'poll' state
authorLennart Poettering <lennart@poettering.net>
Sat, 11 Aug 2007 16:00:02 +0000 (16:00 +0000)
committerLennart Poettering <lennart@poettering.net>
Sat, 11 Aug 2007 16:00:02 +0000 (16:00 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1634 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/pulsecore/fdsem.c

index 4de531ae176da6bd9bb43ecc889ad9a03be01392..c51ebba667e4c54c1501db39820fd25522ed9711 100644 (file)
@@ -64,8 +64,6 @@ pa_fdsem *pa_fdsem_new(void) {
 void pa_fdsem_free(pa_fdsem *f) {
     pa_assert(f);
 
-    pa_assert(pa_atomic_load(&f->waiting) == 0);
-    
     close(f->fds[0]);
     close(f->fds[1]);
 
@@ -168,17 +166,16 @@ int pa_fdsem_before_poll(pa_fdsem *f) {
     pa_atomic_inc(&f->waiting);
 
     if (pa_atomic_cmpxchg(&f->signalled, 1, 0)) {
-        pa_atomic_dec(&f->waiting);
+        pa_assert_se(pa_atomic_dec(&f->waiting) >= 1);
         return -1;
-    }
-        
+    }        
     return 0;
 }
 
 int pa_fdsem_after_poll(pa_fdsem *f) {
     pa_assert(f);
 
-    pa_atomic_dec(&f->waiting);
+    pa_assert_se(pa_atomic_dec(&f->waiting) >= 1);
 
     flush(f);