[evolution-patches] Re: Valgrind Output



I think I've managed to fix this problem but I'm unable to run evolution
under valgrind on my laptop (not really powerful enough).

What I did was to unhook emfv_list_selection_change() from the
message-list's selection_change signal in the ::destroy() method

that should prevent the emission of the view_changed signal and thus
prevent this invalid read. Or so I assume...

Jeff

On Thu, 2005-02-10 at 11:39 -0700, JP Rosevear wrote
> ==17192== Invalid write of size 4
> ==17192==    at 0x3418696B: e_info_label_set_info (e-info-label.c:149)
> ==17192==    by 0x35F1E117: view_changed_cb (mail-component.c:536)
> ==17192==    by 0x35624C2F: IA__g_cclosure_marshal_VOID__VOID
> (gmarshal.c:77)
> ==17192==    by 0x3560F882: IA__g_closure_invoke (gclosure.c:437)
> ==17192==    by 0x35624259: signal_emit_unlocked_R (gsignal.c:2485)
> ==17192==    by 0x3562345A: IA__g_signal_emit_valist (gsignal.c:2244)
> ==17192==    by 0x3562378B: IA__g_signal_emit (gsignal.c:2288)
> ==17192==    by 0x35EFA497: emfv_list_selection_change
> (em-folder-view.c:2185)
> ==17192==    by 0x35624C2F: IA__g_cclosure_marshal_VOID__VOID
> (gmarshal.c:77)
> ==17192==    by 0x3560F882: IA__g_closure_invoke (gclosure.c:437)
> ==17192==    by 0x35624259: signal_emit_unlocked_R (gsignal.c:2485)
> ==17192==    by 0x3562345A: IA__g_signal_emit_valist (gsignal.c:2244)
> ==17192==    by 0x3562378B: IA__g_signal_emit (gsignal.c:2288)
> ==17192==    by 0x3463214B: et_selection_model_selection_changed
> (e-tree.c:953)
> ==17192==    by 0x35624C2F: IA__g_cclosure_marshal_VOID__VOID
> (gmarshal.c:77)
> ==17192==    by 0x3560F882: IA__g_closure_invoke (gclosure.c:437)
> ==17192==    by 0x35624259: signal_emit_unlocked_R (gsignal.c:2485)
> ==17192==    by 0x3562345A: IA__g_signal_emit_valist (gsignal.c:2244)
> ==17192==    by 0x3562378B: IA__g_signal_emit (gsignal.c:2288)
> ==17192==    by 0x345D488F: e_selection_model_selection_changed
> (e-selection-model.c:678)
> 
> -JP
? invalmemread.patch
? default/zh_CN/Makefile
? default/zh_CN/Makefile.in
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/evolution/mail/ChangeLog,v
retrieving revision 1.3574
diff -u -r1.3574 ChangeLog
--- ChangeLog	10 Feb 2005 05:27:00 -0000	1.3574
+++ ChangeLog	10 Feb 2005 22:08:48 -0000
@@ -1,3 +1,9 @@
+2005-02-10  Jeffrey Stedfast  <fejj novell com>
+
+	* em-folder-view.c (emfv_init): Save the "selection_change" signal
+	id so we can disconnect at destroy time.
+	(emfv_destroy): Disconnect from the signal.
+
 2005-02-10  Not Zed  <NotZed Ximian com>
 
 	** See bug #72266
Index: em-folder-view.c
===================================================================
RCS file: /cvs/gnome/evolution/mail/em-folder-view.c,v
retrieving revision 1.107
diff -u -r1.107 em-folder-view.c
--- em-folder-view.c	9 Feb 2005 06:01:09 -0000	1.107
+++ em-folder-view.c	10 Feb 2005 22:08:48 -0000
@@ -132,6 +132,7 @@
 struct _EMFolderViewPrivate {
 	guint seen_id;
 	guint setting_notify_id;
+	guint selection_changed_id;
 	int nomarkseen:1;
 	int destroyed:1;
 
@@ -184,7 +185,7 @@
 	g_signal_connect(emfv->list->tree, "right_click", G_CALLBACK(emfv_list_right_click), emfv);
 	g_signal_connect(emfv->list->tree, "double_click", G_CALLBACK(emfv_list_double_click), emfv);
 	g_signal_connect(emfv->list->tree, "key_press", G_CALLBACK(emfv_list_key_press), emfv);
-	g_signal_connect(emfv->list->tree, "selection_change", G_CALLBACK(emfv_list_selection_change), emfv);
+	p->selection_changed_id = g_signal_connect(emfv->list->tree, "selection_change", G_CALLBACK(emfv_list_selection_change), emfv);
 
 	emfv->preview = (EMFormatHTMLDisplay *)em_format_html_display_new();
 	/* FIXME: set_session should NOT be called here.  Should it be a constructor attribute? */
@@ -237,6 +238,11 @@
 		gconf_client_notify_remove(gconf, p->setting_notify_id);
 		p->setting_notify_id = 0;
 		g_object_unref(gconf);
+	}
+
+	if (p->selection_changed_id) {
+		g_signal_handler_disconnect (emfv->list, p->selection_changed_id);
+		p->selection_changed_id = 0;
 	}
 
 	if (emfv->folder) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]