aboutsummaryrefslogtreecommitdiff
path: root/src/util.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/util.c')
-rw-r--r--src/util.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/util.c b/src/util.c
index 3ada220..43b27ef 100644
--- a/src/util.c
+++ b/src/util.c
@@ -236,7 +236,7 @@ eclat_send_request(struct ec2_request *orig, struct grecs_node **ret_tree)
endtime = time(NULL) + max_retry_time;
tts = 2;
- do {
+ while (1) {
struct grecs_node *node;
struct ec2_request *req;
@@ -301,11 +301,14 @@ eclat_send_request(struct ec2_request *orig, struct grecs_node **ret_tree)
if (dry_run_mode)
debug(ECLAT_DEBCAT_MAIN, 1, ("not sending request"));
else {
+ grecs_tree_free(xmltree);
+
res = curl_easy_perform(io->curl);
if (res == CURLE_OK) {
xmltree = eclat_io_finish(io);
} else {
err("CURL: %s", curl_easy_strerror(res));
+ xmltree = NULL;
ret = 1;
}
}
@@ -314,7 +317,7 @@ eclat_send_request(struct ec2_request *orig, struct grecs_node **ret_tree)
curl_slist_free_all(headers);
eclat_request_free(req);
- if (ret)
+ if (ret || time(NULL) >= endtime)
break;
node = grecs_find_node(xmltree, ".Response.Errors.Error.Code");
@@ -329,9 +332,6 @@ eclat_send_request(struct ec2_request *orig, struct grecs_node **ret_tree)
if (strcmp(node->v.value->v.string, "RequestLimitExceeded"))
break;
- grecs_tree_free(xmltree);
- xmltree = NULL;
-
t = random() % tts + 1;
warn("request limit exceeded; sleeping for %lu seconds", t);
sleep(t);
@@ -340,7 +340,7 @@ eclat_send_request(struct ec2_request *orig, struct grecs_node **ret_tree)
if (tts == 0 || tts > max_retry_sleep)
tts = max_retry_sleep;
}
- } while (time(NULL) < endtime);
+ }
*ret_tree = xmltree;
return ret;

Return to:

Send suggestions and report system problems to the System administrator.