aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMilan Crha <mcrha@redhat.com>2011-04-21 15:49:50 +0800
committerMilan Crha <mcrha@redhat.com>2011-04-21 15:49:50 +0800
commit78f83f5811bc58678957c4995b5ed88417ccb2a1 (patch)
tree6dc535b82dc7bc802e2273fb8a504d869df5c21a
parenteda1599271759c9fe298729a63c6f56d5cd9fccb (diff)
downloadgsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.tar
gsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.tar.gz
gsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.tar.bz2
gsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.tar.lz
gsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.tar.xz
gsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.tar.zst
gsoc2013-evolution-78f83f5811bc58678957c4995b5ed88417ccb2a1.zip
Bug #641154 - Crash in emae_check_authtype_done
-rw-r--r--mail/em-account-editor.c24
1 files changed, 22 insertions, 2 deletions
diff --git a/mail/em-account-editor.c b/mail/em-account-editor.c
index 55ffb3ac57..f8f1fbe44a 100644
--- a/mail/em-account-editor.c
+++ b/mail/em-account-editor.c
@@ -127,6 +127,7 @@ typedef struct _EMAccountEditorService {
GtkWidget *check_dialog;
gint check_id;
+ struct _EMAccountEditorService **check_data;
GList *authtypes; /* if "Check supported" */
CamelProvider *provider;
@@ -1896,9 +1897,18 @@ emae_check_authtype_done (const gchar *uri,
GList *types,
gpointer data)
{
- EMAccountEditorService *service = data;
+ EMAccountEditorService **pservice = data;
+ EMAccountEditorService *service;
GtkWidget *editor;
+ g_return_if_fail (pservice != NULL);
+
+ service = *pservice;
+ if (!service) {
+ g_free (pservice);
+ return;
+ }
+
editor = E_CONFIG (service->emae->config)->window;
if (service->check_dialog) {
@@ -1914,7 +1924,10 @@ emae_check_authtype_done (const gchar *uri,
gtk_widget_set_sensitive (editor, TRUE);
service->check_id = -1;
+ service->check_data = NULL;
g_object_unref (service->emae);
+ *pservice = NULL;
+ g_free (pservice);
}
static void
@@ -1926,6 +1939,9 @@ emae_check_authtype_response (GtkWidget *d,
editor = E_CONFIG (service->emae->config)->window;
+ if (service->check_data)
+ (*service->check_data) = NULL;
+ service->check_data = NULL;
mail_msg_cancel (service->check_id);
gtk_widget_destroy (service->check_dialog);
service->check_dialog = NULL;
@@ -1939,6 +1955,7 @@ emae_check_authtype (GtkWidget *w,
EMAccountEditorService *service)
{
EMAccountEditor *emae = service->emae;
+ EMAccountEditorService **pservice;
EMailSession *session;
EAccount *account;
GtkWidget *editor;
@@ -1960,9 +1977,12 @@ emae_check_authtype (GtkWidget *w,
if (editor != NULL)
gtk_widget_set_sensitive (editor, FALSE);
+ pservice = g_new0 (EMAccountEditorService *, 1);
+ *pservice = service;
+ service->check_data = pservice;
service->check_id = mail_check_service (
session, uri, service->type,
- emae_check_authtype_done, service);
+ emae_check_authtype_done, pservice);
}
static void