curl-library
[PATCH] ares: better error return on timeouts
From: Daniel Stenberg <daniel_at_haxx.se>
Date: Mon, 6 Mar 2017 22:45:10 +0100
Date: Mon, 6 Mar 2017 22:45:10 +0100
Reported-by: Ray Satiro
Bug: https://curl.haxx.se/mail/lib-2017-03/0009.html
--- lib/asyn-ares.c | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/lib/asyn-ares.c b/lib/asyn-ares.c index ae73d0502..cd847df47 100644 --- a/lib/asyn-ares.c +++ b/lib/asyn-ares.c @@ -366,11 +366,11 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, } if(!timeout) timeout = CURL_TIMEOUT_RESOLVE * 1000; /* default name resolve timeout */ /* Wait for the name resolve query to complete. */ - for(;;) { + while(!result) { struct timeval *tvp, tv, store; long timediff; int itimeout; int timeout_ms; @@ -388,32 +388,29 @@ CURLcode Curl_resolver_wait_resolv(struct connectdata *conn, timeout_ms = (int)(tvp->tv_usec/1000); else timeout_ms = 1000; waitperform(conn, timeout_ms); - Curl_resolver_is_resolved(conn, &temp_entry); + result = Curl_resolver_is_resolved(conn, &temp_entry); - if(conn->async.done) + if(result || conn->async.done) break; - if(Curl_pgrsUpdate(conn)) { + if(Curl_pgrsUpdate(conn)) result = CURLE_ABORTED_BY_CALLBACK; - timeout = -1; /* trigger the cancel below */ - } else { struct timeval now2 = Curl_tvnow(); timediff = Curl_tvdiff(now2, now); /* spent time */ timeout -= timediff?timediff:1; /* always deduct at least 1 */ now = now2; /* for next loop */ } - - if(timeout < 0) { - /* failure, so we cancel the ares operation */ - ares_cancel((ares_channel)data->state.resolver); - break; - } + if(timeout < 0) + result = CURLE_OPERATION_TIMEDOUT; } + if(result) + /* our timeout, so we cancel the ares operation */ + ares_cancel((ares_channel)data->state.resolver); /* Operation complete, if the lookup was successful we now have the entry in the cache. */ if(entry) *entry = conn->async.dns; -- 2.11.0 -- / daniel.haxx.se --1129329158-964808630-1488836926=:27614 Content-Type: text/x-diff; name=0001-ares-better-error-return-on-timeouts.patch Content-Transfer-Encoding: BASE64 Content-ID: <alpine.DEB.2.20.1703062248460.27614_at_tvnag.unkk.fr> Content-Description: Content-Disposition: attachment; filename=0001-ares-better-error-return-on-timeouts.patch RnJvbSA5YTg2M2M5Y2VlNjE4Y2I0N2U5NjllYzZmYmYxYTU2M2VkZjgwNzg3 IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQ0KRnJvbTogRGFuaWVsIFN0ZW5i ZXJnIDxkYW5pZWxAaGF4eC5zZT4NCkRhdGU6IE1vbiwgNiBNYXIgMjAxNyAy Mjo0NToxMCArMDEwMA0KU3ViamVjdDogW1BBVENIXSBhcmVzOiBiZXR0ZXIg ZXJyb3IgcmV0dXJuIG9uIHRpbWVvdXRzDQoNClJlcG9ydGVkLWJ5OiBSYXkg U2F0aXJvDQoNCkJ1ZzogaHR0cHM6Ly9jdXJsLmhheHguc2UvbWFpbC9saWIt MjAxNy0wMy8wMDA5Lmh0bWwNCi0tLQ0KIGxpYi9hc3luLWFyZXMuYyB8IDIx ICsrKysrKysrKy0tLS0tLS0tLS0tLQ0KIDEgZmlsZSBjaGFuZ2VkLCA5IGlu c2VydGlvbnMoKyksIDEyIGRlbGV0aW9ucygtKQ0KDQpkaWZmIC0tZ2l0IGEv bGliL2FzeW4tYXJlcy5jIGIvbGliL2FzeW4tYXJlcy5jDQppbmRleCBhZTcz ZDA1MDIuLmNkODQ3ZGY0NyAxMDA2NDQNCi0tLSBhL2xpYi9hc3luLWFyZXMu Yw0KKysrIGIvbGliL2FzeW4tYXJlcy5jDQpAQCAtMzY2LDExICszNjYsMTEg QEAgQ1VSTGNvZGUgQ3VybF9yZXNvbHZlcl93YWl0X3Jlc29sdihzdHJ1Y3Qg Y29ubmVjdGRhdGEgKmNvbm4sDQogICB9DQogICBpZighdGltZW91dCkNCiAg ICAgdGltZW91dCA9IENVUkxfVElNRU9VVF9SRVNPTFZFICogMTAwMDsgLyog ZGVmYXVsdCBuYW1lIHJlc29sdmUgdGltZW91dCAqLw0KIA0KICAgLyogV2Fp dCBmb3IgdGhlIG5hbWUgcmVzb2x2ZSBxdWVyeSB0byBjb21wbGV0ZS4gKi8N Ci0gIGZvcig7Oykgew0KKyAgd2hpbGUoIXJlc3VsdCkgew0KICAgICBzdHJ1 Y3QgdGltZXZhbCAqdHZwLCB0diwgc3RvcmU7DQogICAgIGxvbmcgdGltZWRp ZmY7DQogICAgIGludCBpdGltZW91dDsNCiAgICAgaW50IHRpbWVvdXRfbXM7 DQogDQpAQCAtMzg4LDMyICszODgsMjkgQEAgQ1VSTGNvZGUgQ3VybF9yZXNv bHZlcl93YWl0X3Jlc29sdihzdHJ1Y3QgY29ubmVjdGRhdGEgKmNvbm4sDQog ICAgICAgdGltZW91dF9tcyA9IChpbnQpKHR2cC0+dHZfdXNlYy8xMDAwKTsN CiAgICAgZWxzZQ0KICAgICAgIHRpbWVvdXRfbXMgPSAxMDAwOw0KIA0KICAg ICB3YWl0cGVyZm9ybShjb25uLCB0aW1lb3V0X21zKTsNCi0gICAgQ3VybF9y ZXNvbHZlcl9pc19yZXNvbHZlZChjb25uLCAmdGVtcF9lbnRyeSk7DQorICAg IHJlc3VsdCA9IEN1cmxfcmVzb2x2ZXJfaXNfcmVzb2x2ZWQoY29ubiwgJnRl bXBfZW50cnkpOw0KIA0KLSAgICBpZihjb25uLT5hc3luYy5kb25lKQ0KKyAg ICBpZihyZXN1bHQgfHwgY29ubi0+YXN5bmMuZG9uZSkNCiAgICAgICBicmVh azsNCiANCi0gICAgaWYoQ3VybF9wZ3JzVXBkYXRlKGNvbm4pKSB7DQorICAg IGlmKEN1cmxfcGdyc1VwZGF0ZShjb25uKSkNCiAgICAgICByZXN1bHQgPSBD VVJMRV9BQk9SVEVEX0JZX0NBTExCQUNLOw0KLSAgICAgIHRpbWVvdXQgPSAt MTsgLyogdHJpZ2dlciB0aGUgY2FuY2VsIGJlbG93ICovDQotICAgIH0NCiAg ICAgZWxzZSB7DQogICAgICAgc3RydWN0IHRpbWV2YWwgbm93MiA9IEN1cmxf dHZub3coKTsNCiAgICAgICB0aW1lZGlmZiA9IEN1cmxfdHZkaWZmKG5vdzIs IG5vdyk7IC8qIHNwZW50IHRpbWUgKi8NCiAgICAgICB0aW1lb3V0IC09IHRp bWVkaWZmP3RpbWVkaWZmOjE7IC8qIGFsd2F5cyBkZWR1Y3QgYXQgbGVhc3Qg MSAqLw0KICAgICAgIG5vdyA9IG5vdzI7IC8qIGZvciBuZXh0IGxvb3AgKi8N CiAgICAgfQ0KLQ0KLSAgICBpZih0aW1lb3V0IDwgMCkgew0KLSAgICAgIC8q IG91ciB0aW1lb3V0LCBzbyB3ZSBjYW5jZWwgdGhlIGFyZXMgb3BlcmF0aW9u ICovDQotICAgICAgYXJlc19jYW5jZWwoKGFyZXNfY2hhbm5lbClkYXRhLT5z dGF0ZS5yZXNvbHZlcik7DQotICAgICAgYnJlYWs7DQotICAgIH0NCisgICAg aWYodGltZW91dCA8IDApDQorICAgICAgcmVzdWx0ID0gQ1VSTEVfT1BFUkFU SU9OX1RJTUVET1VUOw0KICAgfQ0KKyAgaWYocmVzdWx0KQ0KKyAgICAvKiBv dXIgdGltZW91dCwgc28gd2UgY2FuY2VsIHRoZSBhcmVzIG9wZXJhdGlvbiAq Lw0KKyAgICBhcmVzX2NhbmNlbCgoYXJlc19jaGFubmVsKWRhdGEtPnN0YXRl LnJlc29sdmVyKTsNCiANCiAgIC8qIE9wZXJhdGlvbiBjb21wbGV0ZSwgaWYg dGhlIGxvb2t1cCB3YXMgc3VjY2Vzc2Z1bCB3ZSBub3cgaGF2ZSB0aGUgZW50 cnkNCiAgICAgIGluIHRoZSBjYWNoZS4gKi8NCiAgIGlmKGVudHJ5KQ0KICAg ICAqZW50cnkgPSBjb25uLT5hc3luYy5kbnM7DQotLSANCjIuMTEuMA0KDQo= --1129329158-964808630-1488836926=:27614 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: inline LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQpVbnN1YnNjcmliZTogaHR0cHM6Ly9jb29sLmhheHguc2UvbGlzdC9saXN0aW5m by9jdXJsLWxpYnJhcnkKRXRpcXVldHRlOiAgIGh0dHBzOi8vY3VybC5oYXh4LnNlL21haWwvZXRp cXVldHRlLmh0bWw= --1129329158-964808630-1488836926=:27614--Received on 2001-09-17