removing mixer_reconfigure memmory leak, fixing configure of alsa and oss mixer (passing parameters)
This commit is contained in:

committed by
Max Kellermann

parent
983822ea52
commit
d357f58542
@@ -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 @@
|
|||||||
#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);
|
|||||||
|
|
||||||
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
|
|||||||
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)
|
|||||||
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 @@
|
|||||||
#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
|
|||||||
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)
|
|||||||
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)
|
|||||||
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)
|
||||||
|
Reference in New Issue
Block a user