mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-11-06 13:29:56 -05:00
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
This commit is contained in:
parent
e1100b5b20
commit
f7b707b954
1 changed files with 3 additions and 6 deletions
|
|
@ -64,8 +64,6 @@ pa_fdsem *pa_fdsem_new(void) {
|
||||||
void pa_fdsem_free(pa_fdsem *f) {
|
void pa_fdsem_free(pa_fdsem *f) {
|
||||||
pa_assert(f);
|
pa_assert(f);
|
||||||
|
|
||||||
pa_assert(pa_atomic_load(&f->waiting) == 0);
|
|
||||||
|
|
||||||
close(f->fds[0]);
|
close(f->fds[0]);
|
||||||
close(f->fds[1]);
|
close(f->fds[1]);
|
||||||
|
|
||||||
|
|
@ -168,17 +166,16 @@ int pa_fdsem_before_poll(pa_fdsem *f) {
|
||||||
pa_atomic_inc(&f->waiting);
|
pa_atomic_inc(&f->waiting);
|
||||||
|
|
||||||
if (pa_atomic_cmpxchg(&f->signalled, 1, 0)) {
|
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 -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int pa_fdsem_after_poll(pa_fdsem *f) {
|
int pa_fdsem_after_poll(pa_fdsem *f) {
|
||||||
pa_assert(f);
|
pa_assert(f);
|
||||||
|
|
||||||
pa_atomic_dec(&f->waiting);
|
pa_assert_se(pa_atomic_dec(&f->waiting) >= 1);
|
||||||
|
|
||||||
flush(f);
|
flush(f);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue