On 10/06/2010 12:29 PM, Denys Vlasenko wrote:
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.
- ah, sorry, I misunderstood, now it makes sense..
>>> +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.