talons

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

commit adb0fbc7e8814ef0ab8de25837981af35b9b21cf
parent 034d65be331c4087f574eaf436e9965d049a1246
Author: Colin Leroy <colin@colino.net>
Date:   Fri,  7 Dec 2012 09:36:06 +0000

2012-12-07 [colin]	3.9.0cvs44

	* src/news.c
		Try to fix strange crash in nntp_ping/session_destroy...

Diffstat:
MChangeLog | 5+++++
MPATCHSETS | 1+
Mconfigure.ac | 2+-
Msrc/news.c | 14++++++++++++--
4 files changed, 19 insertions(+), 3 deletions(-)

diff --git a/ChangeLog b/ChangeLog @@ -1,3 +1,8 @@ +2012-12-07 [colin] 3.9.0cvs44 + + * src/news.c + Try to fix strange crash in nntp_ping/session_destroy... + 2012-12-06 [mones] 3.9.0cvs43 * tools/README diff --git a/PATCHSETS b/PATCHSETS @@ -4541,3 +4541,4 @@ ( cvs diff -u -r 1.9.2.59 -r 1.9.2.60 src/common/ssl.c; ) > 3.9.0cvs41.patchset ( cvs diff -u -r 1.10.2.44 -r 1.10.2.45 src/prefs_gtk.c; ) > 3.9.0cvs42.patchset ( cvs diff -u -r 1.30.2.33 -r 1.30.2.34 tools/README; cvs diff -u -r 1.1 -r 1.2 tools/gif2xface.pl; cvs diff -u -r 1.1.2.4 -r 1.1.2.5 tools/outlook2claws-mail.pl; ) > 3.9.0cvs43.patchset +( cvs diff -u -r 1.101.2.75 -r 1.101.2.76 src/news.c; ) > 3.9.0cvs44.patchset diff --git a/configure.ac b/configure.ac @@ -12,7 +12,7 @@ MINOR_VERSION=9 MICRO_VERSION=0 INTERFACE_AGE=0 BINARY_AGE=0 -EXTRA_VERSION=43 +EXTRA_VERSION=44 EXTRA_RELEASE= EXTRA_GTK2_VERSION= diff --git a/src/news.c b/src/news.c @@ -292,6 +292,8 @@ static gboolean nntp_ping(gpointer data) if (session->state != SESSION_READY || news_folder_locked(news_session->folder)) return FALSE; + news_folder_lock(NEWS_FOLDER(news_session->folder)); + if ((r = nntp_threaded_date(news_session->folder, &lt)) != NEWSNNTP_NO_ERROR) { if (r != NEWSNNTP_ERROR_COMMAND_NOT_SUPPORTED && r != NEWSNNTP_ERROR_COMMAND_NOT_UNDERSTOOD) { @@ -301,10 +303,15 @@ static gboolean nntp_ping(gpointer data) news_session->folder->account->set_nntpport ? news_session->folder->account->nntpport : NNTP_PORT); REMOTE_FOLDER(news_session->folder)->session = NULL; + news_folder_unlock(NEWS_FOLDER(news_session->folder)); + session->state = SESSION_DISCONNECTED; + session->sock = NULL; session_destroy(session); return FALSE; } } + + news_folder_unlock(NEWS_FOLDER(news_session->folder)); session_set_access_time(session); return TRUE; } @@ -351,7 +358,6 @@ static Session *news_session_new(Folder *folder, const gchar *server, gushort po session->folder = folder; - session_register_ping(SESSION(session), nntp_ping); return SESSION(session); } @@ -482,6 +488,7 @@ static NewsSession *news_session_get(Folder *folder) if (!rfolder->session) { rfolder->session = news_session_new_for_folder(folder); + session_register_ping(SESSION(rfolder->session), nntp_ping); return NEWS_SESSION(rfolder->session); } @@ -490,6 +497,7 @@ static NewsSession *news_session_get(Folder *folder) if (rfolder->session->port != folder->account->nntpport) { session_destroy(rfolder->session); rfolder->session = news_session_new_for_folder(folder); + session_register_ping(SESSION(rfolder->session), nntp_ping); goto newsession; } @@ -498,8 +506,10 @@ static NewsSession *news_session_get(Folder *folder) return NEWS_SESSION(rfolder->session); } - if (!nntp_ping(rfolder->session)) + if (!nntp_ping(rfolder->session)) { rfolder->session = news_session_new_for_folder(folder); + session_register_ping(SESSION(rfolder->session), nntp_ping); + } newsession: if (rfolder->session)