summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaarten Bosmans <mkbosmans@gmail.com>2011-08-15 20:19:40 +0200
committerColin Guthrie <colin@mageia.org>2011-08-16 11:01:34 +0100
commit9256d9b7be25c2e08cae01a44e0caf179cf1f880 (patch)
tree58b63593b580b30e722a09f01d60499c3bae5463
parent0ef7e5cb4c22bd8b781cb2a2e790612a8f72e00f (diff)
Initialise write_volume
The callback should also be reset in reset_calbacks(). The extra check in _volume_change_apply() is needed because when the sink is unlinked the callbacks are reset, but there still may be pending volume changes.
-rw-r--r--src/pulsecore/sink.c8
-rw-r--r--src/pulsecore/source.c8
2 files changed, 16 insertions, 0 deletions
diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 62776985..e6e410c4 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -174,6 +174,7 @@ static void reset_callbacks(pa_sink *s) {
s->set_state = NULL;
s->get_volume = NULL;
s->set_volume = NULL;
+ s->write_volume = NULL;
s->get_mute = NULL;
s->set_mute = NULL;
s->request_rewind = NULL;
@@ -3350,6 +3351,13 @@ pa_bool_t pa_sink_volume_change_apply(pa_sink *s, pa_usec_t *usec_to_next) {
pa_bool_t ret = FALSE;
pa_assert(s);
+
+ if (!PA_SINK_IS_LINKED(s->state)) {
+ if (usec_to_next)
+ *usec_to_next = 0;
+ return ret;
+ }
+
pa_assert(s->write_volume);
while (s->thread_info.volume_changes && now >= s->thread_info.volume_changes->at) {
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 31ce39d1..ae9528ff 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -144,6 +144,7 @@ static void reset_callbacks(pa_source *s) {
s->set_state = NULL;
s->get_volume = NULL;
s->set_volume = NULL;
+ s->write_volume = NULL;
s->get_mute = NULL;
s->set_mute = NULL;
s->update_requested_latency = NULL;
@@ -2533,6 +2534,13 @@ pa_bool_t pa_source_volume_change_apply(pa_source *s, pa_usec_t *usec_to_next) {
pa_bool_t ret = FALSE;
pa_assert(s);
+
+ if (!PA_SOURCE_IS_LINKED(s->state)) {
+ if (usec_to_next)
+ *usec_to_next = 0;
+ return ret;
+ }
+
pa_assert(s->write_volume);
while (s->thread_info.volume_changes && now >= s->thread_info.volume_changes->at) {