mp_msg: free iconv contexts at exit.
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Wed, 2 Mar 2016 22:08:46 +0000 (22:08 +0000)
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>
Wed, 2 Mar 2016 22:08:46 +0000 (22:08 +0000)
git-svn-id: svn://git.mplayerhq.hu/mplayer/trunk@37828 b3059339-0415-0410-9bf9-f77b7e298cf2

mencoder.c
mp_msg.c
mp_msg.h
mplayer.c

index 5faeacb..47659da 100644 (file)
@@ -1736,6 +1736,7 @@ if(stream) free_stream(stream); // kill cache thread
 if(mux_v) free(mux_v->buffer);
 if(mux_a) free(mux_a->buffer);
 common_uninit();
+mp_msg_uninit();
 
 return interrupted;
 }
index ec29a8e..c98a894 100644 (file)
--- a/mp_msg.c
+++ b/mp_msg.c
@@ -44,6 +44,7 @@ int mp_msg_module = 0;
 char *mp_msg_charset = NULL;
 static char *old_charset = NULL;
 static iconv_t msgiconv;
+static iconv_t inv_msgiconv = (iconv_t)(-1);
 #endif
 
 const char* filename_recode(const char* filename)
@@ -51,7 +52,6 @@ const char* filename_recode(const char* filename)
 #if !defined(CONFIG_ICONV) || !defined(MSG_CHARSET)
     return filename;
 #else
-    static iconv_t inv_msgiconv = (iconv_t)(-1);
     static char recoded_filename[MSGSIZE_MAX];
     size_t filename_len, max_path;
     char* precoded;
@@ -91,6 +91,17 @@ void mp_msg_init(void){
 #endif
 }
 
+void mp_msg_uninit(void)
+{
+#ifdef CONFIG_ICONV
+    if (old_charset) {
+        free(old_charset);
+        iconv_close(msgiconv);
+    }
+    if (inv_msgiconv != (iconv_t)(-1)) iconv_close(inv_msgiconv);
+#endif
+}
+
 int mp_msg_test(int mod, int lev)
 {
     return lev <= (mp_msg_levels[mod] == -2 ? mp_msg_level_all + verbose : mp_msg_levels[mod]);
index 69d3699..75093ec 100644 (file)
--- a/mp_msg.h
+++ b/mp_msg.h
@@ -138,6 +138,7 @@ extern int mp_msg_level_all;
 
 
 void mp_msg_init(void);
+void mp_msg_uninit(void);
 int mp_msg_test(int mod, int lev);
 
 #include "config.h"
index 5494b85..2c829cd 100644 (file)
--- a/mplayer.c
+++ b/mplayer.c
@@ -755,6 +755,8 @@ void exit_player_with_rc(enum exit_reason how, int rc)
         m_config_free(mconfig);
     mconfig = NULL;
 
+    mp_msg_uninit();
+
     exit(rc);
 }