talons

Fork of Claws Mail https://www.claws-mail
Log | Files | Refs | README | LICENSE

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:
MChangeLog | 6++++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/imap.c | 26+++++++++-----------------
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; }