On Fri, 2010-09-24 at 17:44 +0200, Nikola Pajkovsky wrote:
Signed-off-by: Nikola Pajkovsky <npajkovs(a)redhat.com>
---
src/daemon/Daemon.cpp | 1 +
src/daemon/Settings.cpp | 13 +++++++++++--
src/daemon/Settings.h | 5 ++++-
src/daemon/abrt-action-save-package-data.cpp | 7 +++----
4 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/src/daemon/Daemon.cpp b/src/daemon/Daemon.cpp
index 8ab9991..4cecae1 100644
--- a/src/daemon/Daemon.cpp
+++ b/src/daemon/Daemon.cpp
@@ -1114,6 +1114,7 @@ int main(int argc, char** argv)
if (pMainloop)
g_main_loop_unref(pMainloop);
+ settings_free();
/* Exiting */
if (s_sig_caught && s_sig_caught != SIGALRM && s_sig_caught !=
SIGCHLD)
{
diff --git a/src/daemon/Settings.cpp b/src/daemon/Settings.cpp
index a77e482..a6d59f5 100644
--- a/src/daemon/Settings.cpp
+++ b/src/daemon/Settings.cpp
@@ -51,7 +51,7 @@ static map_string_t s_mapSectionCron;
/* one line: "OpenGPGCheck = value" */
bool g_settings_bOpenGPGCheck = false;
/* one line: "OpenGPGPublicKeys = value1,value2" */
-set_string_t g_settings_setOpenGPGPublicKeys;
+GList *g_settings_setOpenGPGPublicKeys = NULL;
set_string_t g_settings_setBlackListedPkgs;
set_string_t g_settings_setBlackListedPaths;
std::string g_settings_sDatabase;
@@ -348,7 +348,7 @@ static void LoadGPGKeys()
if (line[0] == '/') // probably the begining of path, so let's
handle it as a key
{
strchrnul(line, '\n')[0] = '\0';
- g_settings_setOpenGPGPublicKeys.insert(line);
+ g_settings_setOpenGPGPublicKeys =
g_list_append(g_settings_setOpenGPGPublicKeys, xstrdup(line));
}
}
fclose(fp);
@@ -559,3 +559,12 @@ void SetSettings(const map_abrt_settings_t& pSettings, const
char *dbus_sender)
ParseCron();
}
}
+
+void settings_free()
+{
+ for (GList *li = g_settings_setOpenGPGPublicKeys; li != NULL; li = g_list_next(li))
+ free((char*)li->data);
+
+ g_list_free(g_settings_setOpenGPGPublicKeys);
+
+}
Please also set g_settings_setOpenGPGPublicKeys = NULL so that
settings_free() can be called many times without double free()
errors.
--
vda