]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: remember explicitly whether we already tried a stream connection
authorLennart Poettering <lennart@poettering.net>
Sat, 26 Dec 2015 13:18:11 +0000 (14:18 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 27 Dec 2015 00:41:39 +0000 (01:41 +0100)
On LLMNR we never want to retry stream connections (since local TCP
connections should work, and we don't want to unnecessarily delay
operation), explicitly remember whether we already tried one, instead of
deriving this from a still stored stream object. This way, we can free
the stream early, without forgetting that we tried it.

src/resolve/resolved-dns-transaction.c
src/resolve/resolved-dns-transaction.h

index b0f40303d9121549e4315ae1045ec7ecb8f48679..2eb1675c5b0e3cd357121225157d48b3f73e4487 100644 (file)
@@ -421,6 +421,8 @@ static int dns_transaction_open_tcp(DnsTransaction *t) {
         if (t->scope->link)
                 t->stream->ifindex = t->scope->link->ifindex;
 
+        t->tried_stream = true;
+
         return 0;
 }
 
@@ -826,13 +828,10 @@ static usec_t transaction_get_resend_timeout(DnsTransaction *t) {
 }
 
 static int dns_transaction_prepare(DnsTransaction *t, usec_t ts) {
-        bool had_stream;
         int r;
 
         assert(t);
 
-        had_stream = !!t->stream;
-
         dns_transaction_stop(t);
 
         if (t->n_attempts >= TRANSACTION_ATTEMPTS_MAX(t->scope->protocol)) {
@@ -840,7 +839,7 @@ static int dns_transaction_prepare(DnsTransaction *t, usec_t ts) {
                 return 0;
         }
 
-        if (t->scope->protocol == DNS_PROTOCOL_LLMNR && had_stream) {
+        if (t->scope->protocol == DNS_PROTOCOL_LLMNR && t->tried_stream) {
                 /* If we already tried via a stream, then we don't
                  * retry on LLMNR. See RFC 4795, Section 2.7. */
                 dns_transaction_complete(t, DNS_TRANSACTION_ATTEMPTS_MAX_REACHED);
index eebb6ec631252bd18ba3d1a1386354ecbdad62c7..a351a5043be26419bfb11c43f90b18625fbb1725 100644 (file)
@@ -69,6 +69,8 @@ struct DnsTransaction {
 
         uint16_t id;
 
+        bool tried_stream:1;
+
         bool initial_jitter_scheduled:1;
         bool initial_jitter_elapsed:1;