commit 4f0697a53ed68bfa043989aeed51e978a3a039fc
parent fb797a407368ea6b30d4bd7f5c41065aad0c395c
Author: Colin Leroy <colin@colino.net>
Date: Wed, 26 Mar 2008 20:12:18 +0000
2008-03-26 [colin] 3.3.1cvs40
* src/imap.c
Clean up session disconnection. Possibly
fix Ubuntu bug #204290
Diffstat:
4 files changed, 17 insertions(+), 18 deletions(-)
diff --git a/ChangeLog b/ChangeLog
@@ -1,3 +1,9 @@
+2008-03-26 [colin] 3.3.1cvs40
+
+ * src/imap.c
+ Clean up session disconnection. Possibly
+ fix Ubuntu bug #204290
+
2008-03-26 [colin] 3.3.1cvs39
* src/textview.c
diff --git a/PATCHSETS b/PATCHSETS
@@ -3274,3 +3274,4 @@
( cvs diff -u -r 1.105.2.128 -r 1.105.2.129 src/prefs_account.c; ) > 3.3.1cvs37.patchset
( cvs diff -u -r 1.1.2.36 -r 1.1.2.37 src/plugins/bogofilter/bogofilter.c; cvs diff -u -r 1.1.2.13 -r 1.1.2.14 src/plugins/bogofilter/bogofilter.h; cvs diff -u -r 1.1.2.30 -r 1.1.2.31 src/plugins/bogofilter/bogofilter_gtk.c; ) > 3.3.1cvs38.patchset
( cvs diff -u -r 1.96.2.198 -r 1.96.2.199 src/textview.c; ) > 3.3.1cvs39.patchset
+( cvs diff -u -r 1.179.2.214 -r 1.179.2.215 src/imap.c; ) > 3.3.1cvs40.patchset
diff --git a/configure.ac b/configure.ac
@@ -11,7 +11,7 @@ MINOR_VERSION=3
MICRO_VERSION=1
INTERFACE_AGE=0
BINARY_AGE=0
-EXTRA_VERSION=39
+EXTRA_VERSION=40
EXTRA_RELEASE=
EXTRA_GTK2_VERSION=
diff --git a/src/imap.c b/src/imap.c
@@ -433,16 +433,6 @@ typedef struct _hashtable_data {
static FolderClass imap_class;
-typedef struct _thread_data {
- gchar *server;
- gushort port;
- gboolean done;
- SockInfo *sock;
-#if (defined(USE_OPENSSL) || defined (USE_GNUTLS))
- SSLType ssl_type;
-#endif
-} thread_data;
-
FolderClass *imap_get_class(void)
{
if (imap_class.idstr == NULL) {
@@ -535,19 +525,18 @@ static void unlock_session(IMAPSession *session)
}
}
-static void imap_disc_session_destroy(Folder *folder)
+static void imap_disc_session_destroy(IMAPSession *session)
{
- RemoteFolder *rfolder = REMOTE_FOLDER(folder);
- IMAPSession *session = NULL;
+ RemoteFolder *rfolder = REMOTE_FOLDER(IMAP_SESSION(session)->folder);
if (!rfolder)
return;
- session = IMAP_SESSION(rfolder->session);
if (!session)
return;
rfolder->session = NULL;
log_warning(LOG_PROTOCOL, _("IMAP4 connection broken\n"));
SESSION(session)->state = SESSION_DISCONNECTED;
+ SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
}
@@ -705,7 +694,7 @@ static void imap_handle_error(Session *session, int libetpan_errcode)
}
if (session && is_fatal(libetpan_errcode)) {
- imap_disc_session_destroy(IMAP_SESSION(session)->folder);
+ imap_disc_session_destroy(IMAP_SESSION(session));
} else if (session && !is_fatal(libetpan_errcode)) {
if (IMAP_SESSION(session)->busy)
unlock_session(IMAP_SESSION(session));
@@ -918,6 +907,7 @@ static IMAPSession *imap_reconnect_if_possible(Folder *folder, IMAPSession *sess
if (rfolder->session == NULL) {
log_warning(LOG_PROTOCOL, _("Connecting to %s failed"),
folder->account->recv_server);
+ SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
session = NULL;
} else {
@@ -929,6 +919,7 @@ static IMAPSession *imap_reconnect_if_possible(Folder *folder, IMAPSession *sess
" disconnected. Reconnecting...\n"),
folder->account->recv_server);
SESSION(session)->state = SESSION_DISCONNECTED;
+ SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
/* Clear folders session to make imap_session_get create
a new session, because of rfolder->session == NULL
@@ -986,6 +977,7 @@ static IMAPSession *imap_session_get(Folder *folder)
imap_threaded_disconnect(session->folder);
rfolder->session = NULL;
SESSION(session)->state = SESSION_DISCONNECTED;
+ SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
rfolder->last_failure = time(NULL);
rfolder->connecting = FALSE;
@@ -1136,6 +1128,7 @@ static IMAPSession *imap_session_new(Folder * folder,
ok = imap_cmd_starttls(session);
if (ok != MAILIMAP_NO_ERROR) {
log_warning(LOG_PROTOCOL, _("Can't start TLS session.\n"));
+ SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
return NULL;
}
@@ -1204,8 +1197,6 @@ static void imap_session_destroy(Session *session)
imap_free_capabilities(IMAP_SESSION(session));
g_free(IMAP_SESSION(session)->mbox);
- sock_close(session->sock);
- session->sock = NULL;
}
static gchar *imap_fetch_msg(Folder *folder, FolderItem *item, gint uid)
@@ -5254,6 +5245,7 @@ void imap_disconnect_all(void)
IMAPSession *session = (IMAPSession *)folder->session;
imap_threaded_disconnect(FOLDER(folder));
SESSION(session)->state = SESSION_DISCONNECTED;
+ SESSION(session)->sock = NULL;
session_destroy(SESSION(session));
folder->session = NULL;
}