aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/IO/http.c37
-rw-r--r--src/cache.c16
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) {