summaryrefslogtreecommitdiffstats
path: root/src/pulsecore/source.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2007-07-26 13:17:34 +0000
committerLennart Poettering <lennart@poettering.net>2007-07-26 13:17:34 +0000
commitd80fd10a67e2764d301e8ff41cc271c0eee2399f (patch)
tree37bee35eef3d6deefe07fe3239bbab10a666ce42 /src/pulsecore/source.c
parent58af737ebba2f9563deb92da0e0eae77b4e3b319 (diff)
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
Diffstat (limited to 'src/pulsecore/source.c')
-rw-r--r--src/pulsecore/source.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/src/pulsecore/source.c b/src/pulsecore/source.c
index ce1ee987..6ca81727 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;
}