From cf4dbf9ee3790b9cf5e146594fa851757cd89881 Mon Sep 17 00:00:00 2001 From: Damon Chaplin Date: Tue, 30 Oct 2001 01:37:52 +0000 Subject: ref the ECalendarItem and check if it gets destroyed, to try to avoid a 2001-10-29 Damon Chaplin * e-calendar-item.c (e_calendar_item_signal_emission_idle_cb): ref the ECalendarItem and check if it gets destroyed, to try to avoid a free memory write. * e-dateedit.c (e_date_edit_set_time_of_day): allow setting the time to empty by passing hour as -1. svn path=/trunk/; revision=14394 --- widgets/misc/e-calendar-item.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) (limited to 'widgets/misc/e-calendar-item.c') diff --git a/widgets/misc/e-calendar-item.c b/widgets/misc/e-calendar-item.c index 48febd1f23..9c52e2d9bf 100644 --- a/widgets/misc/e-calendar-item.c +++ b/widgets/misc/e-calendar-item.c @@ -2889,18 +2889,26 @@ e_calendar_item_signal_emission_idle_cb (gpointer data) calitem->signal_emission_idle_id = 0; + /* We ref the calitem & check in case it gets destroyed, since we + were getting a free memory write here. */ + gtk_object_ref (calitem); + if (calitem->date_range_changed) { + calitem->date_range_changed = FALSE; gtk_signal_emit (GTK_OBJECT (calitem), e_calendar_item_signals[DATE_RANGE_CHANGED]); - calitem->date_range_changed = FALSE; } - if (calitem->selection_changed) { + if (GTK_OBJECT_DESTROYED (calitem)) { + g_warning ("e_calendar_item_signal_emission_idle_cb: item destroyed"); + } else if (calitem->selection_changed) { + calitem->selection_changed = FALSE; gtk_signal_emit (GTK_OBJECT (calitem), e_calendar_item_signals[SELECTION_CHANGED]); - calitem->selection_changed = FALSE; } + gtk_object_unref (calitem); + GDK_THREADS_LEAVE (); return FALSE; } -- cgit v1.2.3