X-Git-Url: http://jsfdemo.indexdata.com/?a=blobdiff_plain;f=src%2Fhttp.c;h=d93c8742827051b79f136f15da1ce9a3e173d75a;hb=6c93cf7588a8b1efab211236bfedf55a591ac635;hp=3ac922d8160b9a2dc7e2dc59b0d3a1da7da244ca;hpb=13c264891d9f32676755474cad8e33fed9c4e31b;p=pazpar2-moved-to-github.git diff --git a/src/http.c b/src/http.c index 3ac922d..d93c874 100644 --- a/src/http.c +++ b/src/http.c @@ -149,17 +149,21 @@ static struct http_buf *http_buf_create(http_server_t hs) static void http_buf_destroy(http_server_t hs, struct http_buf *b) { yaz_mutex_enter(hs->mutex); - if (hs->http_buf_freelist_max > 0 && hs->http_buf_freelist_count > hs->http_buf_freelist_max) { + if (hs->http_buf_freelist_max > 0 && hs->http_buf_freelist_count >= hs->http_buf_freelist_max) { xfree(b); - while (b = hs->http_buf_freelist) { + while ((b = hs->http_buf_freelist)) { xfree(b); hs->http_buf_freelist = hs->http_buf_freelist->next; } + hs->http_buf_freelist_count = 0; } else { b->next = hs->http_buf_freelist; hs->http_buf_freelist = b; hs->http_buf_freelist_count++; +#if 0 + yaz_log(YLOG_DEBUG, "Free %d http buffers on server.", hs->http_buf_freelist_count); +#endif } yaz_mutex_leave(hs->mutex); } @@ -1114,15 +1118,20 @@ static void http_channel_destroy(IOCHAN i) http_server = s->http_server; /* save it for destroy (decref) */ yaz_mutex_enter(s->http_server->mutex); - if (s->http_server->http_channel_freelist_max > 0 && s->http_server->http_channel_freelist_count > s->http_server->http_channel_freelist_max) { - while (s->next = s->http_server->http_channel_freelist) { + if (s->http_server->http_channel_freelist_max > 0 && s->http_server->http_channel_freelist_count >= s->http_server->http_channel_freelist_max) { + while ((s->next = s->http_server->http_channel_freelist)) { + nmem_destroy(s->next->nmem); + wrbuf_destroy(s->next->wrbuf); xfree(s->next); s->http_server->http_channel_freelist = s->http_server->http_channel_freelist->next; } + s->http_server->http_channel_freelist_count = 0; } else { s->next = s->http_server->http_channel_freelist; s->http_server->http_channel_freelist = s; + s->http_server->http_channel_freelist_count++; + yaz_log(YLOG_DEBUG, "Free %d channels on server.", s->http_server->http_channel_freelist_count); } yaz_mutex_leave(s->http_server->mutex); @@ -1146,7 +1155,7 @@ static struct http_channel *http_channel_create(http_server_t hs, r = hs->http_channel_freelist; if (r) { hs->http_channel_freelist = r->next; - hs->http_channel_freelist_count++; + hs->http_channel_freelist_count--; } yaz_mutex_leave(hs->mutex); @@ -1399,11 +1408,13 @@ http_server_t http_server_create(void) hs->http_channel_freelist = 0; hs->http_channel_freelist_count = 0; - hs->http_channel_freelist_max = 10; + /* Disable max check */ + hs->http_channel_freelist_max = 0; hs->http_buf_freelist = 0; hs->http_buf_freelist_count = 0; - hs->http_buf_freelist_max = 10; + /* Disable max check */ + hs->http_buf_freelist_max = 0; return hs; }