X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=src%2Fpazpar2_config.c;h=2cfba231e3bc40ac9792ba4bb2b3546c08060cb8;hb=80fd4b1da2a8e39a8c1402cb672427091baf8f74;hp=bcb415a362c1f7f457bb721eb0a86bada74b7404;hpb=e356b466f900722adf6c4f13588e2bed05555134;p=pazpar2-moved-to-github.git diff --git a/src/pazpar2_config.c b/src/pazpar2_config.c index bcb415a..2cfba23 100644 --- a/src/pazpar2_config.c +++ b/src/pazpar2_config.c @@ -48,8 +48,11 @@ struct conf_config { NMEM nmem; /* for conf_config and servers memory */ struct conf_server *servers; + int no_threads; WRBUF confdir; + iochan_man_t iochan_man; + database_hosts_t database_hosts; }; @@ -240,8 +243,6 @@ void service_destroy(struct conf_service *service) { if (service) { - yaz_log(YLOG_LOG, "service_destroy. p=%p cnt=%d", service, - service->ref_count); if (!pazpar2_decref(&service->ref_count, service->mutex)) { pp2_charset_destroy(service->relevance_pct); @@ -713,7 +714,6 @@ static struct conf_server *server_create(struct conf_config *config, server->proxy_host = 0; server->proxy_port = 0; server->myurl = 0; - server->proxy_addr = 0; server->service = 0; server->config = config; server->next = 0; @@ -721,6 +721,9 @@ static struct conf_server *server_create(struct conf_config *config, server->sort_pct = 0; server->mergekey_pct = 0; server->server_settings = 0; + server->http_server = 0; + server->iochan_man = 0; + server->database_hosts = 0; if (server_id) { @@ -958,6 +961,7 @@ struct conf_config *config_create(const char *fname, int verbose) config->nmem = nmem; config->servers = 0; config->no_threads = 0; + config->iochan_man = 0; config->confdir = wrbuf_alloc(); if ((p = strrchr(fname, @@ -1011,6 +1015,8 @@ void server_destroy(struct conf_server *server) pp2_charset_destroy(server->relevance_pct); pp2_charset_destroy(server->sort_pct); pp2_charset_destroy(server->mergekey_pct); + yaz_log(YLOG_LOG, "server_destroy server=%p", server); + http_server_destroy(server->http_server); } void config_destroy(struct conf_config *config) @@ -1036,30 +1042,40 @@ void config_stop_listeners(struct conf_config *conf) http_close_server(ser); } -void config_start_databases(struct conf_config *conf) +void config_process_events(struct conf_config *conf) { struct conf_server *ser; + + conf->database_hosts = database_hosts_create(); for (ser = conf->servers; ser; ser = ser->next) { struct conf_service *s = ser->service; + + ser->database_hosts = conf->database_hosts; + for (;s ; s = s->next) { resolve_databases(s); assert(s->mutex == 0); yaz_mutex_create(&s->mutex); } + http_mutex_init(ser); } + iochan_man_events(conf->iochan_man); } int config_start_listeners(struct conf_config *conf, const char *listener_override) { struct conf_server *ser; - pazpar2_chan_man_start(conf->no_threads); + + conf->iochan_man = iochan_man_create(conf->no_threads); for (ser = conf->servers; ser; ser = ser->next) { WRBUF w = wrbuf_alloc(); int r; + + ser->iochan_man = conf->iochan_man; if (listener_override) { wrbuf_puts(w, listener_override);