1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
  
     | 
    
      #! /bin/sh /usr/share/dpatch/dpatch-run
## 002-g_object_unref.dpatch by Maximiliano Curia <maxy@debian.org>
##
## DP: Fixes a major memory leakage
@DPATCH@
diff -urNad gmotionlive-1.0~/gmotionlive.c gmotionlive-1.0/gmotionlive.c
--- gmotionlive-1.0~/gmotionlive.c	2005-04-12 05:52:11.000000000 -0300
+++ gmotionlive-1.0/gmotionlive.c	2008-07-15 15:55:31.000000000 -0300
@@ -86,7 +86,6 @@
 	if (!newpixbuf)
 		return;
 	gtk_image_set_from_pixbuf(GTK_IMAGE(gtkimage), newpixbuf);
-	g_object_unref(newpixbuf);
 	gtk_widget_show(gtkimage);
 	gtk_window_resize(GTK_WINDOW(window), 100, 100);
 	gtk_widget_show_all(window);
@@ -131,6 +130,8 @@
 						i++;
 						netcam_linesize = 0;
 						netcam_state = NETCAM_STATE_DATA;
+						if ( pixbufloader )
+							g_object_unref(pixbufloader);
 						pixbufloader = gdk_pixbuf_loader_new();
 						if (!pixbufloader) {
 							g_print("ohoh6\n");
@@ -194,9 +195,11 @@
 					i += j;
 			}
 			if (netcam_state == NETCAM_STATE_START) {
-					netcam_linesize = 1;
-					netcam_line[0] = 0;
+				netcam_linesize = 1;
+				netcam_line[0] = 0;
+				if ( G_IS_OBJECT(pixbufloader) ) {
 					gdk_pixbuf_loader_close(pixbufloader, NULL);
+				}
 			}
 			memcpy(boundarystart + boundoff, start + checklen, netcam_boundarylen);
 		}
 
     |