On Wed, 2010-10-06 at 10:02 +0200, Jiri Moskovcak wrote:
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 ^
I meant, that settings_free() should not only do
free(g_settings_setOpenGPGPublicKeys);
but also should do
g_settings_setOpenGPGPublicKeys = NULL;
Otherwise calling settings_free() twice will cause double-free
and likely segfault.
>> +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