bind9/lib/isc
Ondřej Surý 42e4e3b843 Improve reliability of the netmgr unit tests
The netmgr unit tests were designed to push the system limits to maximum
by sending as many queries as possible in the busy loop from multiple
threads.  This mostly works with UDP, but in the stateful protocol where
establishing the connection takes more time, it failed quite often in
the CI.  On FreeBSD, this happened more often, because the socket() call
would fail spuriosly making the problem even worse.

This commit does several things to improve reliability:

* return value of isc_nm_<proto>connect() is always checked and retried
  when scheduling the connection fails

* The busy while loop has been slowed down with usleep(1000); so the
  netmgr threads could schedule the work and get executed.

* The isc_thread_yield() was replaced with usleep(1000); also to allow
  the other threads to do any work.

* Instead of waiting on just one variable, we wait for multiple
  variables to reach the final value

* We are wrapping the netmgr operations (connects, reads, writes,
  accepts) with reference counting and waiting for all the callbacks to
  be accounted for.

  This has two effects:

  a) the isc_nm_t is always clean of active sockets and handles when
     destroyed, so it will prevent the spurious INSIST(references == 1)
     from isc_nm_destroy()

  b) the unit test now ensures that all the callbacks are always called
     when they should be called, so any stuck test means that there was
     a missing callback call and it is always a real bug

These changes allows us to remove the workaround that would not run
certain tests on systems without port load-balancing.
2021-03-19 16:25:28 +01:00
..
include Change the isc_nm_(get|set)timeouts() to work with milliseconds 2021-03-18 16:37:57 +01:00
netmgr Call isc__nm_tlsdns_failed_read on tls_error to cleanup the socket 2021-03-19 15:28:52 +01:00
pthreads Change the isc_thread_self() return type to uintptr_t 2021-02-25 16:21:10 +01:00
tests Improve reliability of the netmgr unit tests 2021-03-19 16:25:28 +01:00
unix Reformat sources using clang-format-11 2020-12-08 18:36:23 +01:00
win32 Fix TCPDNS and TLSDNS timers 2021-03-18 16:37:57 +01:00
.gitignore [master] update gitignore files; use rev-parse to get srcid 2014-06-17 13:49:30 -07:00
aes.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
app.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
assertions.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
astack.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
backtrace.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
base32.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
base64.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
bind9.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
buffer.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
commandline.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
counter.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
crc64.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
entropy.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
entropy_private.h update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
error.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
event.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
fsaccess_common.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
fsaccess_common_p.h update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
glob.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
hash.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
heap.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
hex.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
hmac.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
hp.c Use globally assigned thread_id in the isc_hp API 2021-02-25 16:21:10 +01:00
ht.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
httpd.c Fix the isc_nm_closedown() to actually close the pending connections 2020-10-22 11:37:16 -07:00
iterated_hash.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
lex.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
lib.c Add isc_trampoline API to have simple accounting around threads 2021-02-25 16:21:10 +01:00
lib_p.h Call isc__initialize()/isc__shutdown() from win32 DllMain 2021-03-01 14:24:57 +01:00
log.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
Makefile.am Call isc__initialize()/isc__shutdown() from win32 DllMain 2021-03-01 14:24:57 +01:00
md.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
mem.c Add mempool get/put tracking with AddressSanitizer 2021-02-26 10:05:42 -08:00
mem_p.h Use library constructor/destructor to initialize OpenSSL 2021-02-18 19:33:54 +01:00
mutexblock.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
netaddr.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
netscope.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
nonce.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
openssl_shim.c Refactor TLSDNS module to work with libuv/ssl directly 2021-01-25 09:19:22 +01:00
openssl_shim.h Refactor TLSDNS module to work with libuv/ssl directly 2021-01-25 09:19:22 +01:00
parseint.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
pk11.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
pk11_result.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
pool.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
portset.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
queue.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
quota.c Refactor netmgr and add more unit tests 2020-12-01 16:47:07 +01:00
radix.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
random.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
ratelimiter.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
regex.c Reformat sources using clang-format-11 2020-12-08 18:36:23 +01:00
region.c Reformat sources using clang-format-11 2020-12-08 18:36:23 +01:00
result.c refactor outgoing HTTP connection support 2021-03-05 13:29:26 +02:00
rwlock.c Change the isc_thread_self() return type to uintptr_t 2021-02-25 16:21:10 +01:00
safe.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
serial.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
siphash.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
sockaddr.c netmgr: server-side TLS support 2020-11-10 14:16:27 +01:00
stats.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
string.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
symtab.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
task.c Change the isc_thread_self() return type to uintptr_t 2021-02-25 16:21:10 +01:00
task_p.h update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
taskpool.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
timer.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
tls.c Stop using deprecated calls in lib/isc/tls.c 2021-03-17 20:05:47 +00:00
tls_p.h Use library constructor/destructor to initialize OpenSSL 2021-02-18 19:33:54 +01:00
tm.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00
trampoline.c Change the isc_thread_self() return type to uintptr_t 2021-02-25 16:21:10 +01:00
trampoline_p.h Add isc_trampoline API to have simple accounting around threads 2021-02-25 16:21:10 +01:00
url.c cast (char) to (unsigned char) when calling is*() 2021-03-15 14:18:03 +11:00
utf8.c update all copyright headers to eliminate the typo 2020-09-14 16:20:40 -07:00