From: Dennis Schafroth Date: Wed, 28 Apr 2010 16:14:06 +0000 (+0200) Subject: Fixed: missing release_session. Using HTTP module log level some places. X-Git-Tag: v1.4.0~3^2~3 X-Git-Url: http://sru.miketaylor.org.uk/?a=commitdiff_plain;h=8534e2155f7fb19a1532510eade51736588386e3;p=pazpar2-moved-to-github.git Fixed: missing release_session. Using HTTP module log level some places. --- diff --git a/src/http_command.c b/src/http_command.c index 902957a..b37eca9 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -61,6 +61,7 @@ struct http_session { struct http_sessions { struct http_session *session_list; YAZ_MUTEX mutex; + int log_level; }; http_sessions_t http_sessions_create(void) @@ -69,6 +70,7 @@ http_sessions_t http_sessions_create(void) hs->session_list = 0; hs->mutex = 0; pazpar2_mutex_create(&hs->mutex, "http_sessions"); + hs->log_level = yaz_log_module_level("HTTP"); return hs; } @@ -121,7 +123,7 @@ struct http_session *http_session_create(struct conf_service *service, r->timeout_iochan = iochan_create(-1, session_timeout, 0, "http_session_timeout"); iochan_setdata(r->timeout_iochan, r); - yaz_log(YLOG_LOG, "%p HTTP session %u created. timeout chan=%p timeout=%d", r, sesid, r->timeout_iochan, service->session_timeout); + yaz_log(http_sessions->log_level, "%p Session %u created. timeout chan=%p timeout=%d", r, sesid, r->timeout_iochan, service->session_timeout); iochan_settimeout(r->timeout_iochan, service->session_timeout); iochan_add(service->server->iochan_man, r->timeout_iochan); @@ -134,7 +136,7 @@ void http_session_destroy(struct http_session *s) http_sessions_t http_sessions = s->http_sessions; - yaz_log(YLOG_LOG, "%p HTTP session destroy %u", s, s->session_id); + yaz_log(http_sessions->log_level, "%p Session %u destroyed", s, s->session_id); yaz_mutex_enter(http_sessions->mutex); /* only if http_session has no active http sessions on it can be destroyed */ if (s->destroy_counter == s->activity_counter) { @@ -150,13 +152,14 @@ void http_session_destroy(struct http_session *s) yaz_mutex_leave(http_sessions->mutex); if (must_destroy) { /* destroying for real */ - yaz_log(YLOG_LOG, "Destroying session %u", s->session_id); + yaz_log(http_sessions->log_level, "%p Session %u destroyed", s, s->session_id); iochan_destroy(s->timeout_iochan); destroy_session(s->psession); nmem_destroy(s->nmem); } else { - yaz_log(YLOG_DEBUG, "%p HTTP Session %d. Active clients (%d-%d). Waiting for new timeout.", s, s->session_id, s->activity_counter, s->destroy_counter); + yaz_log(http_sessions->log_level, "%p Session %u destroyed delayed. Active clients (%d-%d). Waiting for new timeout.", + s, s->session_id, s->activity_counter, s->destroy_counter); } } @@ -277,7 +280,7 @@ static struct http_session *locate_session(struct http_channel *c) } // Call after use of locate_session, in order to increment the destroy_counter -static void *release_session(struct http_channel *c, struct http_session *session) { +static void release_session(struct http_channel *c, struct http_session *session) { http_sessions_t http_sessions = c->http_sessions; yaz_mutex_enter(http_sessions->mutex); if (session) @@ -365,11 +368,11 @@ static void cmd_init(struct http_channel *c) sesid = make_sessionid(); s = http_session_create(service, c->http_sessions, sesid); - yaz_log(YLOG_DEBUG, "HTTP Session init"); + yaz_log(c->http_sessions->log_level, "%p Session init %u ", s, sesid); if (!clear || *clear == '0') session_init_databases(s->psession); else - yaz_log(YLOG_LOG, "No databases preloaded"); + yaz_log(YLOG_LOG, "HTTP Session %u init: No databases preloaded", sesid); if (process_settings(s->psession, c->request, c->response) < 0) return; @@ -423,8 +426,10 @@ static void cmd_settings(struct http_channel *c) xmlFreeDoc(doc); } - if (process_settings(s->psession, rq, rs) < 0) + if (process_settings(s->psession, rq, rs) < 0) { + release_session(c,s); return; + } rs->payload = HTTP_COMMAND_RESPONSE_PREFIX "OK"; http_send_response(c); release_session(c,s); @@ -929,12 +934,12 @@ static void cmd_show(struct http_channel *c) if (session_set_watch(s->psession, SESSION_WATCH_SHOW, show_records_ready, c, c) != 0) { - yaz_log(YLOG_DEBUG, "Blocking on cmd_show"); + yaz_log(c->http_sessions->log_level, "%p Session %u: Blocking on cmd_show", s, s->session_id); } + release_session(c,s); return; } } - show_records(c, status); release_session(c,s); }