Hi,

> I connect my camera and start gtkam. On the left side I select the
> camera and after clicking on a folder to display the pictures in this
> folder I receive the following backtrace.
>
> Program received signal SIGSEGV, Segmentation fault.
> [Switching to Thread -1219098944 (LWP 8863)]
> 0xb7800f91 in gp_list_reset () from /usr/lib/libgphoto2.so.2
> (gdb) bt
> #0  0xb7800f91 in gp_list_reset () from /usr/lib/libgphoto2.so.2
> #1  0xb77f60f1 in gp_camera_folder_list_files ()
> from /usr/lib/libgphoto2.so.2
> #2  0x0805887f in ?? ()
> #3  0x0821b728 in ?? ()
> #4  0x082b07a0 in ?? ()
> #5  0xbfff7bc8 in ?? ()
> #6  0x082afaf0 in ?? ()
> #7  0x00000001 in ?? ()
> #8  0x00000000 in ?? ()
>
> Downgrading to 0.1.12-2.2
>
> $ sudo dpkg -i /var/cache/apt/archives/gtkam_0.1.12-2.2_i386.deb
>
> solves the problem for me.

I got same problem.
gtkam crashes with SIGSEGV after upgrade to 0.1.12-2.3.

I have researched why gtkam crashes and how to fix this problem.
The changes between 0.1.12-2.2 and 0.1.12-2.3 is
just replacing 'CameraList' to 'CameraList*' to fix FTBFS(#422385) as follow.
#422385 - gtkam: FTBFS: gtkam-chooser.c:431: error: storage size of 'list' isn't
known - Debian Bug report logs
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=422385

Unfortunately, it was wrong.
Some variable declarations has been changed, but references to that variable not
changed.
For example, once 'CameraList flist' replaced with 'CameraList *flist',
it is necessary to replace '&flist' with 'flist' too.


I have attached a patch to fix this bug.

FYI, I have referenced upstream's SVN revision 9361 to make this patch.
SourceForge.net Repository - [gphoto] Revision 9361
http://gphoto.svn.sourceforge.net/viewvc/gphoto?view=rev&revision=9361


Additionally, there is a newer upstream release as #432097 said.
Updating to it will also resolves this problem.


Thanks,
Morita Sho

diff -ur gtkam-0.1.12.old/src/gtkam-chooser.c gtkam-0.1.12/src/gtkam-chooser.c
--- gtkam-0.1.12.old/src/gtkam-chooser.c	2007-07-28 17:47:47.000000000 +0900
+++ gtkam-0.1.12/src/gtkam-chooser.c	2007-07-28 17:44:35.000000000 +0900
@@ -434,19 +434,20 @@
 
 	status = gtkam_status_new (_("Detecting cameras..."));
 	gtkam_dialog_add_status (GTKAM_DIALOG (chooser), status);
+	gp_list_new (&list);
 	result = gp_abilities_list_detect (chooser->priv->al,
-		chooser->priv->il, &list,
+		chooser->priv->il, list,
 		GTKAM_STATUS (status)->context->context);
 	switch (result) {
 	case GP_OK:
-		if (!gp_list_count (&list)) {
+		if (!gp_list_count (list)) {
 			d = gtkam_close_new (_("No cameras detected."));
 			gtk_window_set_transient_for (GTK_WINDOW (d),
 						      GTK_WINDOW (chooser));
 			gtk_widget_show (d);
 		} else {
 			/* FIXME: Let user choose from the list */
-			gp_list_get_name (&list, 0, &name);
+			gp_list_get_name (list, 0, &name);
 			gtk_entry_set_text (chooser->priv->entry_model, name);
 			gtk_entry_set_text (chooser->priv->entry_port,
 					"Universal Serial Bus (usb:)");
@@ -461,6 +462,7 @@
 		gtk_widget_show (d);
 		break;
 	}
+	gp_list_unref (list);
 	gtk_object_destroy (GTK_OBJECT (status));
 }
 
diff -ur gtkam-0.1.12.old/src/gtkam-delete.c gtkam-0.1.12/src/gtkam-delete.c
--- gtkam-0.1.12.old/src/gtkam-delete.c	2007-07-28 17:47:47.000000000 +0900
+++ gtkam-0.1.12/src/gtkam-delete.c	2007-07-28 17:46:58.000000000 +0900
@@ -179,7 +179,8 @@
 	gtk_widget_show (s);
 	gtk_box_pack_start (GTK_BOX (GTK_DIALOG (delete)->vbox), s,
 			    FALSE, FALSE, 0);
-	r1 = gp_camera_folder_list_files (camera->camera, folder, &l1, NULL);
+	gp_list_new (&l1);
+	r1 = gp_camera_folder_list_files (camera->camera, folder, l1, NULL);
 	result = gp_camera_folder_delete_all (camera->camera, folder,
 					GTKAM_STATUS (s)->context->context);
 	switch (result) {
@@ -200,13 +201,14 @@
 		gtk_widget_show (d);
 		gtk_object_destroy (GTK_OBJECT (s));
 
+		gp_list_new (&l2);
 		/* See what files have been deleted */
 		r2 = gp_camera_folder_list_files (camera->camera, folder,
-						  &l2, NULL);
+						  l2, NULL);
 		if ((r1 == GP_OK) && (r2 == GP_OK)) {
-			for (r1 = 0; r1 < gp_list_count (&l1); r1++) {
-				gp_list_get_name (&l1, r1, &name);
-				if (gp_list_lookup_name (&l2, name) >= 0) {
+			for (r1 = 0; r1 < gp_list_count (l1); r1++) {
+				gp_list_get_name (l1, r1, &name);
+				if (gp_list_lookup_name (l2, name) >= 0) {
 					fdd.camera = camera;
 					fdd.folder = folder;
 					fdd.name = name;
@@ -216,8 +218,10 @@
 				}
 			}
 		}
+		gp_list_unref (l2);
 		return (FALSE);
 	}
+	gp_list_unref (l1);
 }
 
 static gboolean
diff -ur gtkam-0.1.12.old/src/gtkam-list.c gtkam-0.1.12/src/gtkam-list.c
--- gtkam-0.1.12.old/src/gtkam-list.c	2007-07-28 17:47:47.000000000 +0900
+++ gtkam-0.1.12/src/gtkam-list.c	2007-07-28 17:45:24.000000000 +0900
@@ -994,7 +994,8 @@
 
 	s = gtkam_status_new (_("Listing files in folder '%s'..."), folder);
 	g_signal_emit (G_OBJECT (list), signals[NEW_STATUS], 0, s);
-	result = gp_camera_folder_list_files (camera->camera, folder, &flist,
+	gp_list_new (&flist);
+	result = gp_camera_folder_list_files (camera->camera, folder, flist,
 					GTKAM_STATUS (s)->context->context);
 	switch (result) {
 	case GP_OK:
@@ -1016,13 +1017,14 @@
 	}
 	gtk_object_destroy (GTK_OBJECT (s));
 
-	for (i = 0; i < gp_list_count (&flist); i++) {
-		gp_list_get_name (&flist, i, &name);
+	for (i = 0; i < gp_list_count (flist); i++) {
+		gp_list_get_name (flist, i, &name);
 		gtk_list_store_append (list->priv->store, &iter);
 		gtk_list_store_set (list->priv->store, &iter,
 			NAME_COLUMN, name, FOLDER_COLUMN, folder,
 			CAMERA_COLUMN, camera, IS_EDITABLE_COLUMN, TRUE, -1);
 	}
+	gp_list_unref (flist);
 
 	if (camera->multi)
 		gp_camera_exit (camera->camera, NULL);

Reply via email to