Lock client while modifying session
[pazpar2-moved-to-github.git] / src / connection.c
index 196a397..3fb061b 100644 (file)
@@ -159,16 +159,20 @@ static struct connection *connection_create(struct client *cl,
 
 static void non_block_events(struct connection *co)
 {
-    struct client *cl = co->client;
     IOCHAN iochan = co->iochan;
     ZOOM_connection link = co->link;
     while (1)
     {
+        struct client *cl = co->client;
         int ev;
         int r = ZOOM_event_nonblock(1, &link);
         if (!r)
             break;
+        if (!cl)
+            continue;
         ev = ZOOM_connection_last_event(link);
+        
+        client_incref(cl);
 #if 0
         yaz_log(YLOG_LOG, "ZOOM_EVENT_%s", ZOOM_get_event_str(ev));
 #endif
@@ -214,6 +218,7 @@ static void non_block_events(struct connection *co)
             yaz_log(YLOG_LOG, "Unhandled event (%d) from %s",
                     ev, client_get_url(cl));
         }
+        client_destroy(cl);
     }
 }