- for (co = host->connections; co; co = co->next)
- if (connection_is_idle(co) &&
- (!co->client || client_get_session(co->client) != se) &&
- !strcmp(ZOOM_connection_option_get(co->link, "user"),
- session_setting_oneval(client_get_database(cl),
- PZ_AUTHENTICATION)))
+ while (1)
+ {
+ int num_connections = 0;
+ for (co = host->connections; co; co = co->next)
+ num_connections++;
+ for (co = host->connections; co; co = co->next)
+ {
+ if (connection_is_idle(co) &&
+ (!co->client || client_get_state(co->client) == Client_Idle) &&
+ !strcmp(ZOOM_connection_option_get(co->link, "user"),
+ session_setting_oneval(client_get_database(cl),
+ PZ_AUTHENTICATION)))
+ {
+ if (zproxy == 0 && co->zproxy == 0)
+ break;
+ if (zproxy && co->zproxy && !strcmp(zproxy, co->zproxy))
+ break;
+ }
+ }
+ if (co)
+ {
+ yaz_log(YLOG_LOG, "num_connections = %d (reusing)",
+ num_connections);
+ break;
+ }
+ if (num_connections < max_connections)