summaryrefslogtreecommitdiff
path: root/content/fetchers
diff options
context:
space:
mode:
authorJames Bursa <james@netsurf-browser.org>2007-07-04 18:44:13 +0000
committerJames Bursa <james@netsurf-browser.org>2007-07-04 18:44:13 +0000
commit594eb74c4c180dd903a9a3162321e87b8a208576 (patch)
tree8d6eb34562aafae8f989ed5ee46527a3328b69ba /content/fetchers
parent960c11de1aa674dff3c60bfd60de29f0591a1330 (diff)
downloadnetsurf-594eb74c4c180dd903a9a3162321e87b8a208576.tar.gz
netsurf-594eb74c4c180dd903a9a3162321e87b8a208576.tar.bz2
Fix deadlock when fetching stylesheets when max_fetchers_per_host is reached by splitting fetch_can_be_freed() into fetch_remove_from_queues() and fetch_free().
svn path=/trunk/netsurf/; revision=3380
Diffstat (limited to 'content/fetchers')
-rw-r--r--content/fetchers/fetch_curl.c9
1 files changed, 6 insertions, 3 deletions
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);
}