2012-12-07 [colin] 3.9.0cvs44
authorColin Leroy <colin@colino.net>
Fri, 7 Dec 2012 09:36:06 +0000 (09:36 +0000)
committerColin Leroy <colin@colino.net>
Fri, 7 Dec 2012 09:36:06 +0000 (09:36 +0000)
* src/news.c
Try to fix strange crash in nntp_ping/session_destroy...

ChangeLog
PATCHSETS
configure.ac
src/news.c

index c31428c4be9b5b09e99161a339fcca938fee46ec..edee01e713f7bf9bb50c2b6ee10e839d73f314f3 100644 (file)
--- 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
index 28b5d314618a5acb1dcf8bbd08f8dffbba881c9c..9eb077cbaba275f91ab3e34e6f6e1270bf8f8747 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( 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
index e552a1e98b64d4069ad1b16b2b55d23f05fc2127..ba886228e47e6ed2f0c95a9a8c900b4b6b4f4a45 100644 (file)
@@ -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=
 
index e5792c860b2c8e1ae00c510ff3659aa80926c72f..508495d8ff4203b158c36683bb0f2a2f6169c40d 100644 (file)
@@ -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)