pidgin/pidgin

Fix leaks in debug window

14 months ago, Elliott Sales de Andrade
27c84f0b3258
Parents bc9f3f1dd14b
Children 23dae27bd7ca
Fix leaks in debug window

Fixes two leaks from the debug window:
```
22 bytes in 1 blocks are definitely lost in loss record 7,038 of 41,972
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x4980168: g_malloc (gmem.c:130)
by 0x4995602: g_strdup (gstrfuncs.c:363)
by 0x4CFB782: purple_prefs_connect_callback (prefs.c:1301)
by 0x48AA524: pidgin_debug_init (pidgindebug.c:918)
by 0x48B8F9E: pidgin_ui_start (pidginui.c:146)
by 0x4D37B01: purple_ui_start (purpleui.c:397)
by 0x4CE3BA6: purple_core_init (core.c:211)
by 0x48A384F: pidgin_application_startup (pidginapplication.c:820)
by 0x4DD3553: UnknownInlinedFun (gclosure.c:895)
by 0x4DD3553: g_signal_emit_valist (gsignal.c:3456)
by 0x4DD3632: g_signal_emit (gsignal.c:3606)
by 0x5815B82: g_application_register (gapplication.c:2211)
```
and
```
32 bytes in 1 blocks are definitely lost in loss record 15,308 of 41,972
at 0x484386F: malloc (vg_replace_malloc.c:393)
by 0x4980168: g_malloc (gmem.c:130)
by 0x4997AB5: g_slice_alloc (gslice.c:1074)
by 0x495E14C: UnknownInlinedFun (gdatetime.c:678)
by 0x495E14C: g_date_time_from_instant (gdatetime.c:774)
by 0x495F4E9: g_date_time_new_now_local (gdatetime.c:989)
by 0x48A82F9: save_response_cb (pidgindebug.c:136)
by 0x4DB4375: g_cclosure_marshal_VOID__INTv (gmarshal.c:596)
by 0x4DD3553: UnknownInlinedFun (gclosure.c:895)
by 0x4DD3553: g_signal_emit_valist (gsignal.c:3456)
by 0x4DD3632: g_signal_emit (gsignal.c:3606)
by 0x4DB5FBF: g_closure_invoke (gclosure.c:832)
by 0x4DE3D85: signal_emit_unlocked_R.isra.0 (gsignal.c:3796)
by 0x4DD3419: g_signal_emit_valist (gsignal.c:3549)
```

Testing Done:
Ran in valgrind, saved the debug logs to a file, and the above leaks were gone.

Reviewed at https://reviews.imfreedom.org/r/2304/
--- a/pidgin/pidgindebug.c Thu Mar 02 23:57:17 2023 -0600
+++ b/pidgin/pidgindebug.c Thu Mar 02 23:58:21 2023 -0600
@@ -77,6 +77,7 @@
static gboolean debug_print_enabled = FALSE;
static PidginDebugWindow *debug_win = NULL;
+static guint pref_callback_id = 0;
static guint debug_enabled_timer = 0;
G_DEFINE_TYPE(PidginDebugWindow, pidgin_debug_window, GTK_TYPE_WINDOW);
@@ -135,6 +136,7 @@
date = g_date_time_new_now_local();
date_str = g_date_time_format(date, "%c");
+ g_date_time_unref(date);
tmp = g_strdup_printf("Pidgin Debug Log : %s\n", date_str);
g_output_stream_write_all(G_OUTPUT_STREAM(output), tmp, strlen(tmp),
@@ -915,14 +917,19 @@
purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/debug/case_insensitive", FALSE);
purple_prefs_add_bool(PIDGIN_PREFS_ROOT "/debug/highlight", FALSE);
- purple_prefs_connect_callback(NULL, PIDGIN_PREFS_ROOT "/debug/enabled",
- debug_enabled_cb, NULL);
+ pref_callback_id = purple_prefs_connect_callback(NULL,
+ PIDGIN_PREFS_ROOT "/debug/enabled",
+ debug_enabled_cb, NULL);
}
void
pidgin_debug_uninit(void)
{
- if (debug_enabled_timer != 0) {
+ if(pref_callback_id != 0) {
+ purple_prefs_disconnect_callback(pref_callback_id);
+ }
+ pref_callback_id = 0;
+ if(debug_enabled_timer != 0) {
g_source_remove(debug_enabled_timer);
}
debug_enabled_timer = 0;