Mangle ZOOM_resultset in client_set_connection
[pazpar2-moved-to-github.git] / src / client.c
index 3ebf63b..6f0941a 100644 (file)
@@ -350,6 +350,11 @@ static int nativesyntax_to_type(struct session_database *sdb, char *type,
         {
             strcpy(type, "xml");
         }
+        else if (!strncmp(s, "txml", 4))
+        {
+            const char *cp = strchr(s, ';');
+            yaz_snprintf(type, 80, "txml; charset=%s", cp ? cp+1 : "marc-8s");
+        }
         else
             return -1;
         return 0;
@@ -364,6 +369,11 @@ static int nativesyntax_to_type(struct session_database *sdb, char *type,
                 strcpy(type, "xml");
                 return 0;
             }
+            else if (!strcmp(syntax, "TXML"))
+                {
+                    strcpy(type, "txml");
+                    return 0;
+                }
             else if (!strcmp(syntax, "USmarc") || !strcmp(syntax, "MARC21"))
             {
                 strcpy(type, "xml; charset=marc8-s");
@@ -429,8 +439,6 @@ void client_got_records(struct client *cl)
 
 void client_record_response(struct client *cl)
 {
-    static pthread_mutex_t ingest_mutex = PTHREAD_MUTEX_INITIALIZER;
-    static int ingest_counter = 0, ingest_max = 0;
     struct connection *co = cl->connection;
     ZOOM_connection link = connection_get_link(co);
     ZOOM_resultset resultset = cl->resultset;
@@ -470,27 +478,18 @@ void client_record_response(struct client *cl)
                 if (cl->session == 0)
                     ;
                 else if (ZOOM_record_error(rec, &msg, &addinfo, 0))
+                {
                     yaz_log(YLOG_WARN, "Record error %s (%s): %s (rec #%d)",
-                            error, addinfo, client_get_url(cl),
+                            msg, addinfo, client_get_url(cl),
                             cl->record_offset);
+                }
                 else
                 {
                     struct session_database *sdb = client_get_database(cl);
                     NMEM nmem = nmem_create();
                     const char *xmlrec;
-                    int new_max = 0;
                     char type[80];
-                    yaz_log(YLOG_LOG, "Record ingest begin client=%p session=%p", cl, cl->session);
-                    pthread_mutex_lock(&ingest_mutex);
-                    ++ingest_counter;
-                    if (ingest_counter > ingest_max)
-                    {
-                        ingest_max = ingest_counter;
-                        new_max = ingest_max;
-                    }
-                    pthread_mutex_unlock(&ingest_mutex);
-                    if (new_max)
-                        yaz_log(YLOG_LOG, "New max client=%p new_max=%d", cl, new_max);
+
                     if (nativesyntax_to_type(sdb, type, rec))
                         yaz_log(YLOG_WARN, "Failed to determine record type");
                     xmlrec = ZOOM_record_get(rec, type, NULL);
@@ -503,11 +502,7 @@ void client_record_response(struct client *cl)
                             yaz_log(YLOG_WARN, "Failed to ingest from %s",
                                     client_get_url(cl));
                     }
-                    pthread_mutex_lock(&ingest_mutex);
-                    --ingest_counter;
-                    pthread_mutex_unlock(&ingest_mutex);
                     nmem_destroy(nmem);
-                    yaz_log(YLOG_LOG, "Record ingest end client=%p session=%p max=%d", cl, cl->session, ingest_max);
                 }
             }
             else
@@ -638,8 +633,9 @@ int client_destroy(struct client *c)
             c->pquery = 0;
             xfree(c->cqlquery);
             c->cqlquery = 0;
-
-            ZOOM_resultset_destroy(c->resultset);
+            assert(!c->connection);
+            assert(!c->resultset);
+            
             yaz_mutex_destroy(&c->mutex);
             xfree(c);
             return 1;
@@ -650,6 +646,11 @@ int client_destroy(struct client *c)
 
 void client_set_connection(struct client *cl, struct connection *con)
 {
+    if (cl->resultset)
+    {
+        ZOOM_resultset_destroy(cl->resultset);
+        cl->resultset = 0;
+    }
     if (con)
     {
         assert(cl->connection == 0);