Fix handling of bad config
[pazpar2-moved-to-github.git] / src / client.c
index 31c2543..2cf8eb5 100644 (file)
@@ -67,6 +67,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 /** \brief Represents client state for a connection to one search target */
 struct client {
     struct session_database *database;
+    struct conf_server *server;
     struct connection *connection;
     struct session *session;
     char *pquery; // Current search
@@ -101,7 +102,7 @@ static const char *client_states[] = {
     "Client_Disconnected"
 };
 
-static struct client *client_freelist = 0;
+static struct client *client_freelist = 0; /* thread pr */
 
 const char *client_get_state_str(struct client *cl)
 {
@@ -643,17 +644,20 @@ static char *make_cqlquery(struct client *cl)
     char *r;
     WRBUF wrb = wrbuf_alloc();
     int status;
+    ODR odr_out = odr_createmem(ODR_ENCODE);
 
-    zquery = p_query_rpn(global_parameters.odr_out, cl->pquery);
+    zquery = p_query_rpn(odr_out, cl->pquery);
     if ((status = cql_transform_rpn2cql_wrbuf(cqlt, wrb, zquery)))
     {
         yaz_log(YLOG_WARN, "failed to generate CQL query, code=%d", status);
-        return 0;
+        r = 0;
     }
-    r = xstrdup(wrbuf_cstr(wrb));
-
+    else
+    {
+        r = xstrdup(wrbuf_cstr(wrb));
+    }     
     wrbuf_destroy(wrb);
-    odr_reset(global_parameters.odr_out); // releases the zquery
+    odr_destroy(odr_out);
     cql_transform_close(cqlt);
     return r;
 }
@@ -706,7 +710,7 @@ int client_parse_query(struct client *cl, const char *query)
         char *p[512];
         extract_terms(se->nmem, cn, p);
         se->relevance = relevance_create(
-            global_parameters.server->relevance_pct,
+            se->service->relevance_pct,
             se->nmem, (const char **) p,
             se->expected_maxrecs);
     }