summaryrefslogtreecommitdiff
path: root/libmatemixer
diff options
context:
space:
mode:
authorMichal Ratajsky <[email protected]>2014-08-21 17:11:44 +0200
committerMichal Ratajsky <[email protected]>2014-08-21 17:11:44 +0200
commitb6955dd78085d642f10325ec6d929e7421224d74 (patch)
tree13b0ef3242b87ba6343316d30159680e77fc4a26 /libmatemixer
parent3a99c51bb0bcba28d0d38bbed937c2071d9666b2 (diff)
downloadlibmatemixer-b6955dd78085d642f10325ec6d929e7421224d74.tar.bz2
libmatemixer-b6955dd78085d642f10325ec6d929e7421224d74.tar.xz
Fix memory problems in ALSA and MateMixerToggle and rename toggle option properties
Diffstat (limited to 'libmatemixer')
-rw-r--r--libmatemixer/matemixer-toggle.c45
1 files changed, 26 insertions, 19 deletions
diff --git a/libmatemixer/matemixer-toggle.c b/libmatemixer/matemixer-toggle.c
index 43bb8ce..869807a 100644
--- a/libmatemixer/matemixer-toggle.c
+++ b/libmatemixer/matemixer-toggle.c
@@ -15,7 +15,6 @@
* License along with this library; if not, see <http://www.gnu.org/licenses/>.
*/
-#include <string.h>
#include <glib.h>
#include <glib-object.h>
@@ -38,8 +37,8 @@ struct _MateMixerTogglePrivate
enum {
PROP_0,
PROP_STATE,
- PROP_STATE_OPTION_ON,
- PROP_STATE_OPTION_OFF,
+ PROP_ON_STATE_OPTION,
+ PROP_OFF_STATE_OPTION,
N_PROPERTIES
};
@@ -89,8 +88,8 @@ mate_mixer_toggle_class_init (MateMixerToggleClass *klass)
G_PARAM_READABLE |
G_PARAM_STATIC_STRINGS);
- properties[PROP_STATE_OPTION_ON] =
- g_param_spec_object ("state-option-on",
+ properties[PROP_ON_STATE_OPTION] =
+ g_param_spec_object ("on-state-option",
"State option for on",
"Option corresponding to the 'on' value of the toggle",
MATE_MIXER_TYPE_SWITCH_OPTION,
@@ -98,8 +97,8 @@ mate_mixer_toggle_class_init (MateMixerToggleClass *klass)
G_PARAM_CONSTRUCT_ONLY |
G_PARAM_STATIC_STRINGS);
- properties[PROP_STATE_OPTION_OFF] =
- g_param_spec_object ("state-option-off",
+ properties[PROP_OFF_STATE_OPTION] =
+ g_param_spec_object ("off-state-option",
"State option for off",
"Option corresponding to the 'off' value of the toggle",
MATE_MIXER_TYPE_SWITCH_OPTION,
@@ -126,10 +125,10 @@ mate_mixer_toggle_get_property (GObject *object,
case PROP_STATE:
g_value_set_boolean (value, mate_mixer_toggle_get_state (toggle));
break;
- case PROP_STATE_OPTION_ON:
+ case PROP_ON_STATE_OPTION:
g_value_set_object (value, toggle->priv->on);
break;
- case PROP_STATE_OPTION_OFF:
+ case PROP_OFF_STATE_OPTION:
g_value_set_object (value, toggle->priv->off);
break;
@@ -150,11 +149,11 @@ mate_mixer_toggle_set_property (GObject *object,
toggle = MATE_MIXER_TOGGLE (object);
switch (param_id) {
- case PROP_STATE_OPTION_ON:
+ case PROP_ON_STATE_OPTION:
/* Construct-only object */
toggle->priv->on = g_value_dup_object (value);
break;
- case PROP_STATE_OPTION_OFF:
+ case PROP_OFF_STATE_OPTION:
/* Construct-only object */
toggle->priv->off = g_value_dup_object (value);
break;
@@ -181,11 +180,10 @@ mate_mixer_toggle_dispose (GObject *object)
toggle = MATE_MIXER_TOGGLE (object);
if (toggle->priv->options != NULL) {
- g_list_free_full (toggle->priv->options, g_object_unref);
+ g_list_free (toggle->priv->options);
toggle->priv->options = NULL;
}
- /* FIXME: crashes on ALSA without the polling thread */
g_clear_object (&toggle->priv->on);
g_clear_object (&toggle->priv->off);
@@ -204,6 +202,9 @@ mate_mixer_toggle_get_state (MateMixerToggle *toggle)
g_return_val_if_fail (MATE_MIXER_IS_TOGGLE (toggle), FALSE);
active = mate_mixer_switch_get_active_option (MATE_MIXER_SWITCH (toggle));
+ if G_UNLIKELY (active == NULL)
+ return FALSE;
+
if (active == toggle->priv->on)
return TRUE;
else
@@ -243,6 +244,9 @@ mate_mixer_toggle_set_state (MateMixerToggle *toggle, gboolean state)
else
active = toggle->priv->off;
+ if G_UNLIKELY (active == NULL)
+ return FALSE;
+
return mate_mixer_switch_set_active_option (MATE_MIXER_SWITCH (toggle), active);
}
@@ -252,12 +256,13 @@ mate_mixer_toggle_get_option (MateMixerSwitch *swtch, const gchar *name)
MateMixerToggle *toggle;
g_return_val_if_fail (MATE_MIXER_IS_TOGGLE (swtch), NULL);
+ g_return_val_if_fail (name != NULL, NULL);
toggle = MATE_MIXER_TOGGLE (swtch);
- if (strcmp (name, mate_mixer_switch_option_get_name (toggle->priv->on)) == 0)
+ if (g_strcmp0 (name, mate_mixer_switch_option_get_name (toggle->priv->on)) == 0)
return toggle->priv->on;
- if (strcmp (name, mate_mixer_switch_option_get_name (toggle->priv->off)) == 0)
+ if (g_strcmp0 (name, mate_mixer_switch_option_get_name (toggle->priv->off)) == 0)
return toggle->priv->off;
return NULL;
@@ -273,10 +278,12 @@ mate_mixer_toggle_list_options (MateMixerSwitch *swtch)
toggle = MATE_MIXER_TOGGLE (swtch);
if (toggle->priv->options == NULL) {
- toggle->priv->options = g_list_prepend (toggle->priv->options,
- toggle->priv->off);
- toggle->priv->options = g_list_prepend (toggle->priv->options,
- toggle->priv->on);
+ if G_LIKELY (toggle->priv->off != NULL)
+ toggle->priv->options = g_list_prepend (toggle->priv->options,
+ toggle->priv->off);
+ if G_LIKELY (toggle->priv->on != NULL)
+ toggle->priv->options = g_list_prepend (toggle->priv->options,
+ toggle->priv->on);
}
return toggle->priv->options;
}