summaryrefslogtreecommitdiff
path: root/src/modules/module-switch-on-connect.c
diff options
context:
space:
mode:
authorGeorg Chini <georg@chini.tk>2017-05-18 07:47:27 +0200
committerGeorg Chini <georg@chini.tk>2017-05-18 07:47:27 +0200
commite08124f6ba09d553e3a9a3b8fee16f3a83571122 (patch)
tree80fdd01de3ff0cc52053cfbfdceb11bf8c967dd2 /src/modules/module-switch-on-connect.c
parentedc465da77874a1058cec0ab3714922e1ec0cc27 (diff)
downloadpulseaudio-e08124f6ba09d553e3a9a3b8fee16f3a83571122.tar.gz
sink/source: Don't update default sink/source before calling PA_CORE_HOOK_{SINK,SOURCE}_PUT
In sink_put() and source_put(), pa_core_update_default_{sink,source}() was called before the PA_CORE_HOOK_{SINK,SOURCE}_PUT hook. Therefore module-switch-on-connect could not correctly determine the old default sink/source if no user default was set and a sink/source with higher priority than any other sink/source turned up. This patch corrects the problem by swapping the order of the hook call and the pa_core_update_default_sink() call. Additionally it corrects a problem in module-switch-on-connect. If, after the change above, the new sink/source was the first sink/source to appear, pulseaudio would crash because module-switch-on-connect assumed that the default sink/source was not NULL. The patch checks if the default sink/source is NULL and only sets the new default sink/source in that case.
Diffstat (limited to 'src/modules/module-switch-on-connect.c')
-rw-r--r--src/modules/module-switch-on-connect.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/modules/module-switch-on-connect.c b/src/modules/module-switch-on-connect.c
index 776c923ee..e2da7222f 100644
--- a/src/modules/module-switch-on-connect.c
+++ b/src/modules/module-switch-on-connect.c
@@ -75,6 +75,12 @@ static pa_hook_result_t sink_put_hook_callback(pa_core *c, pa_sink *sink, void*
return PA_HOOK_OK;
}
+ /* No default sink, nothing to move away, just set the new default */
+ if (!c->default_sink) {
+ pa_core_set_configured_default_sink(c, sink);
+ return PA_HOOK_OK;
+ }
+
if (c->default_sink == sink)
return PA_HOOK_OK;
@@ -135,6 +141,12 @@ static pa_hook_result_t source_put_hook_callback(pa_core *c, pa_source *source,
return PA_HOOK_OK;
}
+ /* No default source, nothing to move away, just set the new default */
+ if (!c->default_source) {
+ pa_core_set_configured_default_source(c, source);
+ return PA_HOOK_OK;
+ }
+
if (c->default_source == source)
return PA_HOOK_OK;