+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
( 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
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);
}
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;
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));