1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-12-04 14:46:46 -05:00

Fix few memory leaks

This commit is contained in:
Dmitry Podgorny 2020-02-27 01:35:36 +02:00
parent 779c2efc17
commit d18ec23d0a
3 changed files with 31 additions and 6 deletions

View File

@ -80,7 +80,7 @@ static const char* _get_key(preference_t pref);
static gboolean _get_default_boolean(preference_t pref); static gboolean _get_default_boolean(preference_t pref);
static char* _get_default_string(preference_t pref); static char* _get_default_string(preference_t pref);
void _prefs_load(void) static void _prefs_load(void)
{ {
GError *err = NULL; GError *err = NULL;
log_maxsize = g_key_file_get_integer(prefs, PREF_GROUP_LOGGING, "maxsize", &err); log_maxsize = g_key_file_get_integer(prefs, PREF_GROUP_LOGGING, "maxsize", &err);
@ -166,9 +166,23 @@ void _prefs_load(void)
g_strfreev(triggers); g_strfreev(triggers);
} }
/* Clean up after _prefs_load() */
static void _prefs_close(void)
{
autocomplete_free(boolean_choice_ac);
autocomplete_free(room_trigger_ac);
}
void void
prefs_reload(void) prefs_reload(void)
{ {
/*
* Current function contains copy-paste, but we wanted to avoid config_file
* manipulation from prefs_load/prefs_close
*/
_prefs_close();
g_key_file_free(prefs); g_key_file_free(prefs);
prefs = NULL; prefs = NULL;
@ -185,7 +199,7 @@ prefs_load(char *config_file)
if (config_file == NULL) { if (config_file == NULL) {
prefs_loc = files_get_config_path(FILE_PROFRC); prefs_loc = files_get_config_path(FILE_PROFRC);
} else { } else {
prefs_loc = config_file; prefs_loc = strdup(config_file);
} }
if (g_file_test(prefs_loc, G_FILE_TEST_EXISTS)) { if (g_file_test(prefs_loc, G_FILE_TEST_EXISTS)) {
@ -207,8 +221,7 @@ prefs_save(void)
void void
prefs_close(void) prefs_close(void)
{ {
autocomplete_free(boolean_choice_ac); _prefs_close();
autocomplete_free(room_trigger_ac);
g_key_file_free(prefs); g_key_file_free(prefs);
prefs = NULL; prefs = NULL;

View File

@ -60,7 +60,7 @@
#include "command/cmd_defs.h" #include "command/cmd_defs.h"
static gboolean version = FALSE; static gboolean version = FALSE;
static char *log = "INFO"; static char *log = NULL;
static char *log_file = NULL; static char *log_file = NULL;
static char *account_name = NULL; static char *account_name = NULL;
static char *config_file = NULL; static char *config_file = NULL;
@ -175,7 +175,17 @@ main(int argc, char **argv)
return 0; return 0;
} }
prof_run(log, account_name, config_file, log_file); prof_run(log ? log : "INFO", account_name, config_file, log_file);
/* Free resources allocated by GOptionContext */
if (log)
g_free(log);
if (account_name)
g_free(account_name);
if (config_file)
g_free(config_file);
if (log_file)
g_free(log_file);
return 0; return 0;
} }

View File

@ -252,6 +252,7 @@ iq_handlers_clear()
{ {
if (id_handlers) { if (id_handlers) {
g_hash_table_remove_all(id_handlers); g_hash_table_remove_all(id_handlers);
g_hash_table_destroy(id_handlers);
id_handlers = NULL; id_handlers = NULL;
} }
} }
@ -340,6 +341,7 @@ iq_rooms_cache_clear(void)
{ {
if (rooms_cache) { if (rooms_cache) {
g_hash_table_remove_all(rooms_cache); g_hash_table_remove_all(rooms_cache);
g_hash_table_destroy(rooms_cache);
rooms_cache = NULL; rooms_cache = NULL;
} }
} }