Fixed memory leak (setname in ZOOM_resultset)
[yaz-moved-to-github.git] / src / zoom-c.c
index 5acecb1..2c12c6a 100644 (file)
@@ -1480,7 +1480,8 @@ static zoom_ret ZOOM_connection_srw_send_search(ZOOM_connection c)
     {
     case ZOOM_TASK_SEARCH:
         resultset = c->tasks->u.search.resultset;
-        resultset->setname = xstrdup("default");
+        if (!resultset->setname)
+            resultset->setname = xstrdup("default");
         ZOOM_options_set(resultset->options, "setname", resultset->setname);
         start = &c->tasks->u.search.start;
         count = &c->tasks->u.search.count;
@@ -4044,13 +4045,13 @@ static zoom_ret handle_srw_response(ZOOM_connection c,
     if (*count < 0)
         *count = 0;
 
-    if (res->num_diagnostics > 0)
-        set_SRU_error(c, &res->diagnostics[0]);
     nmem = odr_extract_mem(c->odr_in);
     nmem_transfer(odr_getmem(resultset->odr), nmem);
     nmem_destroy(nmem);
     
-    if (*count > 0)
+    if (res->num_diagnostics > 0)
+        set_SRU_error(c, &res->diagnostics[0]);
+    else if (*count > 0)
         return ZOOM_connection_srw_send_search(c);
     return zoom_complete;
 }