On 10/05/2010 06:16 PM, Denys Vlasenko wrote:
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;
- it's already here ^
> 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.