[evolution-patches] Re: Valgrind Output
- From: Jeffrey Stedfast <fejj novell com>
- To: JP Rosevear <jpr novell com>
- Cc: evolution-patches ximian com, Michael Zucchi <notzed ximian com>
- Subject: [evolution-patches] Re: Valgrind Output
- Date: Thu, 10 Feb 2005 17:09:31 -0500
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]