resolved: add dns_transaction_close_connection()
authorLennart Poettering <lennart@poettering.net>
Sat, 26 Dec 2015 13:53:17 +0000 (14:53 +0100)
committerLennart Poettering <lennart@poettering.net>
Sun, 27 Dec 2015 00:41:39 +0000 (01:41 +0100)
This new call unifies how we shut down all connection resources, such as
UDP sockets, event sources, and TCP stream objects.

This patch just adds the basic hook-up, this function will be used more
in later commits.

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

index ba1f8cc..cf7dae0 100644 (file)
@@ -40,6 +40,14 @@ static void dns_transaction_reset_answer(DnsTransaction *t) {
         t->answer_authenticated = false;
 }
 
+static void dns_transaction_close_connection(DnsTransaction *t) {
+        assert(t);
+
+        t->stream = dns_stream_free(t->stream);
+        t->dns_udp_event_source = sd_event_source_unref(t->dns_udp_event_source);
+        t->dns_udp_fd = safe_close(t->dns_udp_fd);
+}
+
 DnsTransaction* dns_transaction_free(DnsTransaction *t) {
         DnsQueryCandidate *c;
         DnsZoneItem *i;
@@ -49,15 +57,12 @@ DnsTransaction* dns_transaction_free(DnsTransaction *t) {
                 return NULL;
 
         sd_event_source_unref(t->timeout_event_source);
+        dns_transaction_close_connection(t);
 
         dns_packet_unref(t->sent);
         dns_transaction_reset_answer(t);
 
-        sd_event_source_unref(t->dns_udp_event_source);
-        safe_close(t->dns_udp_fd);
-
         dns_server_unref(t->server);
-        dns_stream_free(t->stream);
 
         if (t->scope) {
                 hashmap_remove_value(t->scope->transactions_by_key, t->key, t);
@@ -259,6 +264,7 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
 
         t->state = state;
 
+        dns_transaction_close_connection(t);
         dns_transaction_stop(t);
 
         /* Notify all queries that are interested, but make sure the
index a351a50..faf3ce6 100644 (file)
@@ -100,18 +100,19 @@ struct DnsTransaction {
         sd_event_source *timeout_event_source;
         unsigned n_attempts;
 
+        /* UDP connection logic, if we need it */
         int dns_udp_fd;
         sd_event_source *dns_udp_event_source;
 
+        /* TCP connection logic, if we need it */
+        DnsStream *stream;
+
         /* The active server */
         DnsServer *server;
 
         /* The features of the DNS server at time of transaction start */
         DnsServerFeatureLevel current_features;
 
-        /* TCP connection logic, if we need it */
-        DnsStream *stream;
-
         /* Query candidates this transaction is referenced by and that
          * shall be notified about this specific transaction
          * completing. */