From e56832fbfdba0c4193a19c2f66d5d573e2af4248 Mon Sep 17 00:00:00 2001 From: Tanu Kaskinen Date: Thu, 22 May 2014 15:12:10 +0300 Subject: [PATCH] Fix pa_main_volume_policy lifecycle handling We should call pa_main_volume_policy_get() only once during module initialization, and then call pa_main_volume_policy_unref() when the module is unloaded. Change-Id: I5c482822dff683a79127812c9948eff711ae9066 --- murphy/volume.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/murphy/volume.c b/murphy/volume.c index a0f1f90..c5cc080 100644 --- a/murphy/volume.c +++ b/murphy/volume.c @@ -56,6 +56,7 @@ struct pa_mir_volume { vlim_table *classlim; /**< class indexed table */ vlim_table genlim; /**< generic limit */ double maxlim[mir_application_class_end]; /**< per class max. limit */ + pa_main_volume_policy *main_volume_policy; }; @@ -78,6 +79,8 @@ pa_mir_volume *pa_mir_volume_init(struct userdata *u) for (i = 0; i < mir_application_class_end; i++) volume->maxlim[i] = MIR_VOLUME_MAX_ATTENUATION; + volume->main_volume_policy = pa_main_volume_policy_get(u->core); + return volume; } @@ -87,6 +90,9 @@ void pa_mir_volume_done(struct userdata *u) int i; if (u && (volume = u->volume)) { + if (volume->main_volume_policy) + pa_main_volume_policy_unref(volume->main_volume_policy); + for (i = 0; i < volume->classlen; i++) { destroy_table(volume->classlim + i); } @@ -305,7 +311,7 @@ void mir_volume_change_context(struct userdata *u, const char *volume_class) return; } - policy = pa_main_volume_policy_get(u->core); + policy = u->volume->main_volume_policy; /* see if there is a context available that maps to the volume class */ -- 2.7.4