+ if (!c->default_source || PA_SOURCE_IS_LINKED(pa_source_get_state(c->default_source)))
+ return c->default_source;
+
+ /* The old default source has become unlinked, set a new one. */
+
+ /* First, try to find one that isn't a monitor */
+ PA_IDXSET_FOREACH(s, c->sources, idx)
+ if (!s->monitor_of && PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
+ return pa_namereg_set_default_source(c, s);
+
+ /* Then, fallback to a monitor */
+ PA_IDXSET_FOREACH(s, c->sources, idx)
+ if (PA_SOURCE_IS_LINKED(pa_source_get_state(s)))
+ return pa_namereg_set_default_source(c, s);
+
+ return pa_namereg_set_default_source(c, NULL);