Fix: Doing the refactoring for all connection_destroy. Add more debug of connection.
authorDennis Schafroth <dennis@indexdata.com>
Wed, 17 Nov 2010 12:27:08 +0000 (13:27 +0100)
committerDennis Schafroth <dennis@indexdata.com>
Wed, 17 Nov 2010 12:27:08 +0000 (13:27 +0100)
src/connection.c

index 44c1fb9..12785b9 100644 (file)
@@ -78,7 +78,8 @@ struct connection {
     enum {
         Conn_Resolving,
         Conn_Connecting,
-        Conn_Open
+        Conn_Open,
+        Conn_Dead
     } state;
     int operation_timeout;
     int session_timeout;
@@ -133,7 +134,7 @@ static void connection_destroy(struct connection *co)
         ZOOM_connection_destroy(co->link);
         iochan_destroy(co->iochan);
     }
-    yaz_log(YLOG_DEBUG, "Connection destroy %s", co->host->hostport);
+    yaz_log(YLOG_DEBUG, "%p Connection destroy %s", co, co->host->hostport);
 
     if (co->client)
     {
@@ -287,17 +288,20 @@ static void connection_handler(IOCHAN iochan, int event)
     {
         if (co->state == Conn_Connecting)
         {
-            yaz_log(YLOG_WARN,  "connect timeout %s", client_get_url(cl));
+            yaz_log(YLOG_WARN, "%p connect timeout %s", co, client_get_url(cl));
 
             client_set_state(cl, Client_Error);
+            remove_connection_from_host(co);
+            yaz_mutex_leave(host->mutex);
             connection_destroy(co);
         }
         else
         {
-            yaz_log(YLOG_LOG,  "idle timeout %s", client_get_url(cl));
+            yaz_log(YLOG_LOG,  "%p Connection idle timeout %s", co, client_get_url(cl));
+            remove_connection_from_host(co);
+            yaz_mutex_leave(host->mutex);
             connection_destroy(co);
         }
-        yaz_mutex_leave(host->mutex);
     }
     else
     {
@@ -534,6 +538,7 @@ int client_prep_connection(struct client *cl,
         }
         if (co)
         {
+            yaz_log(YLOG_LOG,  "%p Connection reuse. state: %d", co, co->state);
             connection_release(co);
             client_set_connection(cl, co);
             co->client = cl;