bind9/lib/isc/include/isc
Ondřej Surý 6011fb5484
Use lock-free hashtable for storing resolver fetch contexts
Previously, the fetch contexts were stored inside rwlocked hashmap
table.  This was one of the most contended places for the resolver,
especially in the cold cache situation.

Replace the locked hashmap with the lock-free hashtable from the RCU
library and protect the fetch contexts against reuse by replacing the
libisc reference counting with urcu_ref that can soft-fail in situation
where the reference count is already zero.  This allows us to easily
skip re-using the fetch context if it is already in process of being
destroyed.
2025-09-24 00:08:21 +02:00
..
ascii.h Switch symtab to use fxhash hashing 2025-03-20 11:26:09 +01:00
assertions.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
async.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
atomic.h Fix isc_quota bug 2025-02-20 10:56:00 +00:00
attributes.h Add and use __attribute__((nonnull)) in dnssec-signzone.c 2025-08-28 16:23:59 +02:00
backtrace.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
barrier.h Prefer the pthread_barrier implementation over uv_barrier 2023-01-11 09:51:02 +01:00
base32.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
base64.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
bit.h Rewrite the bit rotate functions using __builtin or generic 2025-08-27 11:53:05 +02:00
buffer.h clean up uses of ISC_R_NOMEMORY 2025-01-23 15:54:57 -08:00
commandline.h Allow commandline.c to compile on Solaris 2025-06-02 09:00:48 +00:00
counter.h Cleanup the isc_counter unit 2025-02-21 09:51:42 +00:00
crypto.h unify fips handling to isc_crypto and make the toggle one way 2025-02-27 17:37:43 +03:00
dir.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
dnsstream.h Remove redundant parentheses from the return statement 2024-11-19 12:27:22 +01:00
endian.h Update the source code formatting using clang-format-17 2023-10-17 17:47:46 +02:00
entropy.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
errno.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
error.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
file.h Unify handling of the program name in all the utilities 2025-05-29 06:17:32 +02:00
formatcheck.h Update the copyright information in all files in the repository 2022-01-11 09:05:02 +01:00
fuzz.h Update the copyright information in all files in the repository 2022-01-11 09:05:02 +01:00
fxhash.h Rewrite the bit rotate functions using __builtin or generic 2025-08-27 11:53:05 +02:00
getaddresses.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
hash.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
hashmap.h Refactor isc_hashmap to accept custom match function 2023-09-16 07:20:48 +02:00
heap.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
helper.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
hex.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
histo.h Simplify histogram quantiles 2023-04-03 12:08:05 +01:00
hmac.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
ht.h clean up uses of ISC_R_NOMEMORY 2025-01-23 15:54:57 -08:00
httpd.h Refactor the network manager to be a singleton 2025-07-23 22:45:38 +02:00
interfaceiter.h clean up uses of ISC_R_NOMEMORY 2025-01-23 15:54:57 -08:00
iterated_hash.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
job.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
lex.h clean up uses of ISC_R_NOMEMORY 2025-01-23 15:54:57 -08:00
lib.h Move the library init and shutdown to executables 2025-02-22 16:19:00 +01:00
list.h make all ISC_LIST_FOREACH calls safe 2025-05-23 13:09:10 -07:00
log.h Add option request-zoneversion 2025-03-24 22:16:09 +00:00
loop.h Change the loopmgr to be singleton 2025-07-23 22:44:16 +02:00
magic.h Update the copyright information in all files in the repository 2022-01-11 09:05:02 +01:00
managers.h Add and use global memory context called isc_g_mctx 2025-08-04 11:29:26 +02:00
md.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
mem.h Change the 'isc_g_mctx' to be always available 2025-08-04 11:29:50 +02:00
meminfo.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
mutex.h Move locking macros into individual headers 2025-03-01 07:33:51 +01:00
net.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
netaddr.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
netmgr.h Refactor the network manager to be a singleton 2025-07-23 22:45:38 +02:00
netscope.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
nonce.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
once.h Move the library init and shutdown to executables 2025-02-22 16:19:00 +01:00
os.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
overflow.h Simplify add/sub/mul overflow checks 2025-08-26 15:32:53 +02:00
parseint.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
pause.h Improve the spinloop pause / yield hint 2023-02-14 17:13:24 +00:00
portset.h clean up uses of ISC_R_NOMEMORY 2025-01-23 15:54:57 -08:00
proxy2.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
queue.h Reduce false sharing in dns_qpcache 2025-02-04 21:37:46 +01:00
quota.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
radix.h clean up uses of ISC_R_NOMEMORY 2025-01-23 15:54:57 -08:00
random.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
ratelimiter.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
readline.h Drop readline alternatives in favor of libedit 2025-03-31 15:20:40 +02:00
refcount.h Convert the isc/tid.h to use own signed integer isc_tid_t type 2025-06-28 13:32:12 +02:00
regex.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
region.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
result.h deduplicate result codes 2025-01-23 15:54:57 -08:00
rwlock.h Move locking macros into individual headers 2025-03-01 07:33:51 +01:00
safe.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
serial.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
sieve.h Rewrite dns_adb LRU to SIEVE 2025-07-09 21:22:47 +02:00
signal.h Change the loopmgr to be singleton 2025-07-23 22:44:16 +02:00
siphash.h Rewrite the bit rotate functions using __builtin or generic 2025-08-27 11:53:05 +02:00
sockaddr.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
spinlock.h Move locking macros into individual headers 2025-03-01 07:33:51 +01:00
stats.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
stdio.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
stdtime.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
strerr.h Explain <isc/strerr.h> a little more 2023-02-15 16:44:09 +00:00
string.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
symtab.h Refactor and simplify isc_symtab 2025-02-17 11:43:19 +01:00
syslog.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
thread.h Add support for setting thread stack size 2025-08-05 10:46:09 +02:00
tid.h Add ISC_TID_MAX with default being 512 threads 2025-06-28 13:32:12 +02:00
time.h Detect and possibly define constexpr using Autoconf 2024-12-25 15:21:26 +01:00
timer.h Add isc_timer_running() function to check status of timer 2025-02-21 22:05:43 +01:00
tls.h Add isc_tls_valid_sni_hostname() 2025-03-31 14:23:19 +03:00
tm.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
types.h Refactor the network manager to be a singleton 2025-07-23 22:45:38 +02:00
urcu.h Use lock-free hashtable for storing resolver fetch contexts 2025-09-24 00:08:21 +02:00
url.h Rewrite isc_httpd using picohttpparser and isc_url_parse 2022-10-14 11:26:54 +02:00
utf8.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
util.h Use the <stdbit.h> names for bit manipulation shims 2025-08-26 15:32:53 +02:00
uv.h Convert the isc/tid.h to use own signed integer isc_tid_t type 2025-06-28 13:32:12 +02:00
work.h Remove C++ support from the public header 2024-12-18 13:10:39 +01:00
xml.h Use custom isc_mem based allocator for libxml2 2022-09-27 17:10:42 +02:00