Don't hit an assert when checking for idleness
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Dec 2008 20:03:17 +0000 (21:03 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Dec 2008 20:03:17 +0000 (21:03 +0100)
Closes #398

src/pulsecore/sink-input.c
src/pulsecore/sink.c
src/pulsecore/source-output.c
src/pulsecore/source.c

index 0e1224f..d4e0a9c 100644 (file)
@@ -302,8 +302,6 @@ static void update_n_corked(pa_sink_input *i, pa_sink_input_state_t state) {
         pa_assert_se(i->sink->n_corked -- >= 1);
     else if (i->state != PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_CORKED)
         i->sink->n_corked++;
         pa_assert_se(i->sink->n_corked -- >= 1);
     else if (i->state != PA_SINK_INPUT_CORKED && state == PA_SINK_INPUT_CORKED)
         i->sink->n_corked++;
-
-    pa_sink_update_status(i->sink);
 }
 
 /* Called from main context */
 }
 
 /* Called from main context */
@@ -341,6 +339,8 @@ static int sink_input_set_state(pa_sink_input *i, pa_sink_input_state_t state) {
             pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_STATE_CHANGED], ssync);
     }
 
             pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_STATE_CHANGED], ssync);
     }
 
+    pa_sink_update_status(i->sink);
+
     return 0;
 }
 
     return 0;
 }
 
@@ -391,6 +391,8 @@ void pa_sink_input_unlink(pa_sink_input *i) {
         pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_UNLINK_POST], i);
     }
 
         pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_UNLINK_POST], i);
     }
 
+    pa_sink_update_status(i->sink);
+
     i->sink = NULL;
     pa_sink_input_unref(i);
 }
     i->sink = NULL;
     pa_sink_input_unref(i);
 }
@@ -452,6 +454,8 @@ void pa_sink_input_put(pa_sink_input *i) {
 
     pa_subscription_post(i->sink->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, i->index);
     pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_PUT], i);
 
     pa_subscription_post(i->sink->core, PA_SUBSCRIPTION_EVENT_SINK_INPUT|PA_SUBSCRIPTION_EVENT_NEW, i->index);
     pa_hook_fire(&i->sink->core->hooks[PA_CORE_HOOK_SINK_INPUT_PUT], i);
+
+    pa_sink_update_status(i->sink);
 }
 
 /* Called from main context */
 }
 
 /* Called from main context */
index a6027e7..1580cf2 100644 (file)
@@ -1022,7 +1022,9 @@ unsigned pa_sink_check_suspend(pa_sink *s) {
     uint32_t idx;
 
     pa_sink_assert_ref(s);
     uint32_t idx;
 
     pa_sink_assert_ref(s);
-    pa_assert(PA_SINK_IS_LINKED(s->state));
+
+    if (!PA_SINK_IS_LINKED(s->state))
+        return 0;
 
     ret = 0;
 
 
     ret = 0;
 
index 376402f..c92c5ab 100644 (file)
@@ -247,7 +247,6 @@ static void update_n_corked(pa_source_output *o, pa_source_output_state_t state)
     else if (o->state != PA_SOURCE_OUTPUT_CORKED && state == PA_SOURCE_OUTPUT_CORKED)
         o->source->n_corked++;
 
     else if (o->state != PA_SOURCE_OUTPUT_CORKED && state == PA_SOURCE_OUTPUT_CORKED)
         o->source->n_corked++;
 
-    pa_source_update_status(o->source);
 }
 
 /* Called from main context */
 }
 
 /* Called from main context */
@@ -265,6 +264,8 @@ static int source_output_set_state(pa_source_output *o, pa_source_output_state_t
     if (state != PA_SOURCE_OUTPUT_UNLINKED)
         pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_STATE_CHANGED], o);
 
     if (state != PA_SOURCE_OUTPUT_UNLINKED)
         pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_STATE_CHANGED], o);
 
+    pa_source_update_status(o->source);
+
     return 0;
 }
 
     return 0;
 }
 
@@ -303,6 +304,8 @@ void pa_source_output_unlink(pa_source_output*o) {
         pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_UNLINK_POST], o);
     }
 
         pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_UNLINK_POST], o);
     }
 
+    pa_source_update_status(o->source);
+
     o->source = NULL;
     pa_source_output_unref(o);
 }
     o->source = NULL;
     pa_source_output_unref(o);
 }
@@ -354,6 +357,8 @@ void pa_source_output_put(pa_source_output *o) {
 
     pa_subscription_post(o->source->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_NEW, o->index);
     pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_PUT], o);
 
     pa_subscription_post(o->source->core, PA_SUBSCRIPTION_EVENT_SOURCE_OUTPUT|PA_SUBSCRIPTION_EVENT_NEW, o->index);
     pa_hook_fire(&o->source->core->hooks[PA_CORE_HOOK_SOURCE_OUTPUT_PUT], o);
+
+    pa_source_update_status(o->source);
 }
 
 /* Called from main context */
 }
 
 /* Called from main context */
index 7d927fa..f113e29 100644 (file)
@@ -652,7 +652,9 @@ unsigned pa_source_check_suspend(pa_source *s) {
     uint32_t idx;
 
     pa_source_assert_ref(s);
     uint32_t idx;
 
     pa_source_assert_ref(s);
-    pa_assert(PA_SOURCE_IS_LINKED(s->state));
+
+    if (!PA_SOURCE_IS_LINKED(s->state))
+        return 0;
 
     ret = 0;
 
 
     ret = 0;