Fixes NB#131351, crash when exiting modest if there are new connection attempts
[modest] / src / modest-tny-account-store.c
index 8f72052..f2c597c 100644 (file)
@@ -2155,8 +2155,6 @@ account_shutdown_callback (TnyCamelAccount *account, gboolean canceled, GError *
                        op_data->callback (op_data->account_store, op_data->userdata);
                g_object_unref (op_data->account_store);
                g_free (op_data);
-       } else {
-               g_object_unref (op_data->account_store);
        }
 }
 
@@ -2166,19 +2164,15 @@ account_shutdown (TnyAccount *account, ShutdownOpData *op_data)
        g_return_if_fail (account && TNY_IS_ACCOUNT(account));
 
        if (TNY_IS_STORE_ACCOUNT (account) && 
-           !modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account)))
-               goto frees;
-
-       /* Disconnect account */
-       if (tny_account_get_connection_status (account) == TNY_CONNECTION_STATUS_CONNECTED) {
-               tny_camel_account_set_online (TNY_CAMEL_ACCOUNT(account), FALSE, 
-                                             account_shutdown_callback, op_data);
+           !modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account))) {
+               op_data->pending--;
                return;
        }
 
- frees:
-       op_data->pending--;
-       g_object_unref (op_data->account_store);
+       /* Disconnect account */
+       tny_camel_account_set_online (TNY_CAMEL_ACCOUNT(account), FALSE, 
+                                     account_shutdown_callback, op_data);
+
 }
 
 
@@ -2187,7 +2181,7 @@ modest_tny_account_store_shutdown (ModestTnyAccountStore *self,
                                   ModestTnyAccountStoreShutdownCallback callback,
                                   gpointer userdata)
 {
-       gint i, num_accounts;
+       gint num_accounts;
        ShutdownOpData *op_data;
        ModestTnyAccountStorePrivate *priv = MODEST_TNY_ACCOUNT_STORE_GET_PRIVATE (self);
 
@@ -2198,15 +2192,16 @@ modest_tny_account_store_shutdown (ModestTnyAccountStore *self,
        if (priv->transport_accounts)
                num_accounts += tny_list_get_length (priv->transport_accounts);
 
-       for (i = 0 ; i < num_accounts ; i++)
-               g_object_ref (self);
-
        /* Create the helper object */
        op_data = g_new0 (ShutdownOpData, 1);
        op_data->callback = callback;
        op_data->userdata = userdata;
        op_data->pending = num_accounts;
-       op_data->account_store = self;
+       op_data->account_store = g_object_ref (self);
+
+       /* Force the TnyDevice to be offline. This way new
+          undesired connections won't be initiated */
+       tny_device_force_offline (priv->device);
 
        /* Destroy all accounts. Disconnect all accounts before they are destroyed */
        if (priv->store_accounts) {
@@ -2220,6 +2215,7 @@ modest_tny_account_store_shutdown (ModestTnyAccountStore *self,
        if (op_data->pending == 0) {
                if (op_data->callback)
                        op_data->callback (op_data->account_store, op_data->userdata);
+               g_object_unref (op_data->account_store);
                g_free (op_data);
        }
 }