timeloop-closure: Fix leaks in test
authorStef Walter <stefw@gnome.org>
Sun, 10 Nov 2013 14:57:12 +0000 (15:57 +0100)
committerStef Walter <stefw@gnome.org>
Mon, 11 Nov 2013 06:27:15 +0000 (07:27 +0100)
https://bugzilla.gnome.org/show_bug.cgi?id=711779

tests/gobject/timeloop-closure.c

index 13ce760..9de00d3 100644 (file)
@@ -122,9 +122,6 @@ input_callback (GIOChannel   *source,
     {
       g_io_channel_close (source);
       g_io_channel_close (dest);
-      
-      g_io_channel_unref (source);
-      g_io_channel_unref (dest);
 
       n_active_children--;
       if (n_active_children == 0)
@@ -154,8 +151,15 @@ create_child (void)
 
       source = g_io_create_watch (out_channels[0], G_IO_IN | G_IO_HUP);
       g_source_set_closure (source,
-                           g_cclosure_new (G_CALLBACK (input_callback), in_channels[1], NULL));
+                            g_cclosure_new (G_CALLBACK (input_callback), in_channels[1],
+                                            (GClosureNotify)g_io_channel_unref));
       g_source_attach (source, NULL);
+      g_source_unref (source);
+
+      g_io_channel_unref (in_channels[0]);
+      g_io_channel_unref (out_channels[0]);
+      g_io_channel_unref (out_channels[1]);
+
     }
   else if (pid == 0)           /* Child */
     {
@@ -216,5 +220,7 @@ main (int argc, char **argv)
           difftimeval (&old_usage.ru_stime, &new_usage.ru_stime)) /
          (n_iters * n_children));
 
+  g_main_loop_unref (loop);
+
   return 0;
 }