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. */