From d80fd10a67e2764d301e8ff41cc271c0eee2399f Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 26 Jul 2007 13:17:34 +0000 Subject: [PATCH] properly deref sink_input/source_output objects when removing them from a sink/source git-svn-id: file:///home/lennart/svn/public/pulseaudio/branches/lennart@1541 fefdeb5f-60dc-0310-8127-8f9354f1896f --- src/pulsecore/sink.c | 3 ++- src/pulsecore/source.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/pulsecore/sink.c b/src/pulsecore/sink.c index a66097b..015cf4d 100644 --- a/src/pulsecore/sink.c +++ b/src/pulsecore/sink.c @@ -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; } diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c index ce1ee98..6ca8172 100644 --- a/src/pulsecore/source.c +++ b/src/pulsecore/source.c @@ -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; } -- 2.7.4