aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2011-09-15 20:54:31 +0800
committerRodrigo Moya <rodrigo@gnome-db.org>2011-09-21 21:50:41 +0800
commit1f8eabe94fa7ac101606bb441d267db1fbac09c6 (patch)
treeb08a285a44d1a8f2ef23d4e28390da3e6909ae5a
parent006efb8e1e25b064911c739ec5c1ddee06a9531f (diff)
downloadgsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar
gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.gz
gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.bz2
gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.lz
gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.xz
gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.tar.zst
gsoc2013-evolution-1f8eabe94fa7ac101606bb441d267db1fbac09c6.zip
Bug #659125 - Reference counting issues in calendar
-rw-r--r--calendar/gui/dialogs/comp-editor.c2
-rw-r--r--calendar/gui/e-cal-model.c23
-rw-r--r--modules/calendar/e-cal-shell-view-memopad.c1
-rw-r--r--modules/calendar/e-cal-shell-view-taskpad.c3
-rw-r--r--modules/calendar/e-memo-shell-backend.c3
-rw-r--r--modules/calendar/e-memo-shell-view-actions.c1
-rw-r--r--modules/calendar/e-task-shell-backend.c3
-rw-r--r--modules/calendar/e-task-shell-view-actions.c1
-rw-r--r--modules/calendar/e-task-shell-view-private.c2
9 files changed, 28 insertions, 11 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));
diff --git a/modules/calendar/e-cal-shell-view-memopad.c b/modules/calendar/e-cal-shell-view-memopad.c
index bd1e9d5ac8..4978ca2183 100644
--- a/modules/calendar/e-cal-shell-view-memopad.c
+++ b/modules/calendar/e-cal-shell-view-memopad.c
@@ -92,7 +92,6 @@ action_calendar_memopad_new_cb (GtkAction *action,
gtk_window_present (GTK_WINDOW (editor));
g_object_unref (comp);
- g_object_unref (client);
}
static void
diff --git a/modules/calendar/e-cal-shell-view-taskpad.c b/modules/calendar/e-cal-shell-view-taskpad.c
index 48c81ac085..92263c75e3 100644
--- a/modules/calendar/e-cal-shell-view-taskpad.c
+++ b/modules/calendar/e-cal-shell-view-taskpad.c
@@ -160,7 +160,6 @@ action_calendar_taskpad_new_cb (GtkAction *action,
gtk_window_present (GTK_WINDOW (editor));
g_object_unref (comp);
- g_object_unref (client);
}
static void
@@ -548,7 +547,7 @@ e_cal_shell_view_taskpad_open_task (ECalShellView *cal_shell_view,
editor = task_editor_new (comp_data->client, shell, flags);
comp_editor_edit_comp (editor, comp);
- g_object_ref (comp);
+ g_object_unref (comp);
if (flags & COMP_EDITOR_IS_ASSIGNED)
task_editor_show_assignment (TASK_EDITOR (editor));
diff --git a/modules/calendar/e-memo-shell-backend.c b/modules/calendar/e-memo-shell-backend.c
index 6f8070094e..7edb82d6bb 100644
--- a/modules/calendar/e-memo-shell-backend.c
+++ b/modules/calendar/e-memo-shell-backend.c
@@ -422,6 +422,8 @@ memo_shell_backend_handle_uri_cb (EShellBackend *shell_backend,
g_warning (
"%s: Failed to create/open client: %s",
G_STRFUNC, error->message);
+ if (client != NULL)
+ g_object_unref (client);
g_object_unref (source_list);
g_error_free (error);
goto exit;
@@ -443,6 +445,7 @@ memo_shell_backend_handle_uri_cb (EShellBackend *shell_backend,
"%s: Failed to get object: %s",
G_STRFUNC, error->message);
g_object_unref (source_list);
+ g_object_unref (client);
g_error_free (error);
goto exit;
}
diff --git a/modules/calendar/e-memo-shell-view-actions.c b/modules/calendar/e-memo-shell-view-actions.c
index eacb5c1da7..d71b893fe3 100644
--- a/modules/calendar/e-memo-shell-view-actions.c
+++ b/modules/calendar/e-memo-shell-view-actions.c
@@ -385,7 +385,6 @@ action_memo_new_cb (GtkAction *action,
gtk_window_present (GTK_WINDOW (editor));
g_object_unref (comp);
- g_object_unref (client);
}
static void
diff --git a/modules/calendar/e-task-shell-backend.c b/modules/calendar/e-task-shell-backend.c
index bb296fd5c2..f6a5e14588 100644
--- a/modules/calendar/e-task-shell-backend.c
+++ b/modules/calendar/e-task-shell-backend.c
@@ -422,6 +422,8 @@ task_shell_backend_handle_uri_cb (EShellBackend *shell_backend,
g_warning (
"%s: Failed to create/open client: %s",
G_STRFUNC, error->message);
+ if (client)
+ g_object_unref (client);
g_object_unref (source_list);
g_error_free (error);
goto exit;
@@ -443,6 +445,7 @@ task_shell_backend_handle_uri_cb (EShellBackend *shell_backend,
"%s: Failed to get object: %s",
G_STRFUNC, error->message);
g_object_unref (source_list);
+ g_object_unref (client);
g_error_free (error);
goto exit;
}
diff --git a/modules/calendar/e-task-shell-view-actions.c b/modules/calendar/e-task-shell-view-actions.c
index 1fb4867205..2fe28494ac 100644
--- a/modules/calendar/e-task-shell-view-actions.c
+++ b/modules/calendar/e-task-shell-view-actions.c
@@ -453,7 +453,6 @@ action_task_new_cb (GtkAction *action,
gtk_window_present (GTK_WINDOW (editor));
g_object_unref (comp);
- g_object_unref (client);
}
static void
diff --git a/modules/calendar/e-task-shell-view-private.c b/modules/calendar/e-task-shell-view-private.c
index b8122786f2..8c02ceccbc 100644
--- a/modules/calendar/e-task-shell-view-private.c
+++ b/modules/calendar/e-task-shell-view-private.c
@@ -445,7 +445,7 @@ e_task_shell_view_open_task (ETaskShellView *task_shell_view,
editor = task_editor_new (comp_data->client, shell, flags);
comp_editor_edit_comp (editor, comp);
- g_object_ref (comp);
+ g_object_unref (comp);
if (flags & COMP_EDITOR_IS_ASSIGNED)
task_editor_show_assignment (TASK_EDITOR (editor));