]> git.ipfire.org Git - thirdparty/pdns.git/log
thirdparty/pdns.git
9 months agofix #12801 + regression test 13132/head
Christof Chen [Thu, 11 May 2023 18:00:01 +0000 (20:00 +0200)] 
fix #12801 + regression test

(cherry picked from commit 6bb404b627442d64b829edcffcc9f5fbc4987eb4)

11 months agoMerge pull request #12977 from rgacogne/ddist18-fix-doh-xforwardedfor-maxtcpconnperclient
Remi Gacogne [Mon, 10 Jul 2023 08:48:51 +0000 (10:48 +0200)] 
Merge pull request #12977 from rgacogne/ddist18-fix-doh-xforwardedfor-maxtcpconnperclient

dnsdist-1.8.x: Fix a crash when X-Forwarded-For overrides the initial source IP

11 months agodnsdist: Fix a crash when X-Forwarded-For overrides the initial source IP 12977/head
Remi Gacogne [Mon, 3 Jul 2023 12:06:05 +0000 (14:06 +0200)] 
dnsdist: Fix a crash when X-Forwarded-For overrides the initial source IP

When both the processing of X-Forwarded-For DNS-over-https headers
(`trustForwardedForHeader=true`) and a maximum number of concurrent
TCP connections per client (`setMaxTCPConnectionsPerClient()`) are
enabled, dnsdist could crash because of an uncaught exception:
```
dnsdist[X]: terminate called after throwing an instance of 'std::runtime_error'
dnsdist[X]:   what():  DOH thread failed to launch: map::at
```
This was caused by the TCP connection being first accounted for with the
initial source IP (from the upstream HTTP proxy) but later released using
the IP extracted from the X-Forwarded-For header, leading to an unexpected
failure to locate the corresponding entry in the map.

We might not actually want to enforce the maximum number of concurrent
TCP connections per client when X-Forwarded-For processing is enabled,
though, because we usually want to rate limit the actual client and
not the HTTP proxy, but X-Forwarded-For being set per HTTP query, instead
of per-connection, makes that pretty much impossible at our level since
the same connection from the HTTP proxy can be reused for several clients.
The proxy protocol would be a better option to enforce that limit.

(cherry picked from commit 9b703b51ca25838eeec19449a1c49cb926aef52a)

11 months agoMerge pull request #12824 from rgacogne/ddist18-12819
Remi Gacogne [Thu, 15 Jun 2023 13:58:40 +0000 (15:58 +0200)] 
Merge pull request #12824 from rgacogne/ddist18-12819

dnsdist-1.8.x: Stop setting SO_REUSEADDR on outgoing UDP client sockets

11 months agoMerge pull request #12823 from rgacogne/ddist18-12811
Remi Gacogne [Thu, 15 Jun 2023 13:58:05 +0000 (15:58 +0200)] 
Merge pull request #12823 from rgacogne/ddist18-12811

dnsdist-1.8.x: Add the query ID to health-check log messages, fix nits

11 months agoMerge pull request #12822 from rgacogne/ddist18-12802
Remi Gacogne [Thu, 15 Jun 2023 13:57:35 +0000 (15:57 +0200)] 
Merge pull request #12822 from rgacogne/ddist18-12802

dnsdist-1.8.x: Properly set the size of the UDP health-check response

11 months agoMerge pull request #12821 from rgacogne/ddist18-12804
Remi Gacogne [Thu, 15 Jun 2023 13:56:58 +0000 (15:56 +0200)] 
Merge pull request #12821 from rgacogne/ddist18-12804

dnsdist-1.8.x: Account for the health-check run time between two runs

11 months agoMerge pull request #12820 from rgacogne/ddist18-12800
Remi Gacogne [Thu, 15 Jun 2023 13:56:25 +0000 (15:56 +0200)] 
Merge pull request #12820 from rgacogne/ddist18-12800

dnsdist-1.8.x: Print the received, invalid health-check response ID

12 months agodnsdist: Really disable REUSEADDR on outgoing UDP client sockets 12824/head
Remi Gacogne [Mon, 15 May 2023 13:32:27 +0000 (15:32 +0200)] 
dnsdist: Really disable REUSEADDR on outgoing UDP client sockets

It turns out that our `Socket::bind()` will _helpfully_ enable this
by default.

(cherry picked from commit 20f67fee9447069d4586a41254468ac060b2d65e)

12 months agodnsdist: Stop setting SO_REUSEADDR on outgoing UDP client sockets
Remi Gacogne [Mon, 15 May 2023 12:10:55 +0000 (14:10 +0200)] 
dnsdist: Stop setting SO_REUSEADDR on outgoing UDP client sockets

`SO_REUSEADDR` is useful on TCP server sockets to allow binding quickly
after restarting the process without waiting `TIME_WAIT` seconds, or
to allow some port reuse on BSD. It also allows reusing a port more
quickly for TCP client sockets.
For UDP sockets, however, Linux allows two sockets to be bound to the
same address and port, and will distribute all packets to the most
recent socket, which is very unexpected, to say the least.

(cherry picked from commit b33f09f1989e938c503142a38c556df94254443a)

12 months agodnsdist: Add the query ID to health-check log messages, fix nits 12823/head
Remi Gacogne [Thu, 11 May 2023 13:22:25 +0000 (15:22 +0200)] 
dnsdist: Add the query ID to health-check log messages, fix nits

(cherry picked from commit 385fca46ffe3a6f84806aab67d47c8b80ebac26c)

12 months agodnsdist: Properly set the size of the UDP health-check response 12822/head
Remi Gacogne [Thu, 11 May 2023 13:27:07 +0000 (15:27 +0200)] 
dnsdist: Properly set the size of the UDP health-check response

We forgot to resize the response buffer to what we actually got,
so the initial buffer size (512) was mistakenly used later on.
Technically this should not be an issue as the buffer is large
enough, but that prevents us from reporting that the response
was broken if it not large enough for a DNS header, for example.

(cherry picked from commit 6a04912e36e32104434d2b1b0625a0de0e0c002d)

12 months agodnsdist: Account for the health-check run time between two runs 12821/head
Remi Gacogne [Thu, 11 May 2023 13:07:01 +0000 (15:07 +0200)] 
dnsdist: Account for the health-check run time between two runs

We used to wait one full second between every run, which only makes
sense if the runs are not taking a long time. But as soon as we have
at least one check timing out, the run is taking roughly the time
of the longest timeout configured, so after this commit we:
- do not wait at all if the last run took more than a full second
- wait one second minus the elapsed time of the last run otherwise

(cherry picked from commit 5b48dd1425dabbba7ab6758fe3ccf2b1410faef7)

12 months agodnsdist: Print the received, invalid health-check response ID 12820/head
Remi Gacogne [Thu, 11 May 2023 08:15:44 +0000 (10:15 +0200)] 
dnsdist: Print the received, invalid health-check response ID

(cherry picked from commit bf22f0fdc1b9fe5f5d4e1d96333751542c432fe6)

12 months agoMerge pull request #12795 from rgacogne/ddist18-only-ddist-ci
Remi Gacogne [Mon, 15 May 2023 08:25:58 +0000 (10:25 +0200)] 
Merge pull request #12795 from rgacogne/ddist18-only-ddist-ci

dnsdist-1.8.x: Remove the workflows that are not relevant to dnsdist 1.8.x

12 months agoPin pyasn1 to 0.4.8 because 0.5.0 broke the API with 0.5.0 12795/head
Fred Morcos [Fri, 21 Apr 2023 08:58:14 +0000 (10:58 +0200)] 
Pin pyasn1 to 0.4.8 because 0.5.0 broke the API with 0.5.0

https://github.com/pyasn1/pyasn1/issues/28

On 20230420: https://pypi.org/project/pyasn1/#history

(cherry picked from commit 7d6cbd0823d2ebdede600dc034d852ba2c5f39c6)

13 months agodnsdist-1.8.x: Remove the workflows that are not relevant to dnsdist 1.8.x
Remi Gacogne [Tue, 9 May 2023 14:43:45 +0000 (16:43 +0200)] 
dnsdist-1.8.x: Remove the workflows that are not relevant to dnsdist 1.8.x

14 months agoMerge pull request #12682 from rgacogne/ddist-ci-wait-for dnsdist-1.8.0
Remi Gacogne [Tue, 28 Mar 2023 10:39:46 +0000 (12:39 +0200)] 
Merge pull request #12682 from rgacogne/ddist-ci-wait-for

dnsdist: Wait until dnsdist is listening on the requested port in the tests

14 months agoMerge pull request #12688 from omoerbeek/rec-bound-invariant
Otto Moerbeek [Mon, 27 Mar 2023 15:04:41 +0000 (17:04 +0200)] 
Merge pull request #12688 from omoerbeek/rec-bound-invariant

rec: re-establish "recursion depth is always increasing" invariant

14 months agoALso derive alias recursion bound from s_maxdepth. 12688/head
Otto Moerbeek [Mon, 27 Mar 2023 10:22:16 +0000 (12:22 +0200)] 
ALso derive alias recursion bound from s_maxdepth.

This should be revisited, as it looks like the check
in doCNAMECacheCheck() overrides the less strick check in
doResolveNoQNameMinimization().

14 months agodnsdist: Don't test the web server port before the concurrent conns check 12682/head
Remi Gacogne [Mon, 27 Mar 2023 08:01:51 +0000 (10:01 +0200)] 
dnsdist: Don't test the web server port before the concurrent conns check

14 months agorec: re-establish "recursion depth is always increasing" invariant
Otto Moerbeek [Thu, 23 Mar 2023 10:42:35 +0000 (11:42 +0100)] 
rec: re-establish "recursion depth is always increasing" invariant

Now that we have getQMFallbackMode(), we can go back to always increase depth
and never decrease it and adapt the upper bound check if needed.

This should prevent a re-occurence of a bug similar to PowerDNS Security Advisory 2023-01.

14 months agoMerge pull request #12687 from rgacogne/ddist-rule-params
Remi Gacogne [Sat, 25 Mar 2023 14:54:09 +0000 (15:54 +0100)] 
Merge pull request #12687 from rgacogne/ddist-rule-params

dnsdist: Fix 'Unknown key' issue for actions and rules parameters

14 months agoMerge pull request #12684 from Habbie/amazon-linux-2023
Peter van Dijk [Fri, 24 Mar 2023 22:51:20 +0000 (23:51 +0100)] 
Merge pull request #12684 from Habbie/amazon-linux-2023

builder: add amazon-2023 target

14 months agodnsdist: Fix 'Unknown key' issue for actions and rules parameters 12687/head
Remi Gacogne [Fri, 24 Mar 2023 17:26:13 +0000 (18:26 +0100)] 
dnsdist: Fix 'Unknown key' issue for actions and rules parameters

The parameters were properly parsed but not marked as consumed,
leading to warnings such as:
```
addAction: Unknown key 'name' given - ignored
```

14 months agobuilder: add amazon-2023 target 12684/head
Peter van Dijk [Tue, 21 Mar 2023 14:32:06 +0000 (15:32 +0100)] 
builder: add amazon-2023 target

14 months agoMerge pull request #12668 from aerique/feature/add-auth-48-to-repo-script
Remi Gacogne [Fri, 24 Mar 2023 13:49:27 +0000 (14:49 +0100)] 
Merge pull request #12668 from aerique/feature/add-auth-48-to-repo-script

Add auth-48 to repo test script.

14 months agodnsdist: Remove a left-over startup delay in the regression tests
Remi Gacogne [Fri, 24 Mar 2023 09:47:27 +0000 (10:47 +0100)] 
dnsdist: Remove a left-over startup delay in the regression tests

14 months agodnsdist: Wait the correct port to come up on special case tests
Remi Gacogne [Fri, 24 Mar 2023 09:47:02 +0000 (10:47 +0100)] 
dnsdist: Wait the correct port to come up on special case tests

14 months agodnsdist: Wait for the API port to be available before running the tests
Remi Gacogne [Fri, 24 Mar 2023 09:45:08 +0000 (10:45 +0100)] 
dnsdist: Wait for the API port to be available before running the tests

14 months agoMerge pull request #12672 from omoerbeek/dnsheader-aligned
Otto Moerbeek [Wed, 22 Mar 2023 13:34:59 +0000 (14:34 +0100)] 
Merge pull request #12672 from omoerbeek/dnsheader-aligned

rec and dnsdist: fix a dnsheader unaligned case

14 months agoContinue processing records after OPT in ageDNSPacket() 12672/head
Otto Moerbeek [Wed, 22 Mar 2023 10:04:13 +0000 (11:04 +0100)] 
Continue processing records after OPT in ageDNSPacket()

14 months agoMerge pull request #12664 from rgacogne/auth-svcb-race-copy-const
Remi Gacogne [Wed, 22 Mar 2023 09:17:10 +0000 (10:17 +0100)] 
Merge pull request #12664 from rgacogne/auth-svcb-race-copy-const

DNSRecord: Ensure that the content can be read or replaced, not edited

14 months agoAnother case of too early API access
Otto Moerbeek [Tue, 21 Mar 2023 16:07:46 +0000 (17:07 +0100)] 
Another case of too early API access

14 months agorec and dnsdist: fix a case of potential unaligned header access
Otto Moerbeek [Tue, 21 Mar 2023 12:34:35 +0000 (13:34 +0100)] 
rec and dnsdist: fix a case of potential unaligned header access

I addded an argument to ageDNSPacket to circumvent having to do it in
two places in rec.

I am also wondering if the break in ageDNSPakcet() is right.
I suspect we want to continue with other records even if we see an OPT
(which does not *have* to be the last as far as I know)

14 months agoMerge pull request #12661 from Habbie/auth-4.8.0-alpha1-docs
Peter van Dijk [Tue, 21 Mar 2023 13:56:38 +0000 (14:56 +0100)] 
Merge pull request #12661 from Habbie/auth-4.8.0-alpha1-docs

auth-4.8.0-alpha1: secpoll&docs

14 months agoMerge pull request #12627 from Habbie/ubuntu-lunar
Peter van Dijk [Tue, 21 Mar 2023 12:34:03 +0000 (13:34 +0100)] 
Merge pull request #12627 from Habbie/ubuntu-lunar

add ubuntu:lunar builder target and test it daily

14 months agoauth-4.8.0-alpha1: secpoll&docs 12661/head
Peter van Dijk [Fri, 17 Mar 2023 13:09:01 +0000 (14:09 +0100)] 
auth-4.8.0-alpha1: secpoll&docs

14 months agoAdd auth-48 to repo test script. 12668/head
Erik Winkels [Tue, 21 Mar 2023 09:28:13 +0000 (10:28 +0100)] 
Add auth-48 to repo test script.

14 months agoMerge pull request #12667 from omoerbeek/rec-test-notify-wait-for-api
Otto Moerbeek [Tue, 21 Mar 2023 08:39:26 +0000 (09:39 +0100)] 
Merge pull request #12667 from omoerbeek/rec-test-notify-wait-for-api

rec: Wait for the API to come alive before using it in notify test

14 months agoMerge pull request #12654 from Habbie/dnsdist-secpoll-ctime
Remi Gacogne [Tue, 21 Mar 2023 08:25:08 +0000 (09:25 +0100)] 
Merge pull request #12654 from Habbie/dnsdist-secpoll-ctime

dnsdist secpoll: explicitly include necessary ctime header for time_t

14 months agorec: Wait for the API to come alive before using it in notify test 12667/head
Otto Moerbeek [Mon, 20 Mar 2023 11:36:20 +0000 (12:36 +0100)] 
rec: Wait for the API to come alive before using it in notify test

14 months agoMerge pull request #12666 from Habbie/lmdb-bit-header auth-4.8.0-alpha1
Peter van Dijk [Mon, 20 Mar 2023 10:03:26 +0000 (11:03 +0100)] 
Merge pull request #12666 from Habbie/lmdb-bit-header

lmdb-safe: remove unused header, plus assert macro presence

14 months agolmdb-safe: remove unused header, plus assert macro presence 12666/head
Peter van Dijk [Mon, 20 Mar 2023 09:03:25 +0000 (10:03 +0100)] 
lmdb-safe: remove unused header, plus assert macro presence

14 months agoDNSRecord: Ensure that the content can be read or replaced, not edited 12664/head
Remi Gacogne [Thu, 16 Mar 2023 21:55:56 +0000 (22:55 +0100)] 
DNSRecord: Ensure that the content can be read or replaced, not edited

14 months agoMerge pull request #12546 from Habbie/auth-lmdb-schema-5
Peter van Dijk [Fri, 17 Mar 2023 15:29:17 +0000 (16:29 +0100)] 
Merge pull request #12546 from Habbie/auth-lmdb-schema-5

auth: LMDB schema version 5

14 months ago auth: Prevent a race during the processing of SVC auto-hints
Remi Gacogne [Thu, 16 Mar 2023 13:18:49 +0000 (14:18 +0100)] 
 auth: Prevent a race during the processing of SVC auto-hints

When `svc-autohints` is enabled, the content of SVCB and HTTPS records
is modified in `PacketHandler::doAdditionalProcessing()` to expand
the IPv4 and IPv6 with their actual values.
This causes an issue because the content of these records might be
shared between threads, via the record cache, and one thread could
be trying to read from the internal `std::set` while a second thread
is altering it, leading to a data race and possibly to memory corruption
and a crash.
This is correctly detected by TSAN:
```
WARNING: ThreadSanitizer: data race (pid=102795)
  Write of size 8 at 0x7b3400010350 by thread T33:
    #0 operator delete(void*) <null> (pdns_server+0x211b7c) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #1 std::__new_allocator<std::_Rb_tree_node<SvcParam>>::deallocate(std::_Rb_tree_node<SvcParam>*, unsigned long) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/new_allocator.h:158:2 (pdns_server+0x33fc78) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #2 std::allocator_traits<std::allocator<std::_Rb_tree_node<SvcParam>>>::deallocate(std::allocator<std::_Rb_tree_node<SvcParam>>&, std::_Rb_tree_node<SvcParam>*, unsigned long) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/alloc_traits.h:496:13 (pdns_server+0x33fc78)
    #3 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::_M_put_node(std::_Rb_tree_node<SvcParam>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:565:9 (pdns_server+0x33fc78)
    #4 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::_M_drop_node(std::_Rb_tree_node<SvcParam>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:632:2 (pdns_server+0x33fc78)
    #5 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::_M_erase_aux(std::_Rb_tree_const_iterator<SvcParam>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:2495:7 (pdns_server+0x33fc78)
    #6 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::erase[abi:cxx11](std::_Rb_tree_const_iterator<SvcParam>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:1197:2 (pdns_server+0x33fc78)
    #7 std::set<SvcParam, std::less<SvcParam>, std::allocator<SvcParam>>::erase[abi:cxx11](std::_Rb_tree_const_iterator<SvcParam>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_set.h:655:21 (pdns_server+0x33fc78)
    #8 SVCBBaseRecordContent::setHints(SvcParam::SvcParamKey const&, std::vector<ComboAddress, std::allocator<ComboAddress>> const&) /work/pdns/pdns/dnsrecords.cc:768:14 (pdns_server+0x33fc78)
    #9 PacketHandler::doAdditionalProcessing(DNSPacket&, std::unique_ptr<DNSPacket, std::default_delete<DNSPacket>>&) /work/pdns/pdns/packethandler.cc:565:16 (pdns_server+0x4ed330) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #10 PacketHandler::doQuestion(DNSPacket&) /work/pdns/pdns/packethandler.cc:1794:5 (pdns_server+0x4f79b4) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    PowerDNS#11 PacketHandler::question(DNSPacket&) /work/pdns/pdns/packethandler.cc:1175:10 (pdns_server+0x4f649a) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    PowerDNS#12 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::distribute(int) /work/pdns/pdns/./distributor.hh:220:14 (pdns_server+0x260f70) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    PowerDNS#13 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()::operator()() const /work/pdns/pdns/./distributor.hh:179:25 (pdns_server+0x260b31) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    PowerDNS#14 void std::__invoke_impl<void, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(std::__invoke_other, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x260b31)
    PowerDNS#15 std::__invoke_result<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>::type std::__invoke<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x260b31)
    PowerDNS#16 void std:thread:_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x260b31)
    PowerDNS#17 std:thread:_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x260b31)
    PowerDNS#18 std:thread:_State_impl<std:thread:_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x260b31)
    PowerDNS#19 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

  Previous read of size 2 at 0x7b3400010350 by thread T39:
    #0 SvcParam::getKey() const /work/pdns/pdns/./svc-records.hh:80:12 (pdns_server+0x3721f3) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #1 GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>::xfrSvcParamKeyVals(std::set<SvcParam, std::less<SvcParam>, std::allocator<SvcParam>> const&) /work/pdns/pdns/dnswriter.cc:404:23 (pdns_server+0x3721f3)
    #2 void HTTPSRecordContent::xfrPacket<GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>>(GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>&, bool) /work/pdns/pdns/dnsrecords.cc:348:1 (pdns_server+0x3349bd) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #3 HTTPSRecordContent::toPacket(GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>&) /work/pdns/pdns/dnsrecords.cc:348:1 (pdns_server+0x3349bd)
    #4 DNSRecordContent::serialize[abi:cxx11](DNSName const&, bool, bool) /work/pdns/pdns/./dnsparser.hh:215:11 (pdns_server+0x311140) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #5 DNSPacket::addRecord(DNSZoneRecord&&) /work/pdns/pdns/dnspacket.cc:177:68 (pdns_server+0x2fa894) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #6 PacketHandler::doAdditionalProcessing(DNSPacket&, std::unique_ptr<DNSPacket, std::default_delete<DNSPacket>>&) /work/pdns/pdns/packethandler.cc:542:8 (pdns_server+0x4eccf2) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #7 PacketHandler::doQuestion(DNSPacket&) /work/pdns/pdns/packethandler.cc:1794:5 (pdns_server+0x4f79b4) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #8 PacketHandler::question(DNSPacket&) /work/pdns/pdns/packethandler.cc:1175:10 (pdns_server+0x4f649a) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #9 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::distribute(int) /work/pdns/pdns/./distributor.hh:220:14 (pdns_server+0x260f70) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #10 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()::operator()() const /work/pdns/pdns/./distributor.hh:179:25 (pdns_server+0x260b31) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    PowerDNS#11 void std::__invoke_impl<void, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(std::__invoke_other, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x260b31)
    PowerDNS#12 std::__invoke_result<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>::type std::__invoke<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x260b31)
    PowerDNS#13 void std:thread:_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x260b31)
    PowerDNS#14 std:thread:_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x260b31)
    PowerDNS#15 std:thread:_State_impl<std:thread:_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x260b31)
    PowerDNS#16 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

  Thread T33 'pdns/distributo' (tid=102833, running) created by thread T17 at:
    #0 pthread_create <null> (pdns_server+0x1904e6) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #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:35 (libstdc++.so.6+0xd73a9) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)
    #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:147:37 (libstdc++.so.6+0xd73a9)
    #3 Distributor<DNSPacket, DNSPacket, PacketHandler>::Create(int) /work/pdns/pdns/./distributor.hh:134:18 (pdns_server+0x256d23) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #4 qthread(unsigned int) /work/pdns/pdns/auth-main.cc:536:25 (pdns_server+0x256d23)
    #5 void std::__invoke_impl<void, void (*)(unsigned int), unsigned int>(std::__invoke_other, void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x2635f0) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #6 std::__invoke_result<void (*)(unsigned int), unsigned int>::type std::__invoke<void (*)(unsigned int), unsigned int>(void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x2635f0)
    #7 void std:thread:_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x2635f0)
    #8 std:thread:_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x2635f0)
    #9 std:thread:_State_impl<std:thread:_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x2635f0)
    #10 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

  Thread T39 'pdns/distributo' (tid=102837, running) created by thread T19 at:
    #0 pthread_create <null> (pdns_server+0x1904e6) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #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:35 (libstdc++.so.6+0xd73a9) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)
    #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:147:37 (libstdc++.so.6+0xd73a9)
    #3 Distributor<DNSPacket, DNSPacket, PacketHandler>::Create(int) /work/pdns/pdns/./distributor.hh:134:18 (pdns_server+0x256d23) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #4 qthread(unsigned int) /work/pdns/pdns/auth-main.cc:536:25 (pdns_server+0x256d23)
    #5 void std::__invoke_impl<void, void (*)(unsigned int), unsigned int>(std::__invoke_other, void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x2635f0) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #6 std::__invoke_result<void (*)(unsigned int), unsigned int>::type std::__invoke<void (*)(unsigned int), unsigned int>(void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x2635f0)
    #7 void std:thread:_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x2635f0)
    #8 std:thread:_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x2635f0)
    #9 std:thread:_State_impl<std:thread:_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x2635f0)
    #10 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

SUMMARY: ThreadSanitizer: data race (/work/pdns-rgacogne/pdns/pdns_server+0x211b7c) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593) in operator delete(void*)
```

To prevent this issue, this commit clones the content of SVCB/HTTPS
records before modifying the copy. the drawback is that we need to
do this operation every single time we process them.

14 months agoformat 12546/head
Peter van Dijk [Fri, 17 Mar 2023 13:51:45 +0000 (14:51 +0100)] 
format

14 months agocleanup
Peter van Dijk [Fri, 17 Mar 2023 13:51:21 +0000 (14:51 +0100)] 
cleanup

14 months agostring_view
Peter van Dijk [Fri, 17 Mar 2023 13:46:38 +0000 (14:46 +0100)] 
string_view

14 months agoApply suggestions from code review
Peter van Dijk [Fri, 17 Mar 2023 13:33:26 +0000 (14:33 +0100)] 
Apply suggestions from code review

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoUpdate ext/lmdb-safe/lmdb-safe.cc
Peter van Dijk [Fri, 17 Mar 2023 13:29:03 +0000 (14:29 +0100)] 
Update ext/lmdb-safe/lmdb-safe.cc

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoUpdate ext/lmdb-safe/lmdb-safe.cc
Peter van Dijk [Fri, 17 Mar 2023 13:28:46 +0000 (14:28 +0100)] 
Update ext/lmdb-safe/lmdb-safe.cc

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoUpdate ext/lmdb-safe/lmdb-safe.cc
Peter van Dijk [Fri, 17 Mar 2023 13:28:26 +0000 (14:28 +0100)] 
Update ext/lmdb-safe/lmdb-safe.cc

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoMerge pull request #12660 from omoerbeek/rec-regr-threads-pc
Otto Moerbeek [Fri, 17 Mar 2023 12:31:00 +0000 (13:31 +0100)] 
Merge pull request #12660 from omoerbeek/rec-regr-threads-pc

rec: Start using multiple threads in regression tests and enable packetcache

14 months agocleanup
Peter van Dijk [Fri, 17 Mar 2023 12:23:50 +0000 (13:23 +0100)] 
cleanup

14 months agoavoid char signedness trap
Peter van Dijk [Fri, 17 Mar 2023 12:23:46 +0000 (13:23 +0100)] 
avoid char signedness trap

14 months agoformat
Peter van Dijk [Fri, 17 Mar 2023 11:18:10 +0000 (12:18 +0100)] 
format

14 months agouse &
Peter van Dijk [Fri, 17 Mar 2023 10:59:27 +0000 (11:59 +0100)] 
use &

14 months agoavoid one unaligned uint16_t access
Peter van Dijk [Fri, 17 Mar 2023 10:57:26 +0000 (11:57 +0100)] 
avoid one unaligned uint16_t access

14 months agoremove unused (and unsafe) methods
Peter van Dijk [Fri, 17 Mar 2023 10:55:59 +0000 (11:55 +0100)] 
remove unused (and unsafe) methods

14 months agopush declarations down
Peter van Dijk [Fri, 17 Mar 2023 10:55:44 +0000 (11:55 +0100)] 
push declarations down

14 months agoPrevent data race by initing NOD protobuf tag values not in the NOD threads but in... 12660/head
Otto Moerbeek [Fri, 17 Mar 2023 10:35:55 +0000 (11:35 +0100)] 
Prevent data race by initing NOD protobuf tag values not in the NOD threads but in the main thread

14 months agocleanup
Peter van Dijk [Fri, 17 Mar 2023 10:33:56 +0000 (11:33 +0100)] 
cleanup

14 months agoenforce val size
Peter van Dijk [Fri, 17 Mar 2023 10:33:28 +0000 (11:33 +0100)] 
enforce val size

14 months agobe explicit about sizeof(T)
Peter van Dijk [Fri, 17 Mar 2023 10:23:43 +0000 (11:23 +0100)] 
be explicit about sizeof(T)

14 months agoremove redundant include
Peter van Dijk [Fri, 17 Mar 2023 10:16:27 +0000 (11:16 +0100)] 
remove redundant include

14 months agoUpdate ext/lmdb-safe/lmdb-safe.hh
Peter van Dijk [Fri, 17 Mar 2023 10:21:46 +0000 (11:21 +0100)] 
Update ext/lmdb-safe/lmdb-safe.hh

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoUpdate ext/lmdb-safe/lmdb-typed.hh
Peter van Dijk [Fri, 17 Mar 2023 10:13:49 +0000 (11:13 +0100)] 
Update ext/lmdb-safe/lmdb-typed.hh

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoUpdate ext/lmdb-safe/lmdb-typed.hh
Peter van Dijk [Fri, 17 Mar 2023 10:13:37 +0000 (11:13 +0100)] 
Update ext/lmdb-safe/lmdb-typed.hh

Co-authored-by: Remi Gacogne <github@coredump.fr>
14 months agoUpdate ext/lmdb-safe/lmdb-safe.hh
Peter van Dijk [Fri, 17 Mar 2023 10:13:12 +0000 (11:13 +0100)] 
Update ext/lmdb-safe/lmdb-safe.hh

Co-authored-by: Otto Moerbeek <otto.moerbeek@open-xchange.com>
14 months agoUpdate ext/lmdb-safe/lmdb-safe.cc
Peter van Dijk [Fri, 17 Mar 2023 10:11:49 +0000 (11:11 +0100)] 
Update ext/lmdb-safe/lmdb-safe.cc

Co-authored-by: Otto Moerbeek <otto.moerbeek@open-xchange.com>
14 months agorec: Start using multiple threads in regression tests and enable packetcache
Otto Moerbeek [Fri, 17 Mar 2023 09:57:35 +0000 (10:57 +0100)] 
rec: Start using multiple threads in regression tests and enable packetcache

Only two tests needed fixes.

14 months agoformat
Peter van Dijk [Fri, 17 Mar 2023 09:15:02 +0000 (10:15 +0100)] 
format

14 months agoreinstate lmdb-schema-version setting
Peter van Dijk [Fri, 17 Mar 2023 09:12:47 +0000 (10:12 +0100)] 
reinstate lmdb-schema-version setting

14 months agoremove pdnsutil lmdb-get-schema-version, it breaks building with dynmodule lmdb
Peter van Dijk [Fri, 17 Mar 2023 09:09:19 +0000 (10:09 +0100)] 
remove pdnsutil lmdb-get-schema-version, it breaks building with dynmodule lmdb

14 months agonote number of DBIs required
Peter van Dijk [Fri, 17 Mar 2023 08:53:06 +0000 (09:53 +0100)] 
note number of DBIs required

14 months agoMerge pull request #12659 from rgacogne/auth-svcb-race
Peter van Dijk [Fri, 17 Mar 2023 08:39:41 +0000 (09:39 +0100)] 
Merge pull request #12659 from rgacogne/auth-svcb-race

auth: Prevent a race during the processing of SVC auto-hints

14 months agospelling
Peter van Dijk [Fri, 17 Mar 2023 08:36:53 +0000 (09:36 +0100)] 
spelling

14 months agoopen databases readonly in version check
Peter van Dijk [Fri, 17 Mar 2023 08:29:19 +0000 (09:29 +0100)] 
open databases readonly in version check

14 months agodocs
Peter van Dijk [Thu, 16 Mar 2023 20:59:34 +0000 (21:59 +0100)] 
docs

14 months agoauth lmdb: implement schema v5, plus a bunch of cleanup
Peter van Dijk [Fri, 10 Feb 2023 11:33:40 +0000 (12:33 +0100)] 
auth lmdb: implement schema v5, plus a bunch of cleanup

14 months agoauth: Prevent a race during the processing of SVC auto-hints 12659/head
Remi Gacogne [Thu, 16 Mar 2023 12:43:00 +0000 (13:43 +0100)] 
auth: Prevent a race during the processing of SVC auto-hints

When `svc-autohints` is enabled, the content of SVCB and HTTPS records
is modified in `PacketHandler::doAdditionalProcessing()` to expand
the IPv4 and IPv6 with their actual values.
This causes an issue because the content of these records might be
shared between threads, via the record cache, and one thread could
be trying to read from the internal `std::set` while a second thread
is altering it, leading to a data race and possibly to memory corruption
and a crash.
This is correctly detected by TSAN:
```
WARNING: ThreadSanitizer: data race (pid=102795)
  Write of size 8 at 0x7b3400010350 by thread T33:
    #0 operator delete(void*) <null> (pdns_server+0x211b7c) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #1 std::__new_allocator<std::_Rb_tree_node<SvcParam>>::deallocate(std::_Rb_tree_node<SvcParam>*, unsigned long) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/new_allocator.h:158:2 (pdns_server+0x33fc78) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #2 std::allocator_traits<std::allocator<std::_Rb_tree_node<SvcParam>>>::deallocate(std::allocator<std::_Rb_tree_node<SvcParam>>&, std::_Rb_tree_node<SvcParam>*, unsigned long) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/alloc_traits.h:496:13 (pdns_server+0x33fc78)
    #3 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::_M_put_node(std::_Rb_tree_node<SvcParam>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:565:9 (pdns_server+0x33fc78)
    #4 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::_M_drop_node(std::_Rb_tree_node<SvcParam>*) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:632:2 (pdns_server+0x33fc78)
    #5 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::_M_erase_aux(std::_Rb_tree_const_iterator<SvcParam>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:2495:7 (pdns_server+0x33fc78)
    #6 std::_Rb_tree<SvcParam, SvcParam, std::_Identity<SvcParam>, std::less<SvcParam>, std::allocator<SvcParam>>::erase[abi:cxx11](std::_Rb_tree_const_iterator<SvcParam>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_tree.h:1197:2 (pdns_server+0x33fc78)
    #7 std::set<SvcParam, std::less<SvcParam>, std::allocator<SvcParam>>::erase[abi:cxx11](std::_Rb_tree_const_iterator<SvcParam>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/stl_set.h:655:21 (pdns_server+0x33fc78)
    #8 SVCBBaseRecordContent::setHints(SvcParam::SvcParamKey const&, std::vector<ComboAddress, std::allocator<ComboAddress>> const&) /work/pdns/pdns/dnsrecords.cc:768:14 (pdns_server+0x33fc78)
    #9 PacketHandler::doAdditionalProcessing(DNSPacket&, std::unique_ptr<DNSPacket, std::default_delete<DNSPacket>>&) /work/pdns/pdns/packethandler.cc:565:16 (pdns_server+0x4ed330) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #10 PacketHandler::doQuestion(DNSPacket&) /work/pdns/pdns/packethandler.cc:1794:5 (pdns_server+0x4f79b4) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #11 PacketHandler::question(DNSPacket&) /work/pdns/pdns/packethandler.cc:1175:10 (pdns_server+0x4f649a) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #12 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::distribute(int) /work/pdns/pdns/./distributor.hh:220:14 (pdns_server+0x260f70) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #13 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()::operator()() const /work/pdns/pdns/./distributor.hh:179:25 (pdns_server+0x260b31) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #14 void std::__invoke_impl<void, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(std::__invoke_other, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x260b31)
    #15 std::__invoke_result<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>::type std::__invoke<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x260b31)
    #16 void std::thread::_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x260b31)
    #17 std::thread::_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x260b31)
    #18 std::thread::_State_impl<std::thread::_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x260b31)
    #19 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

  Previous read of size 2 at 0x7b3400010350 by thread T39:
    #0 SvcParam::getKey() const /work/pdns/pdns/./svc-records.hh:80:12 (pdns_server+0x3721f3) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #1 GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>::xfrSvcParamKeyVals(std::set<SvcParam, std::less<SvcParam>, std::allocator<SvcParam>> const&) /work/pdns/pdns/dnswriter.cc:404:23 (pdns_server+0x3721f3)
    #2 void HTTPSRecordContent::xfrPacket<GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>>(GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>&, bool) /work/pdns/pdns/dnsrecords.cc:348:1 (pdns_server+0x3349bd) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #3 HTTPSRecordContent::toPacket(GenericDNSPacketWriter<std::vector<unsigned char, std::allocator<unsigned char>>>&) /work/pdns/pdns/dnsrecords.cc:348:1 (pdns_server+0x3349bd)
    #4 DNSRecordContent::serialize[abi:cxx11](DNSName const&, bool, bool) /work/pdns/pdns/./dnsparser.hh:215:11 (pdns_server+0x311140) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #5 DNSPacket::addRecord(DNSZoneRecord&&) /work/pdns/pdns/dnspacket.cc:177:68 (pdns_server+0x2fa894) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #6 PacketHandler::doAdditionalProcessing(DNSPacket&, std::unique_ptr<DNSPacket, std::default_delete<DNSPacket>>&) /work/pdns/pdns/packethandler.cc:542:8 (pdns_server+0x4eccf2) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #7 PacketHandler::doQuestion(DNSPacket&) /work/pdns/pdns/packethandler.cc:1794:5 (pdns_server+0x4f79b4) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #8 PacketHandler::question(DNSPacket&) /work/pdns/pdns/packethandler.cc:1175:10 (pdns_server+0x4f649a) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #9 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::distribute(int) /work/pdns/pdns/./distributor.hh:220:14 (pdns_server+0x260f70) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #10 MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()::operator()() const /work/pdns/pdns/./distributor.hh:179:25 (pdns_server+0x260b31) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #11 void std::__invoke_impl<void, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(std::__invoke_other, MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x260b31)
    #12 std::__invoke_result<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>::type std::__invoke<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>(MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x260b31)
    #13 void std::thread::_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x260b31)
    #14 std::thread::_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x260b31)
    #15 std::thread::_State_impl<std::thread::_Invoker<std::tuple<MultiThreadDistributor<DNSPacket, DNSPacket, PacketHandler>::MultiThreadDistributor(int)::'lambda'()>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x260b31)
    #16 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

  Thread T33 'pdns/distributo' (tid=102833, running) created by thread T17 at:
    #0 pthread_create <null> (pdns_server+0x1904e6) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #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:35 (libstdc++.so.6+0xd73a9) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)
    #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:147:37 (libstdc++.so.6+0xd73a9)
    #3 Distributor<DNSPacket, DNSPacket, PacketHandler>::Create(int) /work/pdns/pdns/./distributor.hh:134:18 (pdns_server+0x256d23) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #4 qthread(unsigned int) /work/pdns/pdns/auth-main.cc:536:25 (pdns_server+0x256d23)
    #5 void std::__invoke_impl<void, void (*)(unsigned int), unsigned int>(std::__invoke_other, void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x2635f0) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #6 std::__invoke_result<void (*)(unsigned int), unsigned int>::type std::__invoke<void (*)(unsigned int), unsigned int>(void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x2635f0)
    #7 void std::thread::_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x2635f0)
    #8 std::thread::_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x2635f0)
    #9 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x2635f0)
    #10 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

  Thread T39 'pdns/distributo' (tid=102837, running) created by thread T19 at:
    #0 pthread_create <null> (pdns_server+0x1904e6) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #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:35 (libstdc++.so.6+0xd73a9) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)
    #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:147:37 (libstdc++.so.6+0xd73a9)
    #3 Distributor<DNSPacket, DNSPacket, PacketHandler>::Create(int) /work/pdns/pdns/./distributor.hh:134:18 (pdns_server+0x256d23) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #4 qthread(unsigned int) /work/pdns/pdns/auth-main.cc:536:25 (pdns_server+0x256d23)
    #5 void std::__invoke_impl<void, void (*)(unsigned int), unsigned int>(std::__invoke_other, void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:61:14 (pdns_server+0x2635f0) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593)
    #6 std::__invoke_result<void (*)(unsigned int), unsigned int>::type std::__invoke<void (*)(unsigned int), unsigned int>(void (*&&)(unsigned int), unsigned int&&) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/invoke.h:96:14 (pdns_server+0x2635f0)
    #7 void std::thread::_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::_M_invoke<0ul, 1ul>(std::_Index_tuple<0ul, 1ul>) /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:258:13 (pdns_server+0x2635f0)
    #8 std::thread::_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>::operator()() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:265:11 (pdns_server+0x2635f0)
    #9 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(unsigned int), unsigned int>>>::_M_run() /usr/bin/../lib64/gcc/x86_64-pc-linux-gnu/12.2.1/../../../../include/c++/12.2.1/bits/std_thread.h:210:13 (pdns_server+0x2635f0)
    #10 execute_native_thread_routine /usr/src/debug/gcc/gcc/libstdc++-v3/src/c++11/thread.cc:82:18 (libstdc++.so.6+0xd72c2) (BuildId: 6fe66a2d539a78c993bd2d377e00fad389220963)

SUMMARY: ThreadSanitizer: data race (/work/pdns-rgacogne/pdns/pdns_server+0x211b7c) (BuildId: 384adc19a67695435bd5e89d0a77f562561f4593) in operator delete(void*)
```

To prevent this issue, this commit wraps the internal `std::set` in a
mutex. In theory this will cause a performance impact, but in practice
I did not find it to be noticeable.
If we ever do, a different solution would be to duplicate the content
of the SVCB/HTTPS records before modifying them.

14 months agodnsdist secpoll: explicitly include necessary ctime header for time_t 12654/head
Peter van Dijk [Thu, 16 Mar 2023 10:39:49 +0000 (11:39 +0100)] 
dnsdist secpoll: explicitly include necessary ctime header for time_t

14 months agoMerge pull request #12647 from rgacogne/ddist18rc3-secpoll
Remi Gacogne [Thu, 16 Mar 2023 09:42:35 +0000 (10:42 +0100)] 
Merge pull request #12647 from rgacogne/ddist18rc3-secpoll

dnsdist: Prepare ChangeLog and secpoll for 1.8.0-rc3

14 months agodnsdist: Update ChangeLog and upgrade guide for 1.8.0-rc3 12647/head
Remi Gacogne [Wed, 15 Mar 2023 12:21:29 +0000 (13:21 +0100)] 
dnsdist: Update ChangeLog and upgrade guide for 1.8.0-rc3

14 months agoMerge pull request #12648 from rgacogne/ddist-relevant-latency dnsdist-1.8.0-rc3
Remi Gacogne [Wed, 15 Mar 2023 12:13:48 +0000 (13:13 +0100)] 
Merge pull request #12648 from rgacogne/ddist-relevant-latency

dnsdist: Report the TCP latency for TCP-only Do53, DoT and DoH backends

14 months agodnsdist: Update the backend discovery tests 12648/head
Remi Gacogne [Wed, 15 Mar 2023 10:01:46 +0000 (11:01 +0100)] 
dnsdist: Update the backend discovery tests

The output of `showServers()` has been modified, and these tests
parse it to know whether a backend has been correctly upgraded.

14 months agodnsdist: report distinct udp and tcp latencies both in the console and the builtin...
Charles-Henri Bruyand [Tue, 14 Mar 2023 17:40:38 +0000 (18:40 +0100)] 
dnsdist: report distinct udp and tcp latencies both in the console and the builtin webserver

14 months agoMerge pull request #12639 from rgacogne/ddist-fix-race-ioerrors
Remi Gacogne [Wed, 15 Mar 2023 08:27:25 +0000 (09:27 +0100)] 
Merge pull request #12639 from rgacogne/ddist-fix-race-ioerrors

dnsdist: Fix a race when a cross-protocol query triggers an IO error

14 months agoMerge pull request #12626 from rgacogne/ddist-statnode-hits
Remi Gacogne [Wed, 15 Mar 2023 08:27:03 +0000 (09:27 +0100)] 
Merge pull request #12626 from rgacogne/ddist-statnode-hits

dnsdist: Count hits in the StatNode

14 months agoMerge pull request #12641 from rgacogne/ddist-src-not-harvested-loopback
Remi Gacogne [Tue, 14 Mar 2023 09:50:48 +0000 (10:50 +0100)] 
Merge pull request #12641 from rgacogne/ddist-src-not-harvested-loopback

dnsdist: Use the correct source address when harvesting failed

14 months agoMerge pull request #12638 from rgacogne/ddist-web-latency-proto
Remi Gacogne [Tue, 14 Mar 2023 09:36:24 +0000 (10:36 +0100)] 
Merge pull request #12638 from rgacogne/ddist-web-latency-proto

dnsdist: Report per-incoming transport latencies in the web interface

14 months agodnsdist: Report the TCP latency for TCP-only Do53, DoT and DoH backends
Remi Gacogne [Tue, 14 Mar 2023 09:22:14 +0000 (10:22 +0100)] 
dnsdist: Report the TCP latency for TCP-only Do53, DoT and DoH backends

Since 1.8.0 we separately record the latency for queries forwarded
over UDP and TCP, to get a better picture of what is going on.
It means we have to be careful to pick the relevant one when looking
at the latency.

14 months agodnsdist: Prepare ChangeLog and secpoll for 1.8.0-rc3
Remi Gacogne [Tue, 14 Mar 2023 08:52:30 +0000 (09:52 +0100)] 
dnsdist: Prepare ChangeLog and secpoll for 1.8.0-rc3

14 months agodnsdist: Use the correct source address when harvesting failed 12641/head
Remi Gacogne [Sat, 11 Mar 2023 18:10:21 +0000 (19:10 +0100)] 
dnsdist: Use the correct source address when harvesting failed

15 months agodnsdist: Fix a race when a cross-protocol query triggers an IO error 12639/head
Remi Gacogne [Fri, 10 Mar 2023 15:07:07 +0000 (16:07 +0100)] 
dnsdist: Fix a race when a cross-protocol query triggers an IO error

The IO error was not always handled by the proper TCP thread, possibly
leading to a race condition where two TCP worker threads were touching
the same TCP connection object at the same time.
Technically the issue also exists for XFR responses, but these are
very unlikely to cross protocols. We are still applying the same fix.

The issue was introduced in 516a00075fa9da56992fbea0149d274cd4a6813c.

This was reported by Thread Sanitizer:
```
2023-03-10T13:52:59.5959261Z WARNING: ThreadSanitizer: data race (pid=15423)
2023-03-10T13:52:59.5959559Z   Read of size 1 at 0x7b040000385c by thread T2 (mutexes: write M188):
2023-03-10T13:52:59.5960220Z     #0 IOStateHandler::isWaitingForRead() const /home/runner/work/pdns/pdns/pdns/dnsdistdist/./tcpiohandler-mplexer.hh:41:12 (dnsdist+0x2e2978)
2023-03-10T13:52:59.5961073Z     #1 IOStateHandler::update(IOState, std::function<void (int, boost::any&)>, boost::any, boost::optional<timeval>) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./tcpiohandler-mplexer.hh:109:9 (dnsdist+0x2e2978)
2023-03-10T13:52:59.5961812Z     #2 IOStateHandler::reset() /home/runner/work/pdns/pdns/pdns/dnsdistdist/./tcpiohandler-mplexer.hh:59:5 (dnsdist+0x2ea4c6)
2023-03-10T13:52:59.5962451Z     #3 IOStateHandler::reset() /home/runner/work/pdns/pdns/pdns/dnsdistdist/./tcpiohandler-mplexer.hh:59:5 (dnsdist+0x2ea4c6)
2023-03-10T13:52:59.5963106Z     #4 IOStateHandler::~IOStateHandler() /home/runner/work/pdns/pdns/pdns/dnsdistdist/./tcpiohandler-mplexer.hh:31:7 (dnsdist+0x2ea2a4)
2023-03-10T13:52:59.5980185Z     #5 std::default_delete<IOStateHandler>::operator()(IOStateHandler*) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/unique_ptr.h:85:2 (dnsdist+0x2ea2a4)
2023-03-10T13:52:59.5981308Z     #6 std::__uniq_ptr_impl<IOStateHandler, std::default_delete<IOStateHandler> >::reset(IOStateHandler*) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/unique_ptr.h:182:4 (dnsdist+0x2ea0c3)
2023-03-10T13:52:59.5982163Z     #7 std::__uniq_ptr_impl<IOStateHandler, std::default_delete<IOStateHandler> >::reset(IOStateHandler*) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/unique_ptr.h:182:4 (dnsdist+0x2ea0c3)
2023-03-10T13:52:59.5983209Z     #8 std::unique_ptr<IOStateHandler, std::default_delete<IOStateHandler> >::reset(IOStateHandler*) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/unique_ptr.h:456:7 (dnsdist+0xb1eb8a)
2023-03-10T13:52:59.5984893Z     #9 IncomingTCPConnectionState::terminateClientConnection() /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:384:13 (dnsdist+0xb1eb8a)
2023-03-10T13:52:59.5985685Z     #10 IncomingTCPConnectionState::notifyIOError(InternalQueryState&&, timeval const&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1111:12 (dnsdist+0xb29b13)
2023-03-10T13:52:59.5989279Z     #11 IncomingTCPConnectionState::notifyIOError(InternalQueryState&&, timeval const&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1111:12 (dnsdist+0xb29b13)
2023-03-10T13:52:59.5990754Z     #12 dnsdist_ffi_drop_from_async /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-ffi.cc:931:11 (dnsdist+0x816ac7)
2023-03-10T13:52:59.5991305Z     #13 <null> <null> (0x7f3d3ad7fca3)
2023-03-10T13:52:59.5992209Z     #14 void LuaContext::call<void, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(lua_State*, LuaContext::PushedObject, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1413:29 (dnsdist+0x5b31b5)
2023-03-10T13:52:59.5993583Z     #15 LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1983:16 (dnsdist+0x5b31b5)
2023-03-10T13:52:59.5998774Z     #16 void std::__invoke_impl<void, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__invoke_other, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x5b2b24)
2023-03-10T13:52:59.6002652Z     #17 std::enable_if<is_invocable_r_v<void, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, void>::type std::__invoke_r<void, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:110:2 (dnsdist+0x5b2b24)
2023-03-10T13:52:59.6006264Z     #18 std::_Function_handler<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> >::_M_invoke(std::_Any_data const&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:291:9 (dnsdist+0x5b2b24)
2023-03-10T13:52:59.6011711Z     #19 void std::__invoke_impl<void, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__invoke_other, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x5b2b24)
2023-03-10T13:52:59.6015474Z     #20 std::enable_if<is_invocable_r_v<void, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, void>::type std::__invoke_r<void, LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:110:2 (dnsdist+0x5b2b24)
2023-03-10T13:52:59.6021250Z     #21 std::_Function_handler<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), LuaContext::LuaFunctionCaller<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> >::_M_invoke(std::_Any_data const&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:291:9 (dnsdist+0x5b2b24)
2023-03-10T13:52:59.6023199Z     #22 std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0x5b4099)
2023-03-10T13:52:59.6024946Z     #23 std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0x5b4099)
2023-03-10T13:52:59.6031647Z     #24 std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0x5b4099)
2023-03-10T13:52:59.6034121Z     #25 setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-bindings-network.cc:73:9 (dnsdist+0x5b3f99)
2023-03-10T13:52:59.6041186Z     #26 void std::__invoke_impl<void, setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(std::__invoke_other, setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x5b3df8)
2023-03-10T13:52:59.6053139Z     #27 std::enable_if<is_invocable_r_v<void, setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>, void>::type std::__invoke_r<void, setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)&, unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:110:2 (dnsdist+0x5b3df8)
2023-03-10T13:52:59.6061003Z     #28 std::_Function_handler<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), setupLuaBindingsNetwork(LuaContext&, bool)::$_4::operator()(std::shared_ptr<dnsdist::NetworkListener>&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned short, std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>) const::'lambda'(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::_M_invoke(std::_Any_data const&, unsigned short&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:291:9 (dnsdist+0x5b3df8)
2023-03-10T13:52:59.6068262Z     #29 std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0x8cad59)
2023-03-10T13:52:59.6070197Z     #30 std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0x8cad59)
2023-03-10T13:52:59.6071860Z     #31 std::function<void (unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>::operator()(unsigned short, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0x8cad59)
2023-03-10T13:52:59.6072883Z     #32 dnsdist::NetworkListener::readCB(int, boost::any&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-network.cc:64:7 (dnsdist+0x8ca9e6)
2023-03-10T13:52:59.6076346Z     #33 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x2efbf3)
2023-03-10T13:52:59.6077403Z     #34 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/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:110:2 (dnsdist+0x2efb12)
2023-03-10T13:52:59.6078361Z     #35 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:291:9 (dnsdist+0x2ef949)
2023-03-10T13:52:59.6079161Z     #36 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0xc14f6c)
2023-03-10T13:52:59.6079696Z     #37 EpollFDMultiplexer::run(timeval*, int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/epollmplexer.cc:190:9 (dnsdist+0xc4fc84)
2023-03-10T13:52:59.6080417Z     #38 dnsdist::NetworkListener::runOnce(timeval&, unsigned int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-network.cc:130:14 (dnsdist+0x8cba17)
2023-03-10T13:52:59.6081121Z     #39 dnsdist::NetworkListener::mainThread() /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-network.cc:139:5 (dnsdist+0x8cba17)
2023-03-10T13:52:59.6081918Z     #40 dnsdist::NetworkListener::start()::$_0::operator()() const /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-network.cc:146:5 (dnsdist+0x8cdffd)
2023-03-10T13:52:59.6089376Z     #41 dnsdist::NetworkListener::start()::$_0::operator()() const /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-network.cc:146:5 (dnsdist+0x8cdffd)
2023-03-10T13:52:59.6090276Z     #42 void std::__invoke_impl<void, dnsdist::NetworkListener::start()::$_0>(std::__invoke_other, dnsdist::NetworkListener::start()::$_0&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x8cdfc5)
2023-03-10T13:52:59.6091963Z     #43 std::__invoke_result<dnsdist::NetworkListener::start()::$_0>::type std::__invoke<dnsdist::NetworkListener::start()::$_0>(dnsdist::NetworkListener::start()::$_0&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:95:14 (dnsdist+0x8cdf95)
2023-03-10T13:52:59.6093040Z     #44 void std::thread::_Invoker<std::tuple<dnsdist::NetworkListener::start()::$_0> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:264:13 (dnsdist+0x8cdf6c)
2023-03-10T13:52:59.6096527Z     #45 std::thread::_Invoker<std::tuple<dnsdist::NetworkListener::start()::$_0> >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:271:11 (dnsdist+0x8cdef5)
2023-03-10T13:52:59.6097439Z     #46 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dnsdist::NetworkListener::start()::$_0> > >::_M_run() (.llvm.6599844077253043448) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:215:13 (dnsdist+0x8cde39)
2023-03-10T13:52:59.6097887Z     #47 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6098058Z
2023-03-10T13:52:59.6098203Z   Previous write of size 1 at 0x7b040000385c by thread T8:
2023-03-10T13:52:59.6098928Z     #0 IOStateHandler::update(IOState, std::function<void (int, boost::any&)>, boost::any, boost::optional<timeval>) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./tcpiohandler-mplexer.hh:112:26 (dnsdist+0x2e29b1)
2023-03-10T13:52:59.6099813Z     #1 IncomingTCPConnectionState::handleIO(std::shared_ptr<IncomingTCPConnectionState>&, timeval const&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1075:25 (dnsdist+0xb23c18)
2023-03-10T13:52:59.6100613Z     #2 IncomingTCPConnectionState::handleIOCallback(int, boost::any&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:827:3 (dnsdist+0xb246dd)
2023-03-10T13:52:59.6101492Z     #3 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x2efbf3)
2023-03-10T13:52:59.6102502Z     #4 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/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:110:2 (dnsdist+0x2efb12)
2023-03-10T13:52:59.6103665Z     #5 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:291:9 (dnsdist+0x2ef949)
2023-03-10T13:52:59.6104464Z     #6 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0xc14f6c)
2023-03-10T13:52:59.6105005Z     #7 EpollFDMultiplexer::run(timeval*, int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/epollmplexer.cc:190:9 (dnsdist+0xc4fc84)
2023-03-10T13:52:59.6105772Z     #8 tcpClientThread(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1318:21 (dnsdist+0xb1c132)
2023-03-10T13:52:59.6107243Z     #9 void std::__invoke_impl<void, void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > >(std::__invoke_other, void (*&&)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int&&, int&&, int&&, int&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0xb3d4d7)
2023-03-10T13:52:59.6109241Z     #10 std::__invoke_result<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > >::type std::__invoke<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > >(void (*&&)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int&&, int&&, int&&, int&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:95:14 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6110879Z     #11 void std::thread::_Invoker<std::tuple<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > > >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:264:13 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6112054Z     #12 std::thread::_Invoker<std::tuple<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > > >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:271:11 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6113226Z     #13 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > > > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:215:13 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6113778Z     #14 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6114055Z     #15 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6114324Z     #16 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6114574Z     #17 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6114728Z
2023-03-10T13:52:59.6114889Z   Location is heap block of size 16 at 0x7b0400003850 allocated by thread T8:
2023-03-10T13:52:59.6115222Z     #0 operator new(unsigned long) <null> (dnsdist+0x184e96)
2023-03-10T13:52:59.6115982Z     #1 std::_MakeUniq<IOStateHandler>::__single_object std::make_unique<IOStateHandler, FDMultiplexer&, int&>(FDMultiplexer&, int&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/unique_ptr.h:962:30 (dnsdist+0xb343bf)
2023-03-10T13:52:59.6116940Z     #2 IncomingTCPConnectionState::IncomingTCPConnectionState(ConnectionInfo&&, TCPClientThreadData&, timeval const&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./dnsdist-tcp-upstream.hh:24:338 (dnsdist+0xb343bf)
2023-03-10T13:52:59.6118177Z     #3 void __gnu_cxx::new_allocator<IncomingTCPConnectionState>::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/ext/new_allocator.h:150:23 (dnsdist+0xb33938)
2023-03-10T13:52:59.6119719Z     #4 void std::allocator_traits<std::allocator<IncomingTCPConnectionState> >::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<IncomingTCPConnectionState>&, IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/alloc_traits.h:512:8 (dnsdist+0xb33938)
2023-03-10T13:52:59.6121161Z     #5 void __gnu_cxx::new_allocator<IncomingTCPConnectionState>::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/ext/new_allocator.h:150:23 (dnsdist+0xb33938)
2023-03-10T13:52:59.6122645Z     #6 void std::allocator_traits<std::allocator<IncomingTCPConnectionState> >::construct<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<IncomingTCPConnectionState>&, IncomingTCPConnectionState*, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/alloc_traits.h:512:8 (dnsdist+0xb33938)
2023-03-10T13:52:59.6124511Z     #7 std::_Sp_counted_ptr_inplace<IncomingTCPConnectionState, std::allocator<IncomingTCPConnectionState>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<IncomingTCPConnectionState>, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr_base.h:551:4 (dnsdist+0xb335b1)
2023-03-10T13:52:59.6126190Z     #8 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<IncomingTCPConnectionState, std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*&, std::_Sp_alloc_shared_tag<std::allocator<IncomingTCPConnectionState> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr_base.h:683:6 (dnsdist+0xb335b1)
2023-03-10T13:52:59.6127835Z     #9 std::_Sp_counted_ptr_inplace<IncomingTCPConnectionState, std::allocator<IncomingTCPConnectionState>, (__gnu_cxx::_Lock_policy)2>::_Sp_counted_ptr_inplace<ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<IncomingTCPConnectionState>, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr_base.h:551:4 (dnsdist+0xb335b1)
2023-03-10T13:52:59.6129495Z     #10 std::__shared_count<(__gnu_cxx::_Lock_policy)2>::__shared_count<IncomingTCPConnectionState, std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(IncomingTCPConnectionState*&, std::_Sp_alloc_shared_tag<std::allocator<IncomingTCPConnectionState> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr_base.h:683:6 (dnsdist+0xb335b1)
2023-03-10T13:52:59.6131136Z     #11 std::__shared_ptr<IncomingTCPConnectionState, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<IncomingTCPConnectionState> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr_base.h:1371:14 (dnsdist+0xb33357)
2023-03-10T13:52:59.6132660Z     #12 std::shared_ptr<IncomingTCPConnectionState>::shared_ptr<std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<IncomingTCPConnectionState> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:408:4 (dnsdist+0xb33357)
2023-03-10T13:52:59.6134205Z     #13 std::shared_ptr<IncomingTCPConnectionState> std::allocate_shared<IncomingTCPConnectionState, std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<IncomingTCPConnectionState> const&, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:859:14 (dnsdist+0xb33357)
2023-03-10T13:52:59.6135927Z     #14 std::__shared_ptr<IncomingTCPConnectionState, (__gnu_cxx::_Lock_policy)2>::__shared_ptr<std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<IncomingTCPConnectionState> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr_base.h:1371:14 (dnsdist+0xb33357)
2023-03-10T13:52:59.6137427Z     #15 std::shared_ptr<IncomingTCPConnectionState>::shared_ptr<std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::_Sp_alloc_shared_tag<std::allocator<IncomingTCPConnectionState> >, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:408:4 (dnsdist+0xb33357)
2023-03-10T13:52:59.6139010Z     #16 std::shared_ptr<IncomingTCPConnectionState> std::allocate_shared<IncomingTCPConnectionState, std::allocator<IncomingTCPConnectionState>, ConnectionInfo, TCPClientThreadData&, timeval&>(std::allocator<IncomingTCPConnectionState> const&, ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:859:14 (dnsdist+0xb33357)
2023-03-10T13:52:59.6140360Z     #17 std::shared_ptr<IncomingTCPConnectionState> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:875:14 (dnsdist+0xb3323c)
2023-03-10T13:52:59.6141560Z     #18 std::shared_ptr<IncomingTCPConnectionState> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:875:14 (dnsdist+0xb3323c)
2023-03-10T13:52:59.6142764Z     #19 std::shared_ptr<IncomingTCPConnectionState> std::make_shared<IncomingTCPConnectionState, ConnectionInfo, TCPClientThreadData&, timeval&>(ConnectionInfo&&, TCPClientThreadData&, timeval&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/shared_ptr.h:875:14 (dnsdist+0xb3323c)
2023-03-10T13:52:59.6143631Z     #20 handleIncomingTCPQuery(int, boost::any&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1164:18 (dnsdist+0xb30c93)
2023-03-10T13:52:59.6144480Z     #21 void std::__invoke_impl<void, void (*&)(int, boost::any&), int, boost::any&>(std::__invoke_other, void (*&)(int, boost::any&), int&&, boost::any&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0x2efbf3)
2023-03-10T13:52:59.6145171Z     #22 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/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:110:2 (dnsdist+0x2efb12)
2023-03-10T13:52:59.6145727Z     #23 std::_Function_handler<void (int, boost::any&), void (*)(int, boost::any&)>::_M_invoke(std::_Any_data const&, int&&, boost::any&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:291:9 (dnsdist+0x2ef949)
2023-03-10T13:52:59.6146188Z     #24 std::function<void (int, boost::any&)>::operator()(int, boost::any&) const /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_function.h:622:14 (dnsdist+0xc14f6c)
2023-03-10T13:52:59.6146441Z     #25 EpollFDMultiplexer::run(timeval*, int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/epollmplexer.cc:190:9 (dnsdist+0xc4fc84)
2023-03-10T13:52:59.6146930Z     #26 tcpClientThread(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:1318:21 (dnsdist+0xb1c132)
2023-03-10T13:52:59.6148031Z     #27 void std::__invoke_impl<void, void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > >(std::__invoke_other, void (*&&)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int&&, int&&, int&&, int&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:60:14 (dnsdist+0xb3d4d7)
2023-03-10T13:52:59.6149371Z     #28 std::__invoke_result<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > >::type std::__invoke<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > >(void (*&&)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int&&, int&&, int&&, int&&, std::vector<ClientState*, std::allocator<ClientState*> >&&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/invoke.h:95:14 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6150265Z     #29 void std::thread::_Invoker<std::tuple<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > > >::_M_invoke<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>(std::_Index_tuple<0ul, 1ul, 2ul, 3ul, 4ul, 5ul>) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:264:13 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6150973Z     #30 std::thread::_Invoker<std::tuple<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > > >::operator()() /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:271:11 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6151745Z     #31 std::thread::_State_impl<std::thread::_Invoker<std::tuple<void (*)(int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> >), int, int, int, int, std::vector<ClientState*, std::allocator<ClientState*> > > > >::_M_run() /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/thread:215:13 (dnsdist+0xb3c6a2)
2023-03-10T13:52:59.6151858Z     #32 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6151978Z     #33 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6152094Z     #34 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6152209Z     #35 <null> <null> (libstdc++.so.6+0xda6b3)
2023-03-10T13:52:59.6152216Z
2023-03-10T13:52:59.6152326Z   Mutex M188 (0x55807ad82020) created at:
2023-03-10T13:52:59.6152457Z     #0 pthread_mutex_lock <null> (dnsdist+0x111876)
2023-03-10T13:52:59.6152906Z     #1 __gthread_mutex_lock(pthread_mutex_t*) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/x86_64-linux-gnu/c++/10/bits/gthr-default.h:749:12 (dnsdist+0x1af1df)
2023-03-10T13:52:59.6153271Z     #2 std::mutex::lock() /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_mutex.h:100:17 (dnsdist+0x1af1df)
2023-03-10T13:52:59.6153688Z     #3 std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_mutex.h:159:19 (dnsdist+0x2635f9)
2023-03-10T13:52:59.6153984Z     #4 LockGuardedHolder<LuaContext>::LockGuardedHolder(LuaContext&, std::mutex&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./lock.hh:209:60 (dnsdist+0x2635f9)
2023-03-10T13:52:59.6154404Z     #5 std::lock_guard<std::mutex>::lock_guard(std::mutex&) /usr/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/std_mutex.h:159:19 (dnsdist+0x2635f9)
2023-03-10T13:52:59.6154677Z     #6 LockGuardedHolder<LuaContext>::LockGuardedHolder(LuaContext&, std::mutex&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./lock.hh:209:60 (dnsdist+0x2635f9)
2023-03-10T13:52:59.6154906Z     #7 LockGuarded<LuaContext>::lock() /home/runner/work/pdns/pdns/pdns/dnsdistdist/./lock.hh:289:12 (dnsdist+0x25b372)
2023-03-10T13:52:59.6155196Z     #8 LockGuarded<LuaContext>::lock() /home/runner/work/pdns/pdns/pdns/dnsdistdist/./lock.hh:289:12 (dnsdist+0x25b372)
2023-03-10T13:52:59.6155387Z     #9 main /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist.cc:2667:34 (dnsdist+0xb93565)
2023-03-10T13:52:59.6155395Z
2023-03-10T13:52:59.6155663Z   Thread T2 'dnsdist/lua-net' (tid=15426, running) created by main thread at:
2023-03-10T13:52:59.6155789Z     #0 pthread_create <null> (dnsdist+0xf3acb)
2023-03-10T13:52:59.6156049Z     #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xda989)
2023-03-10T13:52:59.6156439Z     #2 dnsdist::NetworkListener::start() /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-network.cc:145:22 (dnsdist+0x8cbae1)
2023-03-10T13:52:59.6157087Z     #3 setupLuaBindingsNetwork(LuaContext&, bool)::$_6::operator()(std::shared_ptr<dnsdist::NetworkListener>&) const /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua-bindings-network.cc:100:15 (dnsdist+0x5bbf4f)
2023-03-10T13:52:59.6157529Z     #4 decltype(*(this).function(*(this).param)) LuaContext::Binder<setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, std::shared_ptr<dnsdist::NetworkListener>&>::operator()<>() /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1853:20 (dnsdist+0x5bbebb)
2023-03-10T13:52:59.6158131Z     #5 void LuaContext::readIntoFunction<void, LuaContext::Binder<setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, std::shared_ptr<dnsdist::NetworkListener>&>&>(lua_State*, LuaContext::tag<void>, LuaContext::Binder<setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, std::shared_ptr<dnsdist::NetworkListener>&>&, int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1772:16 (dnsdist+0x5bbebb)
2023-03-10T13:52:59.6158816Z     #6 std::enable_if<!(IsOptional<std::shared_ptr<dnsdist::NetworkListener>&>::value), void>::type LuaContext::readIntoFunction<void, setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, std::shared_ptr<dnsdist::NetworkListener>&>(lua_State*, LuaContext::tag<void>, setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, int, LuaContext::tag<std::shared_ptr<dnsdist::NetworkListener>&>) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1803:16 (dnsdist+0x5bbd55)
2023-03-10T13:52:59.6159489Z     #7 std::enable_if<!(IsOptional<std::shared_ptr<dnsdist::NetworkListener>&>::value), void>::type LuaContext::readIntoFunction<void, setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, std::shared_ptr<dnsdist::NetworkListener>&>(lua_State*, LuaContext::tag<void>, setupLuaBindingsNetwork(LuaContext&, bool)::$_6&, int, LuaContext::tag<std::shared_ptr<dnsdist::NetworkListener>&>) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1803:16 (dnsdist+0x5bbd55)
2023-03-10T13:52:59.6160072Z     #8 std::enable_if<(std::integral_constant<bool, true>::value) && (!(std::is_void<bool>::value)), LuaContext::PushedObject>::type LuaContext::Pusher<void (std::shared_ptr<dnsdist::NetworkListener>&), void>::callback2<setupLuaBindingsNetwork(LuaContext&, bool)::$_6&>(lua_State*, bool&&, int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:2443:9 (dnsdist+0x5bbc62)
2023-03-10T13:52:59.6160587Z     #9 LuaContext::PushedObject LuaContext::Pusher<void (std::shared_ptr<dnsdist::NetworkListener>&), void>::callback<setupLuaBindingsNetwork(LuaContext&, bool)::$_6>(lua_State*, setupLuaBindingsNetwork(LuaContext&, bool)::$_6*, int) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:2405:20 (dnsdist+0x5bb999)
2023-03-10T13:52:59.6161776Z     #10 std::enable_if<boost::has_trivial_destructor<setupLuaBindingsNetwork(LuaContext&, bool)::$_6>::value, LuaContext::PushedObject>::type LuaContext::Pusher<void (std::shared_ptr<dnsdist::NetworkListener>&), void>::push<setupLuaBindingsNetwork(LuaContext&, bool)::$_6>(lua_State*, setupLuaBindingsNetwork(LuaContext&, bool)::$_6)::'lambda'(lua_State*)::operator()(lua_State*) const /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:2334:20 (dnsdist+0x5bb8c7)
2023-03-10T13:52:59.6162870Z     #11 std::enable_if<boost::has_trivial_destructor<setupLuaBindingsNetwork(LuaContext&, bool)::$_6>::value, LuaContext::PushedObject>::type LuaContext::Pusher<void (std::shared_ptr<dnsdist::NetworkListener>&), void>::push<setupLuaBindingsNetwork(LuaContext&, bool)::$_6>(lua_State*, setupLuaBindingsNetwork(LuaContext&, bool)::$_6)::'lambda'(lua_State*)::__invoke(lua_State*) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:2330:31 (dnsdist+0x5bb8c7)
2023-03-10T13:52:59.6163072Z     #12 <null> <null> (libluajit-5.1.so.2+0x8fb6)
2023-03-10T13:52:59.6163265Z     #13 <null> <null> (libluajit-5.1.so.2+0x8fb6)
2023-03-10T13:52:59.6163654Z     #14 std::tuple<> LuaContext::call<std::tuple<> >(lua_State*, LuaContext::PushedObject) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:1413:29 (dnsdist+0x81d979)
2023-03-10T13:52:59.6164106Z     #15 LuaContext::executeCode(std::istream&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/./ext/luawrapper/include/LuaContext.hpp:267:9 (dnsdist+0x999ddf)
2023-03-10T13:52:59.6164650Z     #16 setupLua(LuaContext&, bool, bool, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-lua.cc:3022:10 (dnsdist+0x98ecf3)
2023-03-10T13:52:59.6164844Z     #17 main /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist.cc:2667:17 (dnsdist+0xb935a4)
2023-03-10T13:52:59.6164852Z
2023-03-10T13:52:59.6165108Z   Thread T8 'dnsdist/tcpClie' (tid=15432, running) created by main thread at:
2023-03-10T13:52:59.6165219Z     #0 pthread_create <null> (dnsdist+0xf3acb)
2023-03-10T13:52:59.6165479Z     #1 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State> >, void (*)()) <null> (libstdc++.so.6+0xda989)
2023-03-10T13:52:59.6166034Z     #2 TCPClientCollection::TCPClientCollection(unsigned long, std::vector<ClientState*, std::allocator<ClientState*> >) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:126:5 (dnsdist+0xb1a91a)
2023-03-10T13:52:59.6166576Z     #3 TCPClientCollection::TCPClientCollection(unsigned long, std::vector<ClientState*, std::allocator<ClientState*> >) /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist-tcp.cc:126:5 (dnsdist+0xb1a91a)
2023-03-10T13:52:59.6167392Z     #4 std::_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/bin/../lib/gcc/x86_64-linux-gnu/10/../../../../include/c++/10/bits/unique_ptr.h:962:34 (dnsdist+0xb962aa)
2023-03-10T13:52:59.6167587Z     #5 main /home/runner/work/pdns/pdns/pdns/dnsdistdist/dnsdist.cc:2834:26 (dnsdist+0xb962aa)
2023-03-10T13:52:59.6167715Z     #6 __libc_start_main <null> (libc.so.6+0x24082)
2023-03-10T13:52:59.6167841Z     #7 __libc_start_main <null> (libc.so.6+0x24082)
```

15 months agodnsdist: Report per-incoming transport latencies in the web interface 12638/head
Remi Gacogne [Fri, 10 Mar 2023 13:09:39 +0000 (14:09 +0100)] 
dnsdist: Report per-incoming transport latencies in the web interface

Since 1.8.0 we have separate latencies based on the incoming transport,
but the internal web interface was only reporting the UDP one.
After this commit the interface will display the latency for UDP, TCP,
DoT and DoH queries.
Reported by Stephane Bortzmeyer (thanks!).

15 months agoMerge pull request #12635 from jsoref/github-actions-follow-major
Remi Gacogne [Thu, 9 Mar 2023 18:23:22 +0000 (19:23 +0100)] 
Merge pull request #12635 from jsoref/github-actions-follow-major

GitHub actions follow major

15 months agoUse actions/cache@v3 12635/head
Josh Soref [Thu, 9 Mar 2023 15:47:41 +0000 (10:47 -0500)] 
Use actions/cache@v3