Logging channels and mutexes + a few other things
[pazpar2-moved-to-github.git] / src / connection.c
index 3fb061b..fecf51b 100644 (file)
@@ -79,7 +79,7 @@ static int connection_is_idle(struct connection *co)
     if (!ZOOM_connection_is_idle(link))
         return 0;
     event = ZOOM_connection_peek_event(link);
-    if (event == ZOOM_EVENT_NONE || event == ZOOM_EVENT_END)
+    if (event == ZOOM_EVENT_NONE)
         return 1;
     else
         return 0;
@@ -159,6 +159,7 @@ static struct connection *connection_create(struct client *cl,
 
 static void non_block_events(struct connection *co)
 {
+    int got_records = 0;
     IOCHAN iochan = co->iochan;
     ZOOM_connection link = co->link;
     while (1)
@@ -213,6 +214,7 @@ static void non_block_events(struct connection *co)
             break;
         case ZOOM_EVENT_RECV_RECORD:
             client_record_response(cl);
+            got_records = 1;
             break;
         default:
             yaz_log(YLOG_LOG, "Unhandled event (%d) from %s",
@@ -220,6 +222,16 @@ static void non_block_events(struct connection *co)
         }
         client_destroy(cl);
     }
+    if (got_records)
+    {
+        struct client *cl = co->client;
+        if (cl)
+        {
+            client_incref(cl); 
+            client_got_records(cl);
+            client_destroy(cl);
+        }
+    }
 }
 
 void connection_continue(struct connection *co)
@@ -402,7 +414,7 @@ static int connection_connect(struct connection *con, iochan_man_t iochan_man)
         ZOOM_connection_connect(link, host->ipport, 0);
     
     con->link = link;
-    con->iochan = iochan_create(0, connection_handler, 0);
+    con->iochan = iochan_create(0, connection_handler, 0, "connection_socket");
     con->state = Conn_Connecting;
     iochan_settimeout(con->iochan, con->operation_timeout);
     iochan_setdata(con->iochan, con);