2006-03-23 [colin] 2.0.0cvs167
authorColin Leroy <colin@colino.net>
Thu, 23 Mar 2006 17:23:29 +0000 (17:23 +0000)
committerColin Leroy <colin@colino.net>
Thu, 23 Mar 2006 17:23:29 +0000 (17:23 +0000)
* src/common/ssl.c
Let 30 seconds to SSL_connect

ChangeLog
PATCHSETS
configure.ac
src/common/ssl.c

index 2a56b8594e0cc7975957dbdf3472e895879c043e..c80f50fd4b4563985417035682217afd13691db6 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-03-23 [colin]     2.0.0cvs167
+
+       * src/common/ssl.c
+               Let 30 seconds to SSL_connect
+
 2006-03-23 [wwp]       2.0.0cvs166
 
        * src/summaryview.c
index 8f9b95b187cdad6defb883265de74cc71ad74c6b..65a9c098955f6782ccdcc15b982f765bfa26c582 100644 (file)
--- a/PATCHSETS
+++ b/PATCHSETS
 ( cvs diff -u -r 1.36.2.58 -r 1.36.2.59 src/common/utils.c;  ) > 2.0.0cvs164.patchset
 ( cvs diff -u -r 1.36.2.59 -r 1.36.2.60 src/common/utils.c;  ) > 2.0.0cvs165.patchset
 ( cvs diff -u -r 1.395.2.185 -r 1.395.2.186 src/summaryview.c;  cvs diff -u -r 1.5.2.17 -r 1.5.2.18 src/gtk/description_window.c;  ) > 2.0.0cvs166.patchset
+( cvs diff -u -r 1.9.2.12 -r 1.9.2.13 src/common/ssl.c;  ) > 2.0.0cvs167.patchset
index c49a4fe162dd36b93682e08d187f7fa9d38f6495..f05af6333a308efd47b0743937497b60e6f29c81 100644 (file)
@@ -11,7 +11,7 @@ MINOR_VERSION=0
 MICRO_VERSION=0
 INTERFACE_AGE=0
 BINARY_AGE=0
-EXTRA_VERSION=166
+EXTRA_VERSION=167
 EXTRA_RELEASE=
 EXTRA_GTK2_VERSION=
 
index 002b7351fa288cedc992836bb7a770e25f668097..5e9fcb6ed1fd1c97db9a8a36c8d12b79903eaab8 100644 (file)
@@ -87,7 +87,12 @@ void ssl_done(void)
 void *SSL_connect_thread(void *data)
 {
        thread_data *td = (thread_data *)data;
-       int result = SSL_connect(td->ssl);
+       int result = -1;
+
+       pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL);
+       pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL);
+
+       result = SSL_connect(td->ssl);
        td->done = TRUE; /* let the caller thread join() */
        return GINT_TO_POINTER(result);
 }
@@ -99,6 +104,8 @@ gint SSL_connect_nb(SSL *ssl)
        thread_data *td = g_new0(thread_data, 1);
        pthread_t pt;
        void *res = NULL;
+       time_t start_time = time(NULL);
+       gboolean killed = FALSE;
        
        td->ssl  = ssl;
        td->done = FALSE;
@@ -114,12 +121,20 @@ gint SSL_connect_nb(SSL *ssl)
        while(!td->done) {
                /* don't let the interface freeze while waiting */
                sylpheed_do_idle();
+               if (time(NULL) - start_time > 30) {
+                       pthread_cancel(pt);
+                       td->done = TRUE;
+                       killed = TRUE;
+               }
        }
 
        /* get the thread's return value and clean its resources */
        pthread_join(pt, &res);
        g_free(td);
-
+       
+       if (killed) {
+               res = GINT_TO_POINTER(-1);
+       }
        debug_print("SSL_connect thread returned %d\n", 
                        GPOINTER_TO_INT(res));