diff src/audacious/playback.c @ 4109:2d6fd3f630f0

Adds playback_free() function to fix memory leak in playback_stop(). (Bugzilla #42)
author Jussi Judin <jjudin+audacious@iki.fi>
date Tue, 25 Dec 2007 00:53:33 -0600
parents 05e6d9db003c
children 2d4b4f13d10d
line wrap: on
line diff
--- a/src/audacious/playback.c	Tue Dec 25 00:46:07 2007 -0600
+++ b/src/audacious/playback.c	Tue Dec 25 00:53:33 2007 -0600
@@ -311,13 +311,7 @@
         free_vis_data();
         ip_data.paused = FALSE;
 
-        if (playback->pb_ready_mutex)
-            g_mutex_free(playback->pb_ready_mutex);
-        if (playback->pb_ready_cond)
-            g_cond_free(playback->pb_ready_cond);
-
-        g_free(playback->filename);
-        g_slice_free(InputPlayback, playback);
+        playback_free(playback);
         set_current_input_playback(NULL);
 #ifdef USE_DBUS
         mpris_emit_status_change(mpris, MPRIS_STATUS_STOP);
@@ -396,6 +390,27 @@
     return playback;
 }
 
+/**
+ * Destroys InputPlayback.
+ *
+ * Playback comes from playback_new() function but there can be also
+ * other sources for allocated playback data (like filename and title)
+ * and this tries to deallocate all that data.
+ */
+void playback_free(InputPlayback *playback)
+{
+    g_free(playback->filename);
+    g_free(playback->title);
+
+    g_mutex_free(playback->pb_ready_mutex);
+    g_cond_free(playback->pb_ready_cond);
+
+    g_mutex_free(playback->pb_change_mutex);
+    g_cond_free(playback->pb_change_cond);
+
+    g_slice_free(InputPlayback, playback);
+}
+
 void
 playback_run(InputPlayback *playback)
 {