properly deref sink_input/source_output objects when removing them from a sink/source
authorLennart Poettering <lennart@poettering.net>
Thu, 26 Jul 2007 13:17:34 +0000 (13:17 +0000)
committerLennart Poettering <lennart@poettering.net>
Thu, 26 Jul 2007 13:17:34 +0000 (13:17 +0000)
git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1541 fefdeb5f-60dc-0310-8127-8f9354f1896f

src/pulsecore/sink.c
src/pulsecore/source.c

index a66097b..015cf4d 100644 (file)
@@ -671,7 +671,8 @@ int pa_sink_process_msg(pa_msgobject *o, int code, void *userdata, pa_memchunk *
 
         case PA_SINK_MESSAGE_REMOVE_INPUT: {
             pa_sink_input *i = userdata;
-            pa_hashmap_remove(s->thread_info.inputs, PA_UINT32_TO_PTR(i->index));
+            if (pa_hashmap_remove(s->thread_info.inputs, PA_UINT32_TO_PTR(i->index)))
+                pa_sink_input_unref(i);
             return 0;
         }
 
index ce1ee98..6ca8172 100644 (file)
@@ -384,20 +384,22 @@ unsigned pa_source_used_by(pa_source *s) {
     return pa_idxset_size(s->outputs);
 }
 
-int pa_source_process_msg(pa_msgobject *o, int code, void *userdata, pa_memchunk *chunk) {
-    pa_source *s = PA_SOURCE(o);
+int pa_source_process_msg(pa_msgobject *object, int code, void *userdata, pa_memchunk *chunk) {
+    pa_source *s = PA_SOURCE(object);
     pa_source_assert_ref(s);
 
     switch ((pa_source_message_t) code) {
         case PA_SOURCE_MESSAGE_ADD_OUTPUT: {
-            pa_source_output *i = userdata;
-            pa_hashmap_put(s->thread_info.outputs, PA_UINT32_TO_PTR(i->index), pa_source_output_ref(i));
+            pa_source_output *o = userdata;
+            pa_hashmap_put(s->thread_info.outputs, PA_UINT32_TO_PTR(o->index), pa_source_output_ref(o));
             return 0;
         }
 
         case PA_SOURCE_MESSAGE_REMOVE_OUTPUT: {
-            pa_source_output *i = userdata;
-            pa_hashmap_remove(s->thread_info.outputs, PA_UINT32_TO_PTR(i->index));
+            pa_source_output *o = userdata;
+            if (pa_hashmap_remove(s->thread_info.outputs, PA_UINT32_TO_PTR(o->index)))
+                pa_source_output_unref(o);
+            
             return 0;
         }