summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-08-11 16:00:02 +0000
committerLennart Poettering <lennart@poettering.net>2007-08-11 16:00:02 +0000
commitf7b707b9541fa2e5e7a709ccb3f26c0be11bc6a9 (patch)
tree167474f8b281ee90c0f0e9c6606e42934232c6ff
parente1100b5b20a39813a86559a91afa5da3afb51752 (diff)
allow destruction of pa_fdsem object that are still in 'poll' state
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1634 fefdeb5f-60dc-0310-8127-8f9354f1896f
-rw-r--r--src/pulsecore/fdsem.c9
1 files changed, 3 insertions, 6 deletions
diff --git a/src/pulsecore/fdsem.c b/src/pulsecore/fdsem.c
index 4de531ae..c51ebba6 100644
--- a/src/pulsecore/fdsem.c
+++ b/src/pulsecore/fdsem.c
@@ -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);