summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/aupdate.c
diff options
context:
space:
mode:
authorDaniel Mack <daniel@caiaq.de>2009-09-14 16:25:35 +0800
committerDaniel Mack <daniel@caiaq.de>2009-09-14 16:25:35 +0800
commitbebaa491650c48697b861ec5e76816e9af1a8803 (patch)
treeb57d38476473f8fc6e282f8c39f730c936fa10d4 /src/pulsecore/aupdate.c
parentc6d330ef91ce401660f907536b1bfd0591c14c2a (diff)
parent180ef1eebdfbdf0220af1fb5e4bf43e348207cde (diff)
Merge branch 'master' of git://0pointer.de/pulseaudio
Diffstat (limited to 'src/pulsecore/aupdate.c')
-rw-r--r--src/pulsecore/aupdate.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/pulsecore/aupdate.c b/src/pulsecore/aupdate.c
index 56ebb8e5..85b6e00e 100644
--- a/src/pulsecore/aupdate.c
+++ b/src/pulsecore/aupdate.c
@@ -39,6 +39,7 @@ struct pa_aupdate {
pa_atomic_t read_lock;
pa_mutex *write_lock;
pa_semaphore *semaphore;
+ pa_bool_t swapped;
};
pa_aupdate *pa_aupdate_new(void) {
@@ -101,6 +102,8 @@ unsigned pa_aupdate_write_begin(pa_aupdate *a) {
n = (unsigned) pa_atomic_load(&a->read_lock);
+ a->swapped = FALSE;
+
return !WHICH(n);
}
@@ -119,11 +122,16 @@ unsigned pa_aupdate_write_swap(pa_aupdate *a) {
break;
}
+ a->swapped = TRUE;
+
return WHICH(n);
}
void pa_aupdate_write_end(pa_aupdate *a) {
pa_assert(a);
+ if (!a->swapped)
+ pa_aupdate_write_swap(a);
+
pa_mutex_unlock(a->write_lock);
}