chiark
/
gitweb
/
~ianmdlvl
/
elogind.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
resolved: flush cache each time we change to a different DNS server
[elogind.git]
/
src
/
resolve
/
resolved-dns-transaction.c
diff --git
a/src/resolve/resolved-dns-transaction.c
b/src/resolve/resolved-dns-transaction.c
index faa1de9143a275b525d77b0a6f5aecbbb0ab5bcc..48da432a1200f94fb2b6105801e790aa24eaae8d 100644
(file)
--- a/
src/resolve/resolved-dns-transaction.c
+++ b/
src/resolve/resolved-dns-transaction.c
@@
-465,12
+465,19
@@
int dns_transaction_go(DnsTransaction *t) {
t->cached = dns_answer_unref(t->cached);
t->cached_rcode = 0;
t->cached = dns_answer_unref(t->cached);
t->cached_rcode = 0;
- /* First, let's try the cache */
+ /* Before trying the cache, let's make sure we figured out a
+ * server to use. Should this cause a change of server this
+ * might flush the cache. */
+ dns_scope_get_dns_server(t->scope);
+
+ /* Let's then prune all outdated entries */
dns_cache_prune(&t->scope->cache);
dns_cache_prune(&t->scope->cache);
+
r = dns_cache_lookup(&t->scope->cache, t->question, &t->cached_rcode, &t->cached);
if (r < 0)
return r;
if (r > 0) {
r = dns_cache_lookup(&t->scope->cache, t->question, &t->cached_rcode, &t->cached);
if (r < 0)
return r;
if (r > 0) {
+ log_debug("Cache hit!");
if (t->cached_rcode == DNS_RCODE_SUCCESS)
dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS);
else
if (t->cached_rcode == DNS_RCODE_SUCCESS)
dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS);
else
@@
-478,6
+485,8
@@
int dns_transaction_go(DnsTransaction *t) {
return 0;
}
return 0;
}
+ log_debug("Cache miss!");
+
/* Otherwise, we need to ask the network */
r = dns_transaction_make_packet(t);
if (r == -EDOM) {
/* Otherwise, we need to ask the network */
r = dns_transaction_make_packet(t);
if (r == -EDOM) {