[MPlayer-dev-eng] [PATCH][Trac 2311] codec_path mem leak
Alexander Strasser
eclipse7 at gmx.net
Fri Jan 13 23:14:43 EET 2017
Hello all,
while investigating the leaks pointed out in ticket #2311, I found
that the attached patch fixes the remaining leak.
The current code seems pretty wrong. At least, as I understand it,
the function set_codec_path ever only got called once. The implementation
combined with exporting the codec_path global var seems not solid at all.
Still I feel like I am missing something...
It seems to easy to be true, maybe some of you can have a look or test.
I only tested by debug printing the value of codec_path after common_init
in mplayer.c, and not actually loading a binary codec.
Alexander
-------------- next part --------------
>From 574fb28e7f6411300776d06bc62d23c5bb82da24 Mon Sep 17 00:00:00 2001
From: Alexander Strasser <eclipse7 at gmx.net>
Date: Wed, 4 Jan 2017 23:45:30 +0100
Subject: [PATCH] mpcommon/common_init: Avoid creating a mem leak of codec_path
The codec path is set by the config system anyway. Setting it again
and assuming the original value wasn't already duplicated by the
config system just creates a mem leak.
This change also simplifies the code because function set_codec_path
isn't needed anymore.
Fixes part of ticket 2311
---
mpcommon.c | 3 ---
path.c | 16 ----------------
path.h | 1 -
3 files changed, 20 deletions(-)
diff --git a/mpcommon.c b/mpcommon.c
index ebc9711e6..211828c49 100644
--- a/mpcommon.c
+++ b/mpcommon.c
@@ -588,9 +588,6 @@ int common_init(void)
set_priority();
#endif
- if (codec_path)
- set_codec_path(codec_path);
-
/* Check codecs.conf. */
if (!codecs_file || !parse_codec_cfg(codecs_file)) {
char *conf_path = get_path("codecs.conf");
diff --git a/path.c b/path.c
index b8d9335fe..e6287d220 100644
--- a/path.c
+++ b/path.c
@@ -174,22 +174,6 @@ void set_path_env(void)
char *codec_path = BINARY_CODECS_PATH;
-static int needs_free = 0;
-
-void set_codec_path(const char *path)
-{
- if (needs_free)
- free(codec_path);
- if (path == 0) {
- codec_path = BINARY_CODECS_PATH;
- needs_free = 0;
- return;
- }
- codec_path = malloc(strlen(path) + 1);
- strcpy(codec_path, path);
- needs_free = 1;
-}
-
/**
* @brief Returns the basename substring of a path.
*/
diff --git a/path.h b/path.h
index 1389fc491..0f4594340 100644
--- a/path.h
+++ b/path.h
@@ -25,7 +25,6 @@ extern char *codec_path;
char *get_path(const char *filename);
void set_path_env(void);
-void set_codec_path(const char *path);
const char *mp_basename(const char *path);
char *mp_dirname(const char *path);
char *mp_path_join(const char *base, const char *new_path);
--
2.11.0
More information about the MPlayer-dev-eng
mailing list