Enlightenment CVS committal
Author : tsauerbeck
Project : e17
Module : libs/ecore
Dir : e17/libs/ecore/src/lib/ecore_con
Modified Files:
ecore_con.c
Log Message:
fixed ssl deadlock
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_con/ecore_con.c,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -3 -r1.25 -r1.26
--- ecore_con.c 23 Apr 2004 07:24:36 -0000 1.25
+++ ecore_con.c 25 Apr 2004 15:42:57 -0000 1.26
@@ -1,3 +1,7 @@
+/*
+ * vim:ts=8:sw=3
+ */
+
#include "Ecore.h"
#include "config.h"
#include "ecore_private.h"
@@ -730,6 +734,10 @@
}
#if USE_OPENSSL
+/* Tries to connect an Ecore_Con_Server to an SSL host.
+ * Returns 1 on success, -1 on fatal errors and 0 if the caller
+ * should try again later.
+ */
static int
svr_try_connect_ssl(Ecore_Con_Server *svr)
{
@@ -742,11 +750,36 @@
if (ssl_err == SSL_ERROR_NONE) return 1;
if (ssl_err == SSL_ERROR_WANT_READ) flag = ECORE_FD_READ;
else if (ssl_err == SSL_ERROR_WANT_WRITE) flag = ECORE_FD_WRITE;
+ else return -1;
if (flag) ecore_main_fd_handler_active_set(svr->fd_handler, flag);
return 0;
}
#endif
+static void
+kill_server(Ecore_Con_Server *svr)
+{
+ Ecore_Con_Event_Server_Del *e;
+
+ e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
+ if (e)
+ {
+ e->server = svr;
+ ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
+ _ecore_con_event_server_del_free, NULL);
+ }
+
+ svr->dead = 1;
+ ecore_main_fd_handler_del(svr->fd_handler);
+ svr->fd_handler = NULL;
+
+ if (svr->read_buf)
+ {
+ free(svr->read_buf);
+ svr->read_buf = NULL;
+ }
+}
+
static int
svr_try_connect(Ecore_Con_Server *svr)
{
@@ -758,18 +791,7 @@
if (so_err != 0)
{
/* we lost our server! */
- Ecore_Con_Event_Server_Del *e;
-
- e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
- if (e)
- {
- e->server = svr;
- ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
- _ecore_con_event_server_del_free, NULL);
- }
- svr->dead = 1;
- ecore_main_fd_handler_del(svr->fd_handler);
- svr->fd_handler = NULL;
+ kill_server(svr);
}
else
{
@@ -807,11 +829,17 @@
int inbuf_num = 0;
#if USE_OPENSSL
- if ((svr->ssl) &&
- (svr->connecting) &&
- (svr_try_connect_ssl(svr)) &&
- (!svr_try_connect(svr)))
- return 1;
+ if (svr->ssl && svr->connecting) {
+ switch (svr_try_connect_ssl(svr)) {
+ case 1:
+ if (!svr_try_connect(svr))
+ return 1;
+ break;
+ case -1:
+ kill_server(svr);
+ return 1;
+ }
+ }
#endif
for (;;)
@@ -863,23 +891,7 @@
if (lost_server)
{
/* we lost our server! */
- Ecore_Con_Event_Server_Del *e;
-
- e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
- if (e)
- {
- e->server = svr;
- ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
- _ecore_con_event_server_del_free, NULL);
- }
- svr->dead = 1;
- ecore_main_fd_handler_del(svr->fd_handler);
- svr->fd_handler = NULL;
- if (svr->read_buf)
- {
- free(svr->read_buf);
- svr->read_buf = NULL;
- }
+ kill_server(svr);
return 1;
}
break;
@@ -908,25 +920,18 @@
{
#endif
if (!svr_try_connect(svr))
- {
- if (svr->read_buf)
- {
- free(svr->read_buf);
- svr->read_buf = NULL;
- }
return 1;
- }
#if USE_OPENSSL
}
- else if ((svr_try_connect_ssl(svr)) && (!svr_try_connect(svr)))
- {
- if (svr->read_buf)
- {
- free(svr->read_buf);
- svr->read_buf = NULL;
- }
- return 1;
- }
+ else
+ switch (svr_try_connect_ssl(svr)) {
+ case 1:
+ if (!svr_try_connect(svr))
+ return 1;
+ case -1:
+ kill_server(svr);
+ return 1;
+ }
#endif
}
_ecore_con_server_flush(svr);
@@ -1052,19 +1057,7 @@
if (lost_server)
{
/* we lost our server! */
- Ecore_Con_Event_Server_Del *e;
-
- e = calloc(1, sizeof(Ecore_Con_Event_Server_Del));
- if (e)
- {
- e->server = svr;
- ecore_event_add(ECORE_CON_EVENT_SERVER_DEL, e,
- _ecore_con_event_server_del_free, NULL);
- }
-
- svr->dead = 1;
- ecore_main_fd_handler_del(svr->fd_handler);
- svr->fd_handler = NULL;
+ kill_server(svr);
return;
}
-------------------------------------------------------
This SF.net email is sponsored by: The Robotic Monkeys at ThinkGeek
For a limited time only, get FREE Ground shipping on all orders of $35
or more. Hurry up and shop folks, this offer expires April 30th!
http://www.thinkgeek.com/freeshipping/?cpg=12297
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs