resolved: add dns_transaction_close_connection()
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.
This commit is contained in:
parent
919c2ae05c
commit
f32f0e57ca
|
@ -40,6 +40,14 @@ static void dns_transaction_reset_answer(DnsTransaction *t) {
|
||||||
t->answer_authenticated = false;
|
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) {
|
DnsTransaction* dns_transaction_free(DnsTransaction *t) {
|
||||||
DnsQueryCandidate *c;
|
DnsQueryCandidate *c;
|
||||||
DnsZoneItem *i;
|
DnsZoneItem *i;
|
||||||
|
@ -49,15 +57,12 @@ DnsTransaction* dns_transaction_free(DnsTransaction *t) {
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
sd_event_source_unref(t->timeout_event_source);
|
sd_event_source_unref(t->timeout_event_source);
|
||||||
|
dns_transaction_close_connection(t);
|
||||||
|
|
||||||
dns_packet_unref(t->sent);
|
dns_packet_unref(t->sent);
|
||||||
dns_transaction_reset_answer(t);
|
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_server_unref(t->server);
|
||||||
dns_stream_free(t->stream);
|
|
||||||
|
|
||||||
if (t->scope) {
|
if (t->scope) {
|
||||||
hashmap_remove_value(t->scope->transactions_by_key, t->key, t);
|
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;
|
t->state = state;
|
||||||
|
|
||||||
|
dns_transaction_close_connection(t);
|
||||||
dns_transaction_stop(t);
|
dns_transaction_stop(t);
|
||||||
|
|
||||||
/* Notify all queries that are interested, but make sure the
|
/* Notify all queries that are interested, but make sure the
|
||||||
|
|
|
@ -100,18 +100,19 @@ struct DnsTransaction {
|
||||||
sd_event_source *timeout_event_source;
|
sd_event_source *timeout_event_source;
|
||||||
unsigned n_attempts;
|
unsigned n_attempts;
|
||||||
|
|
||||||
|
/* UDP connection logic, if we need it */
|
||||||
int dns_udp_fd;
|
int dns_udp_fd;
|
||||||
sd_event_source *dns_udp_event_source;
|
sd_event_source *dns_udp_event_source;
|
||||||
|
|
||||||
|
/* TCP connection logic, if we need it */
|
||||||
|
DnsStream *stream;
|
||||||
|
|
||||||
/* The active server */
|
/* The active server */
|
||||||
DnsServer *server;
|
DnsServer *server;
|
||||||
|
|
||||||
/* The features of the DNS server at time of transaction start */
|
/* The features of the DNS server at time of transaction start */
|
||||||
DnsServerFeatureLevel current_features;
|
DnsServerFeatureLevel current_features;
|
||||||
|
|
||||||
/* TCP connection logic, if we need it */
|
|
||||||
DnsStream *stream;
|
|
||||||
|
|
||||||
/* Query candidates this transaction is referenced by and that
|
/* Query candidates this transaction is referenced by and that
|
||||||
* shall be notified about this specific transaction
|
* shall be notified about this specific transaction
|
||||||
* completing. */
|
* completing. */
|
||||||
|
|
Loading…
Reference in New Issue