Skip to content

Commit

Permalink
Merge branch 'jk/maint-http-init-not-in-result-handler'
Browse files Browse the repository at this point in the history
Further clean-up to the http codepath that picks up results after
cURL library is done with one request slot.

* jk/maint-http-init-not-in-result-handler:
  http: do not set up curl auth after a 401
  remote-curl: do not call run_slot repeatedly
  • Loading branch information
peff committed Oct 29, 2012
2 parents d2f4469 + 1960897 commit 58f3f98
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 14 deletions.
6 changes: 2 additions & 4 deletions http.c
Original file line number Diff line number Diff line change
Expand Up @@ -745,8 +745,7 @@ char *get_remote_object_url(const char *url, const char *hex,
return strbuf_detach(&buf, NULL);
}

int handle_curl_result(struct active_request_slot *slot,
struct slot_results *results)
int handle_curl_result(struct slot_results *results)
{
if (results->curl_result == CURLE_OK) {
credential_approve(&http_auth);
Expand All @@ -759,7 +758,6 @@ int handle_curl_result(struct active_request_slot *slot,
return HTTP_NOAUTH;
} else {
credential_fill(&http_auth);
init_curl_http_auth(slot->curl);
return HTTP_REAUTH;
}
} else {
Expand Down Expand Up @@ -821,7 +819,7 @@ static int http_request(const char *url, void *result, int target, int options)

if (start_active_slot(slot)) {
run_active_slot(slot);
ret = handle_curl_result(slot, &results);
ret = handle_curl_result(&results);
} else {
error("Unable to start HTTP request for %s", url);
ret = HTTP_START_FAILED;
Expand Down
3 changes: 1 addition & 2 deletions http.h
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ extern int start_active_slot(struct active_request_slot *slot);
extern void run_active_slot(struct active_request_slot *slot);
extern void finish_active_slot(struct active_request_slot *slot);
extern void finish_all_active_slots(void);
extern int handle_curl_result(struct active_request_slot *slot,
struct slot_results *results);
extern int handle_curl_result(struct slot_results *results);

#ifdef USE_CURL_MULTI
extern void fill_active_slots(void);
Expand Down
17 changes: 9 additions & 8 deletions remote-curl.c
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ static int run_slot(struct active_request_slot *slot)
slot->curl_result = curl_easy_perform(slot->curl);
finish_active_slot(slot);

err = handle_curl_result(slot, &results);
err = handle_curl_result(&results);
if (err != HTTP_OK && err != HTTP_REAUTH) {
error("RPC failed; result=%d, HTTP code = %ld",
results.curl_result, results.http_code);
Expand Down Expand Up @@ -431,17 +431,18 @@ static int post_rpc(struct rpc_state *rpc)
return -1;
}

headers = curl_slist_append(headers, rpc->hdr_content_type);
headers = curl_slist_append(headers, rpc->hdr_accept);
headers = curl_slist_append(headers, "Expect:");

retry:
slot = get_active_slot();

curl_easy_setopt(slot->curl, CURLOPT_NOBODY, 0);
curl_easy_setopt(slot->curl, CURLOPT_POST, 1);
curl_easy_setopt(slot->curl, CURLOPT_URL, rpc->service_url);
curl_easy_setopt(slot->curl, CURLOPT_ENCODING, "gzip");

headers = curl_slist_append(headers, rpc->hdr_content_type);
headers = curl_slist_append(headers, rpc->hdr_accept);
headers = curl_slist_append(headers, "Expect:");

if (large_request) {
/* The request body is large and the size cannot be predicted.
* We must use chunked encoding to send it.
Expand Down Expand Up @@ -515,9 +516,9 @@ static int post_rpc(struct rpc_state *rpc)
curl_easy_setopt(slot->curl, CURLOPT_WRITEFUNCTION, rpc_in);
curl_easy_setopt(slot->curl, CURLOPT_FILE, rpc);

do {
err = run_slot(slot);
} while (err == HTTP_REAUTH && !large_request && !use_gzip);
err = run_slot(slot);
if (err == HTTP_REAUTH && !large_request && !use_gzip)
goto retry;
if (err != HTTP_OK)
err = -1;

Expand Down

0 comments on commit 58f3f98

Please sign in to comment.