From 0f1ac5c4fbf807a024511068aa3dd8f0eb0b9af7 Mon Sep 17 00:00:00 2001 From: Adam Dickmeiss Date: Mon, 15 Jul 2013 16:35:47 +0200 Subject: [PATCH] resolver thread checks for dead session PAZ-879 --- src/connection.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/src/connection.c b/src/connection.c index be3ccef..43cdc14 100644 --- a/src/connection.c +++ b/src/connection.c @@ -353,36 +353,37 @@ void connect_resolver_host(struct host *host, iochan_man_t iochan_man) { struct connection *con; -start: yaz_mutex_enter(host->mutex); con = host->connections; while (con) { if (con->state == Conn_Closed) { - if (!host->ipport) /* unresolved */ + if (!host->ipport || !con->client) /* unresolved or no client */ { remove_connection_from_host(con); yaz_mutex_leave(host->mutex); connection_destroy(con); - goto start; - /* start all over .. at some point it will be NULL */ - } - else if (!con->client) - { - remove_connection_from_host(con); - yaz_mutex_leave(host->mutex); - connection_destroy(con); - /* start all over .. at some point it will be NULL */ - goto start; } else { - yaz_mutex_leave(host->mutex); - connection_connect(con, iochan_man); - client_start_search(con->client); - goto start; + struct session_database *sdb = client_get_database(con->client); + if (sdb) + { + yaz_mutex_leave(host->mutex); + connection_connect(con, iochan_man); + client_start_search(con->client); + } + else + { + remove_connection_from_host(con); + yaz_mutex_leave(host->mutex); + connection_destroy(con); + } } + /* start all over .. at some point it will be NULL */ + yaz_mutex_enter(host->mutex); + con = host->connections; } else { @@ -501,7 +502,6 @@ int client_prep_connection(struct client *cl, return 0; co = client_get_connection(cl); - if (co) { assert(co->host); -- 1.7.10.4