diff options
author | Milan Crha <mcrha@redhat.com> | 2011-09-15 20:54:31 +0800 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2011-09-21 21:50:41 +0800 |
commit | 1f8eabe94fa7ac101606bb441d267db1fbac09c6 (patch) | |
tree | b08a285a44d1a8f2ef23d4e28390da3e6909ae5a /calendar/gui | |
parent | 006efb8e1e25b064911c739ec5c1ddee06a9531f (diff) | |
download | gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.gz gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.zst gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.zip |
Bug #659125 - Reference counting issues in calendar
Diffstat (limited to 'calendar/gui')
-rw-r--r-- | calendar/gui/dialogs/comp-editor.c | 2 | ||||
-rw-r--r-- | calendar/gui/e-cal-model.c | 23 |
2 files changed, 20 insertions, 5 deletions
diff --git a/calendar/gui/dialogs/comp-editor.c b/calendar/gui/dialogs/comp-editor.c index 507076ea63..75a4766e9d 100644 --- a/calendar/gui/dialogs/comp-editor.c +++ b/calendar/gui/dialogs/comp-editor.c @@ -1588,6 +1588,8 @@ comp_editor_dispose (GObject *object) g_signal_handlers_disconnect_matched ( G_OBJECT (store), G_SIGNAL_MATCH_DATA, 0, 0, NULL, NULL, object); + g_object_unref (priv->attachment_view); + priv->attachment_view = NULL; } /* We want to destroy the pages after the widgets get destroyed, diff --git a/calendar/gui/e-cal-model.c b/calendar/gui/e-cal-model.c index 0c8c59bb9d..b7b56ebd10 100644 --- a/calendar/gui/e-cal-model.c +++ b/calendar/gui/e-cal-model.c @@ -2149,6 +2149,20 @@ typedef struct { icalcomponent *icalcomp; } RecurrenceExpansionData; +static void +free_rdata (gpointer data) +{ + RecurrenceExpansionData *rdata = data; + + if (!rdata) + return; + + g_object_unref (rdata->client); + g_object_unref (rdata->view); + g_object_unref (rdata->model); + g_free (rdata); +} + static gboolean add_instance_cb (ECalComponent *comp, time_t instance_start, @@ -2308,13 +2322,12 @@ process_added (ECalClientView *view, if (client_data) { RecurrenceExpansionData *rdata = g_new0 (RecurrenceExpansionData, 1); - rdata->client = client; - rdata->view = view; - rdata->model = model; - rdata->icalcomp = l->data; + rdata->client = g_object_ref (client); + rdata->view = g_object_ref (view); + rdata->model = g_object_ref (model); e_cal_client_generate_instances_for_object (rdata->client, l->data, priv->start, priv->end, client_data->cancellable, - (ECalRecurInstanceFn) add_instance_cb, rdata, g_free); + (ECalRecurInstanceFn) add_instance_cb, rdata, free_rdata); } } else { e_table_model_pre_change (E_TABLE_MODEL (model)); |