Commit d357f585 authored by Viliam Mateicka's avatar Viliam Mateicka Committed by Max Kellermann

removing mixer_reconfigure memmory leak, fixing configure of alsa and oss mixer…

removing mixer_reconfigure memmory leak, fixing configure of alsa and oss mixer (passing parameters)
parent 983822ea
...@@ -80,7 +80,7 @@ ConfigParam *newConfigParam(const char *value, int line) ...@@ -80,7 +80,7 @@ ConfigParam *newConfigParam(const char *value, int line)
return ret; return ret;
} }
static void void
config_param_free(gpointer data, G_GNUC_UNUSED gpointer user_data) config_param_free(gpointer data, G_GNUC_UNUSED gpointer user_data)
{ {
ConfigParam *param = data; ConfigParam *param = data;
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#define MPD_CONF_H #define MPD_CONF_H
#include <stdbool.h> #include <stdbool.h>
#include <glib.h>
#define CONF_MUSIC_DIR "music_directory" #define CONF_MUSIC_DIR "music_directory"
#define CONF_PLAYLIST_DIR "playlist_directory" #define CONF_PLAYLIST_DIR "playlist_directory"
...@@ -105,6 +106,8 @@ int getBoolBlockParam(ConfigParam *param, const char *name, int force); ...@@ -105,6 +106,8 @@ int getBoolBlockParam(ConfigParam *param, const char *name, int force);
ConfigParam *newConfigParam(const char *value, int line); ConfigParam *newConfigParam(const char *value, int line);
void config_param_free(gpointer data, gpointer user_data);
void addBlockParam(ConfigParam * param, const char *name, const char *value, int line); void addBlockParam(ConfigParam * param, const char *name, const char *value, int line);
#endif #endif
...@@ -36,6 +36,10 @@ static void ...@@ -36,6 +36,10 @@ static void
alsa_mixer_finish(struct mixer_data *data) alsa_mixer_finish(struct mixer_data *data)
{ {
struct alsa_mixer *am = (struct alsa_mixer *)data; struct alsa_mixer *am = (struct alsa_mixer *)data;
if (am->device)
g_free(am->device);
if (am->control)
g_free(am->control);
g_free(am); g_free(am);
} }
...@@ -45,10 +49,16 @@ alsa_mixer_configure(struct mixer_data *data, ConfigParam *param) ...@@ -45,10 +49,16 @@ alsa_mixer_configure(struct mixer_data *data, ConfigParam *param)
struct alsa_mixer *am = (struct alsa_mixer *)data; struct alsa_mixer *am = (struct alsa_mixer *)data;
BlockParam *bp; BlockParam *bp;
if ((bp = getBlockParam(param, "mixer_device"))) if ((bp = getBlockParam(param, "mixer_device"))) {
am->device = bp->value; if (am->device)
if ((bp = getBlockParam(param, "mixer_control"))) g_free(am->device);
am->control = bp->value; am->device = g_strdup(bp->value);
}
if ((bp = getBlockParam(param, "mixer_control"))) {
if (am->control)
g_free(am->control);
am->control = g_strdup(bp->value);
}
} }
static void static void
......
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
#define VOLUME_MIXER_OSS_DEFAULT "/dev/mixer" #define VOLUME_MIXER_OSS_DEFAULT "/dev/mixer"
struct oss_mixer { struct oss_mixer {
const char *device; char *device;
const char *control; char *control;
int device_fd; int device_fd;
int volume_control; int volume_control;
}; };
...@@ -40,6 +40,10 @@ static void ...@@ -40,6 +40,10 @@ static void
oss_mixer_finish(struct mixer_data *data) oss_mixer_finish(struct mixer_data *data)
{ {
struct oss_mixer *om = (struct oss_mixer *) data; struct oss_mixer *om = (struct oss_mixer *) data;
if (om->device)
g_free(om->device);
if (om->control)
g_free(om->control);
g_free(om); g_free(om);
} }
...@@ -50,11 +54,15 @@ oss_mixer_configure(struct mixer_data *data, ConfigParam *param) ...@@ -50,11 +54,15 @@ oss_mixer_configure(struct mixer_data *data, ConfigParam *param)
BlockParam *bp; BlockParam *bp;
bp = getBlockParam(param, "mixer_device"); bp = getBlockParam(param, "mixer_device");
if (bp) { if (bp) {
om->device = bp->value; if (om->device)
g_free(om->device);
om->device = g_strdup(bp->value);
} }
bp = getBlockParam(param, "mixer_control"); bp = getBlockParam(param, "mixer_control");
if (bp) { if (bp) {
om->control = bp->value; if (om->control)
g_free(om->control);
om->control = g_strdup(bp->value);
} }
} }
......
...@@ -71,6 +71,8 @@ mixer_reconfigure(char *driver) ...@@ -71,6 +71,8 @@ mixer_reconfigure(char *driver)
g_error("Using mixer_type '%s' with not enabled %s output", driver, driver); g_error("Using mixer_type '%s' with not enabled %s output", driver, driver);
} }
} }
//free parameter list
config_param_free(newparam, NULL);
} }
void volume_init(void) void volume_init(void)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment