]> git.ipfire.org Git - thirdparty/pdns.git/log
thirdparty/pdns.git
12 months agoIntroduce structured YAML settings for Recursor.
Otto Moerbeek [Wed, 5 Jul 2023 13:48:59 +0000 (15:48 +0200)] 
Introduce structured YAML settings for Recursor.

Mostly written in Rust, using CXX and Serde

Code generation is used to generate both the old style config tables as
the new Rust based code. The code generation also produces the code
to covert old styel to new style and documentation.

Th main entry point for code generationo is settings/generate.py,
using the table table.py

Existing configs continue to work as before.

12 months agoMerge pull request #13086 from jsoref/speed-bumps
Peter van Dijk [Tue, 5 Sep 2023 23:04:01 +0000 (01:04 +0200)] 
Merge pull request #13086 from jsoref/speed-bumps

Add speed bumps to bug filing

12 months agoMerge pull request #13197 from rgacogne/remove-arc4random-warning
Remi Gacogne [Tue, 5 Sep 2023 15:54:30 +0000 (17:54 +0200)] 
Merge pull request #13197 from rgacogne/remove-arc4random-warning

arc4random: Fix 'redundant redeclaration’ warnings

12 months agowording 13086/head
Peter van Dijk [Tue, 5 Sep 2023 10:47:59 +0000 (12:47 +0200)] 
wording

12 months agoalso link to Discussions
Peter van Dijk [Tue, 5 Sep 2023 10:23:43 +0000 (12:23 +0200)] 
also link to Discussions

12 months agosimplify text
Peter van Dijk [Tue, 5 Sep 2023 10:22:24 +0000 (12:22 +0200)] 
simplify text

12 months agoMerge pull request #11597 from cmouse/geoipbackend-multi
Peter van Dijk [Tue, 5 Sep 2023 10:15:17 +0000 (12:15 +0200)] 
Merge pull request #11597 from cmouse/geoipbackend-multi

geoipbackend: Support reading zones from directory

12 months agoMerge pull request #13142 from rgacogne/fix-channel-warning
Remi Gacogne [Mon, 4 Sep 2023 12:26:08 +0000 (14:26 +0200)] 
Merge pull request #13142 from rgacogne/fix-channel-warning

channel: Fix redundant redeclaration warning

12 months agoMerge pull request #13196 from rgacogne/ddist-dynblock-tests-waittime
Remi Gacogne [Mon, 4 Sep 2023 12:25:10 +0000 (14:25 +0200)] 
Merge pull request #13196 from rgacogne/ddist-dynblock-tests-waittime

dnsdist: Reduce the UDP wait time for blocked queries in the tests

12 months agoarc4random: Fix 'redundant redeclaration’ warnings 13197/head
Remi Gacogne [Thu, 31 Aug 2023 09:40:46 +0000 (11:40 +0200)] 
arc4random: Fix 'redundant redeclaration’ warnings

If `arc4random.hh` is included before `config.h`, the `HAVE_*` defines
are not yet available and thus we include the definition of the following
functions even though they might be available in the standard headers:
- `arc4random`
- `arc4random_buf`
- `arc4random_uniform`
- `explicit_bzero`

Yielding warnings:
```
In file included from dns_random.hh:27,
                 from tsigutils.cc:25:
../ext/arc4random/arc4random.hh:9:12: warning: redundant redeclaration of ‘uint32_t arc4random()’ in same scope [-Wredundant-decls]
    9 |   uint32_t arc4random(void);
      |            ^~~~~~~~~~
In file included from /usr/include/c++/13.2.1/cstdlib:79,
                 from /usr/include/c++/13.2.1/ext/string_conversions.h:43,
                 from /usr/include/c++/13.2.1/bits/basic_string.h:4097,
                 from /usr/include/c++/13.2.1/string:54,
                 from dnsname.hh:26,
                 from tsigutils.cc:23:
/usr/include/stdlib.h:657:19: note: previous declaration of ‘__uint32_t arc4random()’
  657 | extern __uint32_t arc4random (void)
      |                   ^~~~~~~~~~
../ext/arc4random/arc4random.hh:12:8: warning: redundant redeclaration of ‘void arc4random_buf(void*, size_t)’ in same scope [-Wredundant-decls]
   12 |   void arc4random_buf(void* buf, size_t nbytes);
      |        ^~~~~~~~~~~~~~
/usr/include/stdlib.h:661:13: note: previous declaration of ‘void arc4random_buf(void*, size_t)’
  661 | extern void arc4random_buf (void *__buf, size_t __size)
      |             ^~~~~~~~~~~~~~
../ext/arc4random/arc4random.hh:15:12: warning: redundant redeclaration of ‘uint32_t arc4random_uniform(uint32_t)’ in same scope [-Wredundant-decls]
   15 |   uint32_t arc4random_uniform(uint32_t upper_bound);
      |            ^~~~~~~~~~~~~~~~~~
/usr/include/stdlib.h:666:19: note: previous declaration of ‘__uint32_t arc4random_uniform(__uint32_t)’
  666 | extern __uint32_t arc4random_uniform (__uint32_t __upper_bound)
      |                   ^~~~~~~~~~~~~~~~~~
../ext/arc4random/arc4random.hh:18:8: warning: redundant redeclaration of ‘void explicit_bzero(void*, size_t)’ in same scope [-Wredundant-decls]
   18 |   void explicit_bzero(void*, size_t len);
```

12 months agodnsdist: Reduce the UDP wait time for blocked queries in the tests 13196/head
Remi Gacogne [Wed, 30 Aug 2023 13:55:01 +0000 (15:55 +0200)] 
dnsdist: Reduce the UDP wait time for blocked queries in the tests

We know that we are not going to get a response, and waiting for too
long increases the risk that the dynamic block is no longer present
and/or has expired (validity of 0s) in the subsequent API check.

12 months agoMerge pull request #13190 from omoerbeek/rec-unused-warnings
Otto Moerbeek [Tue, 29 Aug 2023 14:42:31 +0000 (16:42 +0200)] 
Merge pull request #13190 from omoerbeek/rec-unused-warnings

rec: fix a few unused argument warnings (depening on features enabled)

12 months agoMerge pull request #13181 from rgacogne/fix-provenance
Remi Gacogne [Tue, 29 Aug 2023 11:27:37 +0000 (13:27 +0200)] 
Merge pull request #13181 from rgacogne/fix-provenance

Fix provenance generation for our packages

12 months agorec: fix a few unused argument warnings (depening on features enabled) 13190/head
Otto Moerbeek [Tue, 29 Aug 2023 09:28:33 +0000 (11:28 +0200)] 
rec: fix a few unused argument warnings (depening on features enabled)

Additionally, handle a few clang-tidy warnings

12 months agobuilder-dispatch: Remove the newline at the end of the os list 13181/head
Remi Gacogne [Tue, 29 Aug 2023 09:48:57 +0000 (11:48 +0200)] 
builder-dispatch: Remove the newline at the end of the os list

12 months agoMerge pull request #13162 from fredmorcos/auth-print-loaded-modules
Fred Morcos [Tue, 29 Aug 2023 09:09:39 +0000 (11:09 +0200)] 
Merge pull request #13162 from fredmorcos/auth-print-loaded-modules

Auth: Print the list of loaded modules next to the config.h preset

12 months agoMerge pull request #13164 from fredmorcos/bindlexer-use-c++-header
Peter van Dijk [Tue, 29 Aug 2023 08:24:36 +0000 (10:24 +0200)] 
Merge pull request #13164 from fredmorcos/bindlexer-use-c++-header

Bindlexer use C++ bison header

12 months agoUse the C++ header file generated by bison instead of opting for a C header file 13164/head
Fred Morcos [Tue, 22 Aug 2023 14:50:00 +0000 (16:50 +0200)] 
Use the C++ header file generated by bison instead of opting for a C header file

12 months agoMerge pull request #13183 from omoerbeek/rec-pb-test-fix-empty-call
Otto Moerbeek [Mon, 28 Aug 2023 15:11:17 +0000 (17:11 +0200)] 
Merge pull request #13183 from omoerbeek/rec-pb-test-fix-empty-call

rec: fix call of empty() in Protobuf regression test, nice speedup

12 months agorec: fix call of empty() in Protobuf regression test, nice speedup 13183/head
Otto Moerbeek [Mon, 28 Aug 2023 14:19:05 +0000 (16:19 +0200)] 
rec: fix call of empty() in Protobuf regression test, nice speedup

12 months agobuild-packages: Fix 'check if hashes were created for all requested targets'
Remi Gacogne [Mon, 28 Aug 2023 13:54:18 +0000 (15:54 +0200)] 
build-packages: Fix 'check if hashes were created for all requested targets'

If the 'inputs.os' list ends with a newline the check fails.

12 months agoFix the generation of packages JSON list for provenance
Remi Gacogne [Mon, 28 Aug 2023 13:52:38 +0000 (15:52 +0200)] 
Fix the generation of packages JSON list for provenance

12 months agogeoipbackend: Document loading zones from directory. 11597/head
Aki Tuomi [Sun, 1 May 2022 18:50:05 +0000 (21:50 +0300)] 
geoipbackend: Document loading zones from directory.

12 months agogeoipbackend: Move geo2.example.com to separate file
Aki Tuomi [Sun, 1 May 2022 18:48:29 +0000 (21:48 +0300)] 
geoipbackend: Move geo2.example.com to separate file

Tests the new feature of loading zones from dir.

12 months agogeoipbackend: Add zones_dir key for geoipbackend file
Aki Tuomi [Sun, 1 May 2022 18:36:25 +0000 (21:36 +0300)] 
geoipbackend: Add zones_dir key for geoipbackend file

Allows loading zones from a directory.

Based on code by mason-chase <sid@moontius.com>

12 months agogeoipbackend: Emit error and discard errorneus zones instead of failing completely
Aki Tuomi [Sun, 1 May 2022 18:17:59 +0000 (21:17 +0300)] 
geoipbackend: Emit error and discard errorneus zones instead of failing completely

12 months agogeoipbackend: Move domain loading to separate function
Aki Tuomi [Sun, 1 May 2022 17:50:59 +0000 (20:50 +0300)] 
geoipbackend: Move domain loading to separate function

Simplifies next change

12 months agogeoipbackend: Move global custom mapping and format to object
Aki Tuomi [Sun, 1 May 2022 18:03:42 +0000 (21:03 +0300)] 
geoipbackend: Move global custom mapping and format to object

Simplifies following change

12 months agoMerge pull request #13154 from rgacogne/ddist-parallel-tests
Remi Gacogne [Mon, 28 Aug 2023 11:34:27 +0000 (13:34 +0200)] 
Merge pull request #13154 from rgacogne/ddist-parallel-tests

dnsdist: Switch to pytest for our regression tests, run them in parallel

12 months agodnsdist: Add missing 'sys' import in the Async regression test 13154/head
Remi Gacogne [Mon, 28 Aug 2023 10:33:21 +0000 (12:33 +0200)] 
dnsdist: Add missing 'sys' import in the Async regression test

As noticed by Charles-Henri (thanks!).

12 months agoMerge pull request #13143 from rgacogne/ddist-cache-metrics-tsan-warning
Remi Gacogne [Mon, 28 Aug 2023 09:22:44 +0000 (11:22 +0200)] 
Merge pull request #13143 from rgacogne/ddist-cache-metrics-tsan-warning

dnsdist: Try to fix a data race warning reported by TSAN

12 months agoMerge pull request #13167 from rgacogne/tcpiohandler-fix-conn-index-race
Remi Gacogne [Mon, 28 Aug 2023 08:55:20 +0000 (10:55 +0200)] 
Merge pull request #13167 from rgacogne/tcpiohandler-fix-conn-index-race

TCPIOHandler: Fix a race when creating the first TLS connections

12 months agoMerge pull request #13175 from omoerbeek/ssh_compat_getentropy
Otto Moerbeek [Mon, 28 Aug 2023 08:16:43 +0000 (10:16 +0200)] 
Merge pull request #13175 from omoerbeek/ssh_compat_getentropy

Declare ssh_compat_getentropy in the right spot.

12 months agoMerge pull request #13174 from omoerbeek/rec-include-cstdint
Otto Moerbeek [Mon, 28 Aug 2023 08:13:59 +0000 (10:13 +0200)] 
Merge pull request #13174 from omoerbeek/rec-include-cstdint

rec: Include cstdint in mtasker_ucontext.cc, noted by @zeha

13 months agoDeclare ssh_compat_getentropy in the right spot. 13175/head
Otto Moerbeek [Fri, 25 Aug 2023 13:00:37 +0000 (15:00 +0200)] 
Declare ssh_compat_getentropy in the right spot.

Avoiding a redundant and/or missing declaration (depending HAVE_* defines)

13 months agoInclude cstdint in mtasker_ucontext.cc, noted by @zeha 13174/head
Otto Moerbeek [Fri, 25 Aug 2023 12:08:36 +0000 (14:08 +0200)] 
Include cstdint in mtasker_ucontext.cc, noted by @zeha

13 months agoMerge pull request #13165 from omoerbeek/rec-prep-20230825
Otto Moerbeek [Fri, 25 Aug 2023 08:34:06 +0000 (10:34 +0200)] 
Merge pull request #13165 from omoerbeek/rec-prep-20230825

rec: Prep for upcoming rec 4.7.6, 4.8.5 and 4.9.1 releases

13 months agoMerge pull request #13097 from romeroalx/build-pkgs-add-pkghashes-check
Remi Gacogne [Thu, 24 Aug 2023 10:29:12 +0000 (12:29 +0200)] 
Merge pull request #13097 from romeroalx/build-pkgs-add-pkghashes-check

GH actions. build-packages.yml: check if hash entries were created for all targets

13 months agoMerge pull request #13168 from rgacogne/default-net-snmp-to-no
Remi Gacogne [Wed, 23 Aug 2023 15:55:33 +0000 (17:55 +0200)] 
Merge pull request #13168 from rgacogne/default-net-snmp-to-no

Change the default for building with net-snmp from `auto` to `no`

13 months agoChange the default for building with net-snmp from `auto` to `no` 13168/head
Remi Gacogne [Wed, 23 Aug 2023 15:00:17 +0000 (17:00 +0200)] 
Change the default for building with net-snmp from `auto` to `no`

We have had a fair amount of issues with `net-snmp` adding unexpected
and unwanted values to both `CXXFLAGS` and `LDFLAGS`, and it was just
reported to also define `HAVE_LIBSSL` is in public header, which messes
up our own feature detection. Therefore it is likely better for everyone
to prevent net-snmp from being enabled without the user intending it.
For our own packages we explicitly enable net-snmp when supported,
and this commit also enables it in our CI for dnsdist (it was already
done for the recursor) so it should not have any impact.

13 months agoTCPIOHandler: Fix a race when creating the first TLS connections 13167/head
Remi Gacogne [Wed, 23 Aug 2023 14:46:55 +0000 (16:46 +0200)] 
TCPIOHandler: Fix a race when creating the first TLS connections

We used to get a index from OpenSSL when the first incoming or
outgoing TLS connection was created. That index is later used
to store application-related data along the TLS connection, to
be able to access it in callbacks called from inside the OpenSSL
library.
Unfortunately the atomic flag construction used was racy: if a second
connection is created while the first one is still getting the index,
it could be reading the initial value (-1) instead of the actual index,
which might prevent the callback from working properly because they
cannot retrieve the necessary data. The good news is that this should
not have a serious impact: a TLS session might not be properly resumed
while it should have been, leading to a full TLS session negotiation.
This commit fixes the race by using a full mutex and only releasing
it once the value has been computed. In order to avoid a performance
penalty, the index is now computed when a TLS connection _context_
is created, instead of a TLS connection. TLS contexts should be
reused for a large number of connections, and mostly created during
startup or in the first few seconds of the application.

The race was reported by Thread Sanitizer during the
`test_TLS.py::TestTLSFrontendLimits::testTCPConnsPerTLSFrontend`
regression test as:
```
WARNING: ThreadSanitizer: data race (pid=120466)
  Read of size 4 at 0x55a12bf3d758 by thread T4:
    #0 OpenSSLTLSConnection::OpenSSLTLSConnection(int, timeval const&, std::shared_ptr<OpenSSLFrontendContext>) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:106 (dnsdist+0x97ece8) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #1 std::__detail::_MakeUniq<OpenSSLTLSConnection>::__single_object std::make_unique<OpenSSLTLSConnection, int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&>(int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x97eff6) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #2 OpenSSLTLSIOCtx::getConnection(int, timeval const&, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:797 (dnsdist+0x97eff6)
    #3 TCPIOHandler::TCPIOHandler(int, timeval const&, std::shared_ptr<TLSCtx>, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.hh:246 (dnsdist+0x88c24f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 IncomingTCPConnectionState::IncomingTCPConnectionState(ConnectionInfo&&, TCPClientThreadData&, timeval const&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp-upstream.hh:29 (dnsdist+0x88c24f)
    #5 void std::_Construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/stl_construct.h:119 (dnsdist+0x878b1e) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 void std::allocator_traits<std::allocator<void> >::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>&, IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/alloc_traits.h:660 (dnsdist+0x878b1e)
    #7 std::_Sp_counted_ptr_inplace<IncomingTCPConnectionState, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:604 (dnsdist+0x878b1e)
    #8 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<IncomingTCPConnectionState, std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*&, std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:971 (dnsdist+0x878b1e)
    #9 std::__shared_ptr<IncomingTCPConnectionState, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:1712 (dnsdist+0x878b1e)
    #10 std::shared_ptr<IncomingTCPConnectionState>::shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:464 (dnsdist+0x878b1e)
    #11 std::shared_ptr<std::enable_if<!std::is_array<IncomingTCPConnectionState>::value, IncomingTCPConnectionState>::type> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:1010 (dnsdist+0x878b1e)
    #12 handleIncomingTCPQuery /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1118 (dnsdist+0x878b1e)
    #13 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x32d951) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #14 std::enable_if<is_invocable_r_v<void, void (*&)(int, boost::any&), int, boost::any&>, void>::type std::__invoke_r<void, void (*&)(int, boost::any&), int, boost::any&>(void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:111 (dnsdist+0x32d951)
    #15 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/include/c++/13.2.1/bits/std_function.h:290 (dnsdist+0x32d951)
    #16 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/include/c++/13.2.1/bits/std_function.h:591 (dnsdist+0x98fc0f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #17 EpollFDMultiplexer::run(timeval*, int) /work/pdns/pdns/dnsdistdist/epollmplexer.cc:190 (dnsdist+0x98fc0f)
    #18 tcpClientThread /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1251 (dnsdist+0x86cb7f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #19 void std::__invoke_impl<void, void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(std::__invoke_other, void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x87aab1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #20 std::__invoke_result<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >::type std::__invoke<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:96 (dnsdist+0x87aab1)
    #21 void std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>) /usr/include/c++/13.2.1/bits/std_thread.h:292 (dnsdist+0x87aab1)
    #22 std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::operator()() /usr/include/c++/13.2.1/bits/std_thread.h:299 (dnsdist+0x87aab1)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > > >::_M_run() /usr/include/c++/13.2.1/bits/std_thread.h:244 (dnsdist+0x87aab1)
    #24 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104 (libstdc++.so.6+0xe1942) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)

  Previous write of size 4 at 0x55a12bf3d758 by thread T3:
    #0 OpenSSLTLSConnection::OpenSSLTLSConnection(int, timeval const&, std::shared_ptr<OpenSSLFrontendContext>) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:88 (dnsdist+0x97ed98) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #1 std::__detail::_MakeUniq<OpenSSLTLSConnection>::__single_object std::make_unique<OpenSSLTLSConnection, int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&>(int&, timeval const&, std::shared_ptr<OpenSSLFrontendContext>&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x97eff6) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #2 OpenSSLTLSIOCtx::getConnection(int, timeval const&, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:797 (dnsdist+0x97eff6)
    #3 TCPIOHandler::TCPIOHandler(int, timeval const&, std::shared_ptr<TLSCtx>, long) /work/pdns/pdns/dnsdistdist/tcpiohandler.hh:246 (dnsdist+0x88c24f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 IncomingTCPConnectionState::IncomingTCPConnectionState(ConnectionInfo&&, TCPClientThreadData&, timeval const&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp-upstream.hh:29 (dnsdist+0x88c24f)
    #5 void std::_Construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/stl_construct.h:119 (dnsdist+0x878b1e) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 void std::allocator_traits<std::allocator<void> >::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>&, IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/alloc_traits.h:660 (dnsdist+0x878b1e)
    #7 std::_Sp_counted_ptr_inplace<IncomingTCPConnectionState, std::allocator<void>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<void>, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:604 (dnsdist+0x878b1e)
    #8 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<IncomingTCPConnectionState, std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*&, std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:971 (dnsdist+0x878b1e)
    #9 std::__shared_ptr<IncomingTCPConnectionState, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr_base.h:1712 (dnsdist+0x878b1e)
    #10 std::shared_ptr<IncomingTCPConnectionState>::shared_ptr<std::allocator<void>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<void> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:464 (dnsdist+0x878b1e)
    #11 std::shared_ptr<std::enable_if<!std::is_array<IncomingTCPConnectionState>::value, IncomingTCPConnectionState>::type> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/include/c++/13.2.1/bits/shared_ptr.h:1010 (dnsdist+0x878b1e)
    #12 handleIncomingTCPQuery /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1118 (dnsdist+0x878b1e)
    #13 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x32d951) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #14 std::enable_if<is_invocable_r_v<void, void (*&)(int, boost::any&), int, boost::any&>, void>::type std::__invoke_r<void, void (*&)(int, boost::any&), int, boost::any&>(void (*&)(int, boost::any&), int&&, boost::any&) /usr/include/c++/13.2.1/bits/invoke.h:111 (dnsdist+0x32d951)
    #15 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/include/c++/13.2.1/bits/std_function.h:290 (dnsdist+0x32d951)
    #16 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/include/c++/13.2.1/bits/std_function.h:591 (dnsdist+0x98fc0f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #17 EpollFDMultiplexer::run(timeval*, int) /work/pdns/pdns/dnsdistdist/epollmplexer.cc:190 (dnsdist+0x98fc0f)
    #18 tcpClientThread /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1251 (dnsdist+0x86cb7f) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #19 void std::__invoke_impl<void, void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(std::__invoke_other, void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:61 (dnsdist+0x87aab1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #20 std::__invoke_result<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >::type std::__invoke<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > >(void (*&&)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/invoke.h:96 (dnsdist+0x87aab1)
    #21 void std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>) /usr/include/c++/13.2.1/bits/std_thread.h:292 (dnsdist+0x87aab1)
    #22 std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > >::operator()() /usr/include/c++/13.2.1/bits/std_thread.h:299 (dnsdist+0x87aab1)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >&&, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >&&, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >&&, std::vector<ClientState*, std::allocator<ClientState*> >), pdns::channel::Receiver<ConnectionInfo, std::default_delete<ConnectionInfo> >, pdns::channel::Receiver<CrossProtocolQuery, std::default_delete<CrossProtocolQuery> >, pdns::channel::Receiver<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, pdns::channel::Sender<TCPCrossProtocolResponse, std::default_delete<TCPCrossProtocolResponse> >, std::vector<ClientState*, std::allocator<ClientState*> > > > >::_M_run() /usr/include/c++/13.2.1/bits/std_thread.h:244 (dnsdist+0x87aab1)
    #24 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:104 (libstdc++.so.6+0xe1942) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)

  Location is global 'OpenSSLTLSConnection::s_tlsConnIndex' of size 4 at 0x55a12bf3d758 (dnsdist+0xc49758)

  Thread T4 'dnsdist/tcpClie' (tid=120471, running) created by main thread at:
    #0 pthread_create /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x44219) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
    #1 __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663 (libstdc++.so.6+0xe1a29) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172 (libstdc++.so.6+0xe1a29)
    #3 TCPClientCollection::addTCPClientThread(std::vector<ClientState*, std::allocator<ClientState*> >&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:149 (dnsdist+0x8685a1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 TCPClientCollection::TCPClientCollection(unsigned long, std::vector<ClientState*, std::allocator<ClientState*> >) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:126 (dnsdist+0x868912) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #5 std::__detail::_MakeUniq<TCPClientCollection>::__single_object std::make_unique<TCPClientCollection, unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> > >(unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x20adef) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 main /work/pdns/pdns/dnsdistdist/dnsdist.cc:2865 (dnsdist+0x20adef)

  Thread T3 'dnsdist/tcpClie' (tid=120470, running) created by main thread at:
    #0 pthread_create /usr/src/debug/gcc/gcc/libsanitizer/tsan/tsan_interceptors_posix.cpp:1036 (libtsan.so.2+0x44219) (BuildId: 7e8fcb9ed0a63b98f2293e37c92ac955413efd9e)
    #1 __gthread_create /usr/src/debug/gcc/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:663 (libstdc++.so.6+0xe1a29) (BuildId: 207eb738c5976dd9aac1ae0640fc4de5946b547e)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:172 (libstdc++.so.6+0xe1a29)
    #3 TCPClientCollection::addTCPClientThread(std::vector<ClientState*, std::allocator<ClientState*> >&) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:149 (dnsdist+0x8685a1) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #4 TCPClientCollection::TCPClientCollection(unsigned long, std::vector<ClientState*, std::allocator<ClientState*> >) /work/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:126 (dnsdist+0x868912) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #5 std::__detail::_MakeUniq<TCPClientCollection>::__single_object std::make_unique<TCPClientCollection, unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> > >(unsigned long&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/include/c++/13.2.1/bits/unique_ptr.h:1070 (dnsdist+0x20adef) (BuildId: ad82581368352777fda41d4b4145ba8ec738044c)
    #6 main /work/pdns/pdns/dnsdistdist/dnsdist.cc:2865 (dnsdist+0x20adef)

SUMMARY: ThreadSanitizer: data race /work/pdns/pdns/dnsdistdist/tcpiohandler.cc:106 in OpenSSLTLSConnection::OpenSSLTLSConnection(int, timeval const&, std::shared_ptr<OpenSSLFrontendContext>)
```

13 months agoMerge pull request #13166 from omoerbeek/rec-buildbot-nosnmp
Otto Moerbeek [Wed, 23 Aug 2023 13:03:43 +0000 (15:03 +0200)] 
Merge pull request #13166 from omoerbeek/rec-buildbot-nosnmp

rec/buildbot: Avoid running SNMP tests on the current buildbot setup

13 months agodnsdist: Split the DynBlocks regression tests
Remi Gacogne [Wed, 23 Aug 2023 12:40:30 +0000 (14:40 +0200)] 
dnsdist: Split the DynBlocks regression tests

On my 8 physical CPU cores machine this brings the total time for
all regression tests to 107.60s (01:47).

13 months agoAvoid running SNMP tests on the current buildbot setup 13166/head
Otto Moerbeek [Wed, 23 Aug 2023 11:23:56 +0000 (13:23 +0200)] 
Avoid running SNMP tests on the current buildbot setup

Since the change from nose to pytest, the SNMP exclusion via the environment
var NOSE_EXLUDE does no longer work.

13 months agoPrep for upcoming rec 4.7.6, 4.8.5 and 4.9.1 releases 13165/head
Otto Moerbeek [Wed, 23 Aug 2023 09:16:50 +0000 (11:16 +0200)] 
Prep for upcoming rec 4.7.6, 4.8.5 and 4.9.1 releases

13 months agoMerge pull request #13095 from rgacogne/coding-guidelines
Remi Gacogne [Wed, 23 Aug 2023 07:40:09 +0000 (09:40 +0200)] 
Merge pull request #13095 from rgacogne/coding-guidelines

Add a coding guidelines document to the public repository

13 months agoBindlexer whitespace cleanup
Fred Morcos [Tue, 22 Aug 2023 14:49:49 +0000 (16:49 +0200)] 
Bindlexer whitespace cleanup

13 months agoMerge pull request #13071 from omoerbeek/json-encoding
Otto Moerbeek [Tue, 22 Aug 2023 13:55:15 +0000 (15:55 +0200)] 
Merge pull request #13071 from omoerbeek/json-encoding

Fix code producing json

13 months agoAuth: Print the list of loaded modules next to the config.h preset 13162/head
Fred Morcos [Tue, 22 Aug 2023 09:30:29 +0000 (11:30 +0200)] 
Auth: Print the list of loaded modules next to the config.h preset

13 months agoCoding Guidelines: Apply suggestions from reviews 13095/head
Remi Gacogne [Mon, 21 Aug 2023 15:35:30 +0000 (17:35 +0200)] 
Coding Guidelines: Apply suggestions from reviews

13 months agoMerge pull request #13155 from rgacogne/channel-make-blocking-params-explicit
Remi Gacogne [Mon, 21 Aug 2023 09:26:16 +0000 (11:26 +0200)] 
Merge pull request #13155 from rgacogne/channel-make-blocking-params-explicit

channel: Make the blocking parameters of the object queue explicit

13 months agoMerge pull request #13102 from omoerbeek/rec-nodata-condition
Otto Moerbeek [Mon, 21 Aug 2023 08:25:17 +0000 (10:25 +0200)] 
Merge pull request #13102 from omoerbeek/rec-nodata-condition

rec: Do not assume the records are in a particular order when determining if an answer is NODATA

13 months agoMerge pull request #13106 from omoerbeek/rec-aggr-cache-replace
Otto Moerbeek [Mon, 21 Aug 2023 08:24:55 +0000 (10:24 +0200)] 
Merge pull request #13106 from omoerbeek/rec-aggr-cache-replace

rec: replace data in the aggressive cache if new data becomes available

13 months agoMerge pull request #13144 from fredmorcos/iputils-cleanup
Fred Morcos [Fri, 18 Aug 2023 19:57:53 +0000 (21:57 +0200)] 
Merge pull request #13144 from fredmorcos/iputils-cleanup

Consistency: Use #ifdef instead of #if in `iputils.cc`

13 months agoMerge pull request #13152 from fredmorcos/cleanup-yaml-to-json
Fred Morcos [Fri, 18 Aug 2023 19:44:16 +0000 (21:44 +0200)] 
Merge pull request #13152 from fredmorcos/cleanup-yaml-to-json

Cleanup `convert-yaml-to-json.py`

13 months agoConsistency: Use #ifdef instead of #if in iputils.cc 13144/head
Fred Morcos [Wed, 16 Aug 2023 12:14:21 +0000 (14:14 +0200)] 
Consistency: Use #ifdef instead of #if in iputils.cc

13 months agochannel: Make the blocking parameters of the object queue explicit 13155/head
Remi Gacogne [Wed, 16 Aug 2023 14:42:26 +0000 (16:42 +0200)] 
channel: Make the blocking parameters of the object queue explicit

13 months agoMerge pull request #13151 from aj-gh/fixtypos
Remi Gacogne [Fri, 18 Aug 2023 11:03:04 +0000 (13:03 +0200)] 
Merge pull request #13151 from aj-gh/fixtypos

Fix a few typos in log messages

13 months agoMerge pull request #13147 from chbruyand/dnsdist-channel-fix
Remi Gacogne [Fri, 18 Aug 2023 11:02:36 +0000 (13:02 +0200)] 
Merge pull request #13147 from chbruyand/dnsdist-channel-fix

dnsdist: DOH - make query channel receiving part blocking

13 months agodnsdist: Use the same UDP timeouts than usual in the 'advanced' tests
Remi Gacogne [Fri, 18 Aug 2023 10:55:10 +0000 (12:55 +0200)] 
dnsdist: Use the same UDP timeouts than usual in the 'advanced' tests

It makes sense to use a short timeout when we know this is going to
fail, but here we actually expect a response, and it seems that the
current timeout is sometimes too short when running with TSAN,
especially when we have a lot of tests running in parallel.

13 months agodnsdist: Set verbose for TestAdvancedGetLocalAddressOnAnyBind
Remi Gacogne [Fri, 18 Aug 2023 06:37:29 +0000 (08:37 +0200)] 
dnsdist: Set verbose for TestAdvancedGetLocalAddressOnAnyBind

13 months agodnsdist: Better handling of network events in the regression test responders
Remi Gacogne [Fri, 18 Aug 2023 06:36:54 +0000 (08:36 +0200)] 
dnsdist: Better handling of network events in the regression test responders

13 months agodnsdist: Fix a deprecation warning in the XPF regression tests
Remi Gacogne [Fri, 18 Aug 2023 06:36:19 +0000 (08:36 +0200)] 
dnsdist: Fix a deprecation warning in the XPF regression tests

13 months agodnsdist: Update the regression tests for parallel testing
Remi Gacogne [Fri, 7 Jul 2023 16:17:13 +0000 (18:17 +0200)] 
dnsdist: Update the regression tests for parallel testing

13 months agoCleanup convert-yaml-to-json.py 13152/head
Fred Morcos [Thu, 17 Aug 2023 14:59:37 +0000 (16:59 +0200)] 
Cleanup convert-yaml-to-json.py

13 months agoFix a few typos. 13151/head
Andreas Jakum [Thu, 17 Aug 2023 13:24:05 +0000 (15:24 +0200)] 
Fix a few typos.

13 months agoMerge pull request #13149 from rgacogne/ddist-fix-frontend-metrics-recvmmsg
Remi Gacogne [Thu, 17 Aug 2023 10:06:50 +0000 (12:06 +0200)] 
Merge pull request #13149 from rgacogne/ddist-fix-frontend-metrics-recvmmsg

dnsdist: Properly record self-answered UDP responses with recvmmsg

13 months agoMerge pull request #13146 from chbruyand/dnsdist-cosmetic-fixes
Remi Gacogne [Thu, 17 Aug 2023 09:37:30 +0000 (11:37 +0200)] 
Merge pull request #13146 from chbruyand/dnsdist-cosmetic-fixes

dnsdist: cosmetic compilation warning fixes

13 months agodnsdist: Properly record self-answered UDP responses with recvmmsg 13149/head
Remi Gacogne [Thu, 17 Aug 2023 09:19:15 +0000 (11:19 +0200)] 
dnsdist: Properly record self-answered UDP responses with recvmmsg

Responses sent directly from dnsdist, without reaching out to a backend
(self-generated and cache hits answers, mostly) where not properly
accounted for in frontend metrics, ring buffer entries and latency
computation when recvmmsg/sendmmsg support was enabled via
`setUDPMultipleMessagesVectorSize()`.

13 months agodnsdsit: reset IncomingTCPConnectionState's buffer with clear() instead of resize() 13146/head
Charles-Henri Bruyand [Wed, 16 Aug 2023 15:20:21 +0000 (17:20 +0200)] 
dnsdsit: reset IncomingTCPConnectionState's buffer with clear() instead of resize()

13 months agodnsdist: remove unused variables warnings
Charles-Henri Bruyand [Wed, 16 Aug 2023 14:32:22 +0000 (16:32 +0200)] 
dnsdist: remove unused variables warnings

13 months agodnsdist: make query channel receiving part blocking to avoid unnecessary CPU consumption 13147/head
Charles-Henri Bruyand [Wed, 16 Aug 2023 15:28:23 +0000 (17:28 +0200)] 
dnsdist: make query channel receiving part blocking to avoid unnecessary CPU consumption

13 months agoMerge pull request #13141 from rgacogne/auth-coverity-4
Remi Gacogne [Wed, 16 Aug 2023 13:59:21 +0000 (15:59 +0200)] 
Merge pull request #13141 from rgacogne/auth-coverity-4

tools: Address more Coverity warnings

13 months agoMerge pull request #13005 from jellekaufmann/master
Peter van Dijk [Wed, 16 Aug 2023 11:31:20 +0000 (13:31 +0200)] 
Merge pull request #13005 from jellekaufmann/master

optsize off by -4 when including DNS cookie

13 months agodnsbulktest: Fix warnings from clang-tidy 13141/head
Remi Gacogne [Wed, 16 Aug 2023 09:46:03 +0000 (11:46 +0200)] 
dnsbulktest: Fix warnings from clang-tidy

13 months agodnsdist: Try to fix a data race warning reported by TSAN 13143/head
Remi Gacogne [Wed, 16 Aug 2023 09:49:23 +0000 (11:49 +0200)] 
dnsdist: Try to fix a data race warning reported by TSAN

13 months agocalidns: Fix warnings from clang-tidy
Remi Gacogne [Wed, 16 Aug 2023 09:45:49 +0000 (11:45 +0200)] 
calidns: Fix warnings from clang-tidy

13 months agochannel: Fix redundant redeclaration warning 13142/head
Remi Gacogne [Wed, 16 Aug 2023 09:18:25 +0000 (11:18 +0200)] 
channel: Fix redundant redeclaration warning

g++ reports:
```
In file included from channel.cc:23:
channel.hh:38:17: warning: redundant redeclaration of ‘void __tsan_acquire(void*)’ in same scope [-Wredundant-decls]
   38 | extern "C" void __tsan_acquire(void* addr);
      |                 ^~~~~~~~~~~~~~
In file included from /usr/include/c++/13.2.1/bits/shared_ptr_atomic.h:37,
                 from /usr/include/c++/13.2.1/memory:81,
                 from channel.hh:23:
/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/sanitizer/tsan_interface.h:24:6: note: previous declaration of ‘void __tsan_acquire(void*)’
   24 | void __tsan_acquire(void *addr);
      |      ^~~~~~~~~~~~~~
channel.hh:39:17: warning: redundant redeclaration of ‘void __tsan_release(void*)’ in same scope [-Wredundant-decls]
   39 | extern "C" void __tsan_release(void* addr);
      |                 ^~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-pc-linux-gnu/13.2.1/include/sanitizer/tsan_interface.h:25:6: note: previous declaration of ‘void __tsan_release(void*)’
   25 | void __tsan_release(void *addr);
```

13 months agodnsgram: Fix Coverity CID 1401647
Remi Gacogne [Wed, 16 Aug 2023 09:13:09 +0000 (11:13 +0200)] 
dnsgram: Fix Coverity CID 1401647

13 months agoixfrdist: Fix Coverity CID 1504137: Uncaught exception
Remi Gacogne [Wed, 16 Aug 2023 08:15:42 +0000 (10:15 +0200)] 
ixfrdist: Fix Coverity CID 1504137: Uncaught exception

13 months agodnsbulktest: Fix Coverity CID 1401681 and 1401676
Remi Gacogne [Wed, 16 Aug 2023 08:15:07 +0000 (10:15 +0200)] 
dnsbulktest: Fix Coverity CID 1401681 and 1401676

13 months agocalidns: Fix Coverity CID 1401679: Uncaught exception
Remi Gacogne [Wed, 16 Aug 2023 08:14:25 +0000 (10:14 +0200)] 
calidns: Fix Coverity CID 1401679: Uncaught exception

13 months agoCoding Guidelines: Mention reserve()/resize() explicitly, with links
Remi Gacogne [Wed, 16 Aug 2023 07:36:21 +0000 (09:36 +0200)] 
Coding Guidelines: Mention reserve()/resize() explicitly, with links

13 months agoMerge pull request #13135 from rgacogne/ddist-gettc
Remi Gacogne [Wed, 16 Aug 2023 07:28:01 +0000 (09:28 +0200)] 
Merge pull request #13135 from rgacogne/ddist-gettc

dnsdist: Add a DNSHeader:getTC() Lua binding

13 months agoMerge pull request #13138 from Habbie/cid398388
Peter van Dijk [Tue, 15 Aug 2023 19:02:14 +0000 (21:02 +0200)] 
Merge pull request #13138 from Habbie/cid398388

coverity CID 398388: useless <0 check on unsigned value

13 months agodnsdist: Remove a second useless check, useless static casts 13138/head
Remi Gacogne [Tue, 15 Aug 2023 16:07:52 +0000 (18:07 +0200)] 
dnsdist: Remove a second useless check, useless static casts

13 months agoMerge pull request #13139 from fredmorcos/minor-cleanups
Peter van Dijk [Tue, 15 Aug 2023 16:27:24 +0000 (18:27 +0200)] 
Merge pull request #13139 from fredmorcos/minor-cleanups

Minor cleanup

13 months agogettime: fix minor compilation warnings 13139/head
Fred Morcos [Tue, 15 Aug 2023 11:22:34 +0000 (13:22 +0200)] 
gettime: fix minor compilation warnings

13 months agoMakefile whitespace
Fred Morcos [Tue, 15 Aug 2023 11:22:51 +0000 (13:22 +0200)] 
Makefile whitespace

13 months agoMerge pull request #13136 from Habbie/ixfrdist-soa-aa
Peter van Dijk [Tue, 15 Aug 2023 11:41:04 +0000 (13:41 +0200)] 
Merge pull request #13136 from Habbie/ixfrdist-soa-aa

ixfrdist: set AA=1 on SOA responses

13 months agoMerge pull request #13134 from Habbie/ixfrdist-pytest
Peter van Dijk [Tue, 15 Aug 2023 11:40:49 +0000 (13:40 +0200)] 
Merge pull request #13134 from Habbie/ixfrdist-pytest

ixfrdist: switch testing to pytest

13 months agocoverity CID 398388: useless <0 check on unsigned value
Peter van Dijk [Tue, 15 Aug 2023 08:28:46 +0000 (10:28 +0200)] 
coverity CID 398388: useless <0 check on unsigned value

13 months agodnsdist: Fix the documented return value of DNSHeader:getTC() 13135/head
Remi Gacogne [Mon, 14 Aug 2023 15:50:52 +0000 (17:50 +0200)] 
dnsdist: Fix the documented return value of DNSHeader:getTC()

13 months agoixfrdist: set AA=1 on SOA responses 13136/head
Peter van Dijk [Mon, 14 Aug 2023 14:52:27 +0000 (16:52 +0200)] 
ixfrdist: set AA=1 on SOA responses

13 months agoeqdnsmessage: adjust to type changes in dnspython
Peter van Dijk [Mon, 14 Aug 2023 15:10:10 +0000 (17:10 +0200)] 
eqdnsmessage: adjust to type changes in dnspython

13 months agoMerge pull request #13094 from rgacogne/ixfrdist-main-complexity
Remi Gacogne [Mon, 14 Aug 2023 15:08:05 +0000 (17:08 +0200)] 
Merge pull request #13094 from rgacogne/ixfrdist-main-complexity

ixfrdist: Reduce the complexity of the main function

13 months agodnsdist: Add a DNSHeader:getTC() Lua binding
Remi Gacogne [Mon, 14 Aug 2023 15:02:39 +0000 (17:02 +0200)] 
dnsdist: Add a DNSHeader:getTC() Lua binding

13 months agoixfrdist: switch testing to pytest 13134/head
Peter van Dijk [Mon, 14 Aug 2023 14:55:02 +0000 (16:55 +0200)] 
ixfrdist: switch testing to pytest

13 months agoixfrdist: after --help or --version, exit (includes var rename) 13094/head
Peter van Dijk [Mon, 14 Aug 2023 13:32:30 +0000 (15:32 +0200)] 
ixfrdist: after --help or --version, exit (includes var rename)

13 months agoMerge pull request #13114 from rgacogne/auth-coverity-3
Remi Gacogne [Mon, 14 Aug 2023 12:39:15 +0000 (14:39 +0200)] 
Merge pull request #13114 from rgacogne/auth-coverity-3

auth: Fix uninitialized scalar field warnings from Coverity