diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/IO/http.c | 37 | ||||
-rw-r--r-- | src/cache.c | 16 |
2 files changed, 25 insertions, 28 deletions
diff --git a/src/IO/http.c b/src/IO/http.c index 7deab2e4..5aca1703 100644 --- a/src/IO/http.c +++ b/src/IO/http.c @@ -76,6 +76,7 @@ typedef struct { bool_t https; int active_conns; + int running_the_queue; Dlist *queue; } Server_t; @@ -244,13 +245,19 @@ static void Http_connect_queued_sockets(Server_t *srv) SocketData_t *sd; int i; + srv->running_the_queue++; + for (i = 0; (i < dList_length(srv->queue) && srv->active_conns < prefs.http_max_conns); i++) { sd = dList_nth_data(srv->queue, i); - if (!(sd->flags & HTTP_SOCKET_TO_BE_FREED)) { + if (sd->flags & HTTP_SOCKET_TO_BE_FREED) { + dList_remove(srv->queue, sd); + dFree(sd); + i--; + } else { int connect_ready = TLS_CONNECT_READY; if (sd->flags & HTTP_SOCKET_TLS) @@ -266,15 +273,15 @@ static void Http_connect_queued_sockets(Server_t *srv) Http_connect_socket(sd->Info); } } - if (sd->flags & HTTP_SOCKET_TO_BE_FREED) { - dList_remove(srv->queue, sd); - dFree(sd); - i--; - } } _MSG("Queue http%s://%s:%u len %d\n", srv->https ? "s" : "", srv->host, srv->port, dList_length(srv->queue)); + + if (--srv->running_the_queue == 0) { + if (srv->active_conns == 0) + Http_server_remove(srv); + } } /* @@ -303,8 +310,6 @@ static void Http_socket_free(int SKey) (S->flags & HTTP_SOCKET_TLS)); srv->active_conns--; Http_connect_queued_sockets(srv); - if (srv->active_conns == 0) - Http_server_remove(srv); } a_Url_free(S->url); dFree(S); @@ -980,6 +985,7 @@ static Server_t *Http_server_get(const char *host, uint_t port, bool_t https) srv = dNew0(Server_t, 1); srv->queue = dList_new(10); + srv->running_the_queue = 0; srv->host = dStrdup(host); srv->port = port; srv->https = https; @@ -990,11 +996,16 @@ static Server_t *Http_server_get(const char *host, uint_t port, bool_t https) static void Http_server_remove(Server_t *srv) { - assert(dList_length(srv->queue) == 0); - dList_free(srv->queue); - dList_remove_fast(servers, srv); - dFree(srv->host); - dFree(srv); + SocketData_t *sd; + + while ((sd = dList_nth_data(srv->queue, 0))) { + dList_remove_fast(srv->queue, sd); + dFree(sd); + } + dList_free(srv->queue); + dList_remove_fast(servers, srv); + dFree(srv->host); + dFree(srv); } static void Http_servers_remove_all() diff --git a/src/cache.c b/src/cache.c index 2cc8c0aa..d8f1a123 100644 --- a/src/cache.c +++ b/src/cache.c @@ -756,6 +756,7 @@ static void Cache_parse_header(CacheEntry_t *entry) if (!web->requester || a_Url_same_organization(entry->Url, web->requester)) { + /* If cookies are third party, don't even consider them. */ char *server_date = Cache_parse_field(header, "Date"); a_Cookies_set(Cookies, entry->Url, server_date); @@ -764,10 +765,6 @@ static void Cache_parse_header(CacheEntry_t *entry) } } } - if (i >= dList_length(ClientQueue)) { - MSG("Cache: cookies not accepted from '%s'\n", URL_STR(entry->Url)); - } - for (i = 0; (data = dList_nth_data(Cookies, i)); ++i) dFree(data); dList_free(Cookies); @@ -857,17 +854,6 @@ static void Cache_finish_msg(CacheEntry_t *entry) MSG("Expected size: %d, Transfer size: %d\n", entry->ExpectedSize, entry->TransferSize); } - if (!entry->TransferSize && !(entry->Flags & CA_Redirect) && - (entry->Flags & WEB_RootUrl)) { - char *eol = strchr(entry->Header->str, '\n'); - if (eol) { - char *status_line = dStrndup(entry->Header->str, - eol - entry->Header->str); - MSG_HTTP("Body of %s was empty. Server sent status: %s\n", - URL_STR_(entry->Url), status_line); - dFree(status_line); - } - } entry->Flags |= CA_GotData; entry->Flags &= ~CA_Stopped; /* it may catch up! */ if (entry->TransferDecoder) { |