From 38edc1c3253a2e8100426b3100045a5326a12088 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Tue, 9 Jul 2019 16:04:27 +0200 Subject: [PATCH] Add destructor for roster_pending_presence Fix: ``` ==18682== 408 bytes in 17 blocks are definitely lost in loss record 3,279 of 3,632 ==18682== at 0x483677F: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so) ==18682== by 0x42F602: roster_update_presence (roster_list.c:129) ==18682== by 0x448AA3: sv_ev_contact_online (server_events.c:906) ==18682== by 0x43D2BA: _available_handler (presence.c:674) ==18682== by 0x43C81B: _presence_handler (presence.c:398) ==18682== by 0x5AF118E: handler_fire_stanza (handler.c:124) ==18682== by 0x5AEDBDA: _handle_stream_stanza (conn.c:1253) ==18682== by 0x5AFA43E: _end_element (parser_expat.c:190) ==18682== by 0x6818AA4: doContent (xmlparse.c:2977) ==18682== by 0x681A3AB: contentProcessor (xmlparse.c:2552) ==18682== by 0x681D7EB: XML_ParseBuffer (xmlparse.c:1988) ==18682== by 0x681D7EB: XML_ParseBuffer (xmlparse.c:1957) ==18682== by 0x5AF0A63: xmpp_run_once (event.c:255) ==18682== by 0x432E5D: connection_check_events (connection.c:104) ==18682== by 0x4323B3: session_process_events (session.c:255) ==18682== by 0x42C097: prof_run (profanity.c:128) ==18682== by 0x4B25B9: main (main.c:172) ``` --- src/xmpp/roster_list.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/xmpp/roster_list.c b/src/xmpp/roster_list.c index 7954e3de..920691d6 100644 --- a/src/xmpp/roster_list.c +++ b/src/xmpp/roster_list.c @@ -688,6 +688,15 @@ roster_compare_presence(PContact a, PContact b) } } +static void +_pendingPresence_free(ProfPendingPresence *presence) +{ + if (!presence) + return; + free(presence->barejid); + free(presence); +} + void roster_process_pending_presence(void) { @@ -704,7 +713,7 @@ roster_process_pending_presence(void) } } - g_slist_free(roster_pending_presence); + g_slist_free_full(roster_pending_presence, (GDestroyNotify)_pendingPresence_free); roster_pending_presence = NULL; }