Blob Blame History Raw
diff -up evolution-data-server-3.10.4/calendar/backends/weather/e-cal-backend-weather.c.weather-calendar-crash evolution-data-server-3.10.4/calendar/backends/weather/e-cal-backend-weather.c
--- evolution-data-server-3.10.4/calendar/backends/weather/e-cal-backend-weather.c.weather-calendar-crash	2013-12-08 19:43:28.000000000 +0100
+++ evolution-data-server-3.10.4/calendar/backends/weather/e-cal-backend-weather.c	2014-02-20 08:46:00.858247045 +0100
@@ -737,19 +737,35 @@ e_cal_backend_weather_notify_online_cb (
 		e_cal_backend_set_writable (backend, FALSE);
 }
 
-/* Finalize handler for the weather backend */
 static void
-e_cal_backend_weather_finalize (GObject *object)
+e_cal_backend_weather_dispose (GObject *object)
 {
 	ECalBackendWeatherPrivate *priv;
 
 	priv = E_CAL_BACKEND_WEATHER_GET_PRIVATE (object);
 
-	if (priv->reload_timeout_id)
+	if (priv->reload_timeout_id) {
 		g_source_remove (priv->reload_timeout_id);
+		priv->reload_timeout_id = 0;
+	}
 
-	if (priv->begin_retrival_id)
+	if (priv->begin_retrival_id) {
 		g_source_remove (priv->begin_retrival_id);
+		priv->begin_retrival_id = 0;
+	}
+
+	g_clear_object (&priv->source);
+
+	/* Chain up to parent's dispose() method. */
+	G_OBJECT_CLASS (e_cal_backend_weather_parent_class)->dispose (object);
+}
+
+static void
+e_cal_backend_weather_finalize (GObject *object)
+{
+	ECalBackendWeatherPrivate *priv;
+
+	priv = E_CAL_BACKEND_WEATHER_GET_PRIVATE (object);
 
 	if (priv->store) {
 		g_object_unref (priv->store);
@@ -785,6 +801,7 @@ e_cal_backend_weather_class_init (ECalBa
 	backend_class = (ECalBackendClass *) class;
 	sync_class = (ECalBackendSyncClass *) class;
 
+	object_class->dispose = e_cal_backend_weather_dispose;
 	object_class->finalize = e_cal_backend_weather_finalize;
 
 	/* Execute one method at a time. */