about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorMichael Vetter <jubalh@iodoru.org>2019-07-09 16:04:27 +0200
committerMichael Vetter <jubalh@iodoru.org>2019-07-09 16:04:27 +0200
commit38edc1c3253a2e8100426b3100045a5326a12088 (patch)
tree423a2945cebf2e005f130d34fa8251c0338bdc21 /src
parent80ac245b8982a703c4c0bb7504c11b9ad15e4165 (diff)
downloadprofani-tty-38edc1c3253a2e8100426b3100045a5326a12088.tar.gz
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)
```
Diffstat (limited to 'src')
-rw-r--r--src/xmpp/roster_list.c11
1 files changed, 10 insertions, 1 deletions
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;
 }