X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fsession.c;h=14b9a2caba8937a36bdf1cba09307d47638f6341;hb=88f96194d5a63278eb57b32c814019dab51da9ff;hp=77e4a3e9a7d04a0487e10618300e6e284bee9c09;hpb=0be537a08d164975e9584a6c89240b28343a6ec2;p=pazpar2-moved-to-github.git diff --git a/src/session.c b/src/session.c index 77e4a3e..14b9a2c 100644 --- a/src/session.c +++ b/src/session.c @@ -25,6 +25,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include #endif +#include #include #include #include @@ -359,7 +360,7 @@ static int prepare_map(struct session *se, struct session_database *sdb) } } sdb->map = normalize_cache_get(se->normalize_cache, - se->service, s); + se->service->server->config, s); if (!sdb->map) return -1; } @@ -513,6 +514,8 @@ enum pazpar2_error_code search(struct session *se, int no_working = 0; int no_failed = 0; struct client_list *l; + struct timespec abstime; + struct timeval tval; yaz_log(YLOG_DEBUG, "Search"); @@ -523,8 +526,8 @@ enum pazpar2_error_code search(struct session *se, session_enter(se); reclist_destroy(se->reclist); se->reclist = 0; - nmem_reset(se->nmem); relevance_destroy(&se->relevance); + nmem_reset(se->nmem); se->total_records = se->total_hits = se->total_merged = 0; se->num_termlists = 0; live_channels = select_targets(se, filter); @@ -535,6 +538,11 @@ enum pazpar2_error_code search(struct session *se, } se->reclist = reclist_create(se->nmem); + gettimeofday(&tval, 0); + + abstime.tv_sec = tval.tv_sec + 5; + abstime.tv_nsec = tval.tv_usec * 1000; + for (l = se->clients; l; l = l->next) { struct client *cl = l->client; @@ -552,7 +560,8 @@ enum pazpar2_error_code search(struct session *se, no_working++; if (client_prep_connection(cl, se->service->z3950_operation_timeout, se->service->z3950_session_timeout, - se->service->server->iochan_man)) + se->service->server->iochan_man, + &abstime)) client_start_search(cl); } } @@ -1164,7 +1173,6 @@ int ingest_record(struct client *cl, const char *rec, return -1; } client_unlock(cl); - pazpar2_sleep(0.01); session_enter(se); client_lock(cl); if (client_get_session(cl) == se)