mirror of
https://gitlab.isc.org/isc-projects/bind9
synced 2025-09-02 15:45:25 +00:00
Skip the no-op code in adjustsrtt()
If factor == DNS_ADB_RTTADJAGE and addr->entry->lastage == now we would load value into new_srtt and then immediatelly store it back which triggers the synchronization between threads using .srtt values.
This commit is contained in:
@@ -3057,18 +3057,17 @@ adjustsrtt(dns_adbaddrinfo_t *addr, unsigned int rtt, unsigned int factor,
|
|||||||
new_srtt -= addr->entry->srtt;
|
new_srtt -= addr->entry->srtt;
|
||||||
new_srtt >>= 9;
|
new_srtt >>= 9;
|
||||||
atomic_store(&addr->entry->lastage, now);
|
atomic_store(&addr->entry->lastage, now);
|
||||||
} else {
|
atomic_store(&addr->entry->srtt, new_srtt);
|
||||||
new_srtt = atomic_load(&addr->entry->srtt)
|
addr->srtt = new_srtt;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
new_srtt = ((uint64_t)atomic_load(&addr->entry->srtt) / 10 *
|
new_srtt = ((uint64_t)atomic_load(&addr->entry->srtt) / 10 *
|
||||||
factor) +
|
factor) +
|
||||||
((uint64_t)rtt / 10 * (10 - factor));
|
((uint64_t)rtt / 10 * (10 - factor));
|
||||||
|
atomic_store(&addr->entry->srtt, new_srtt);
|
||||||
|
addr->srtt = new_srtt;
|
||||||
}
|
}
|
||||||
|
|
||||||
atomic_store(&addr->entry->srtt, new_srtt);
|
|
||||||
addr->srtt = new_srtt;
|
|
||||||
|
|
||||||
(void)atomic_compare_exchange_strong(&addr->entry->expires,
|
(void)atomic_compare_exchange_strong(&addr->entry->expires,
|
||||||
&(isc_stdtime_t){ 0 },
|
&(isc_stdtime_t){ 0 },
|
||||||
now + ADB_ENTRY_WINDOW);
|
now + ADB_ENTRY_WINDOW);
|
||||||
|
Reference in New Issue
Block a user