[pulseaudio-discuss] [PATCH 1/4] sink, source: unify stream "attached" flag checking

Tanu Kaskinen tanuk at iki.fi
Wed Dec 7 23:59:02 UTC 2016


The "attached" flag is only used for asserting that the stream is in the
expected state when attaching or detaching.

Sometimes the flag was checked and updated before calling the attach or
detach callback, and sometimes after. I think it makes more sense to
always check it before calling the callback.
---
 src/pulsecore/sink.c   | 12 ++++++------
 src/pulsecore/source.c |  6 +++---
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c
index 5c6a9c6..29aef26 100644
--- a/src/pulsecore/sink.c
+++ b/src/pulsecore/sink.c
@@ -2533,14 +2533,14 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
              * sink input handling a few lines down at
              * PA_SINK_MESSAGE_START_MOVE, too. */
 
+            pa_assert(i->thread_info.attached);
+            i->thread_info.attached = false;
+
             if (i->detach)
                 i->detach(i);
 
             pa_sink_input_set_state_within_thread(i, i->state);
 
-            pa_assert(i->thread_info.attached);
-            i->thread_info.attached = false;
-
             /* Since the caller sleeps in pa_sink_input_unlink(),
              * we can safely access data outside of thread_info even
              * though it is mutable */
@@ -2632,12 +2632,12 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, int64_t offse
                 }
             }
 
-            if (i->detach)
-                i->detach(i);
-
             pa_assert(i->thread_info.attached);
             i->thread_info.attached = false;
 
+            if (i->detach)
+                i->detach(i);
+
             /* Let's remove the sink input ...*/
             pa_hashmap_remove_and_free(s->thread_info.inputs, PA_UINT32_TO_PTR(i->index));
 
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index 84f8428..daed8ad 100644
--- a/src/pulsecore/source.c
+++ b/src/pulsecore/source.c
@@ -2059,12 +2059,12 @@ int pa_source_process_msg(pa_msgobject *object, int code, void *userdata, int64_
 
             pa_source_output_set_state_within_thread(o, o->state);
 
-            if (o->detach)
-                o->detach(o);
-
             pa_assert(o->thread_info.attached);
             o->thread_info.attached = false;
 
+            if (o->detach)
+                o->detach(o);
+
             if (o->thread_info.direct_on_input) {
                 pa_hashmap_remove(o->thread_info.direct_on_input->thread_info.direct_outputs, PA_UINT32_TO_PTR(o->index));
                 o->thread_info.direct_on_input = NULL;
-- 
2.10.2



More information about the pulseaudio-discuss mailing list