summaryrefslogtreecommitdiff
path: root/content
diff options
context:
space:
mode:
Diffstat (limited to 'content')
-rw-r--r--content/fetch.c8
-rw-r--r--content/fetch.h3
-rw-r--r--content/fetchers/fetch_curl.c9
3 files changed, 11 insertions, 9 deletions
diff --git a/content/fetch.c b/content/fetch.c
index b69f50be1..a325fb17a 100644
--- a/content/fetch.c
+++ b/content/fetch.c
@@ -89,7 +89,6 @@ static void fetch_unref_fetcher(scheme_fetcher *fetcher);
static void fetch_dispatch_jobs(void);
static bool fetch_choose_and_dispatch(void);
static bool fetch_dispatch_job(struct fetch *fetch);
-static void fetch_free(struct fetch *f);
/**
@@ -544,8 +543,8 @@ fetch_send_callback(fetch_msg msg, struct fetch *fetch, const void *data,
fetch->callback(msg, fetch->p, data, size);
}
-void
-fetch_can_be_freed(struct fetch *fetch)
+
+void fetch_remove_from_queues(struct fetch *fetch)
{
int all_active, all_queued;
@@ -565,10 +564,9 @@ fetch_can_be_freed(struct fetch *fetch)
LOG(("Fetch ring is now %d elements.", all_active));
LOG(("Queue ring is now %d elements.", all_queued));
-
- fetch_free(fetch);
}
+
void
fetch_set_http_code(struct fetch *fetch, long http_code)
{
diff --git a/content/fetch.h b/content/fetch.h
index 819f29fa9..d369bec76 100644
--- a/content/fetch.h
+++ b/content/fetch.h
@@ -110,7 +110,8 @@ bool fetch_add_fetcher(const char *scheme,
void fetch_send_callback(fetch_msg msg, struct fetch *fetch,
const void *data, unsigned long size);
-void fetch_can_be_freed(struct fetch *fetch);
+void fetch_remove_from_queues(struct fetch *fetch);
+void fetch_free(struct fetch *f);
void fetch_set_http_code(struct fetch *fetch, long http_code);
const char *fetch_get_referer_to_send(struct fetch *fetch);
#endif
diff --git a/content/fetchers/fetch_curl.c b/content/fetchers/fetch_curl.c
index 41ebc3fea..8587c9b1d 100644
--- a/content/fetchers/fetch_curl.c
+++ b/content/fetchers/fetch_curl.c
@@ -644,7 +644,8 @@ void fetch_curl_abort(void *vf)
if (f->curl_handle) {
f->abort = true;
} else {
- fetch_can_be_freed(f->fetch_handle);
+ fetch_remove_from_queues(f->fetch_handle);
+ fetch_free(f->fetch_handle);
}
}
@@ -672,7 +673,7 @@ void fetch_curl_stop(struct curl_fetch_info *f)
f->curl_handle = 0;
}
- fetch_can_be_freed(f->fetch_handle);
+ fetch_remove_from_queues(f->fetch_handle);
}
@@ -808,6 +809,8 @@ void fetch_curl_done(CURL *curl_handle, CURLcode result)
else
error = true;
+ fetch_curl_stop(f);
+
/* If finished, acquire cache info to pass to callback */
if (finished) {
memcpy(&cachedata, &f->cachedata, sizeof(struct cache_data));
@@ -908,7 +911,7 @@ void fetch_curl_done(CURL *curl_handle, CURLcode result)
fetch_send_callback(FETCH_ERROR, f->fetch_handle,
fetch_error_buffer, 0);
- fetch_curl_stop(f);
+ fetch_free(f->fetch_handle);
}