mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-20 15:19:07 +01:00
fuzz: make it possible to mock (fuzz) CThreadInterrupt
* Make the methods of `CThreadInterrupt` virtual and store a pointer to it in `CConnman`, thus making it possible to override with a mocked instance. * Initialize `CConnman::m_interrupt_net` from the constructor, making it possible for callers to supply mocked version. * Introduce `FuzzedThreadInterrupt` and `ConsumeThreadInterrupt()` and use them in `src/test/fuzz/connman.cpp` and `src/test/fuzz/i2p.cpp`. This improves the CPU utilization of the `connman` fuzz test. As a nice side effect, the `std::shared_ptr` used for `CConnman::m_interrupt_net` resolves the possible lifetime issues with it (see the removed comment for that variable).
This commit is contained in:
@@ -119,7 +119,7 @@ namespace sam {
|
||||
|
||||
Session::Session(const fs::path& private_key_file,
|
||||
const Proxy& control_host,
|
||||
CThreadInterrupt* interrupt)
|
||||
std::shared_ptr<CThreadInterrupt> interrupt)
|
||||
: m_private_key_file{private_key_file},
|
||||
m_control_host{control_host},
|
||||
m_interrupt{interrupt},
|
||||
@@ -127,7 +127,7 @@ Session::Session(const fs::path& private_key_file,
|
||||
{
|
||||
}
|
||||
|
||||
Session::Session(const Proxy& control_host, CThreadInterrupt* interrupt)
|
||||
Session::Session(const Proxy& control_host, std::shared_ptr<CThreadInterrupt> interrupt)
|
||||
: m_control_host{control_host},
|
||||
m_interrupt{interrupt},
|
||||
m_transient{true}
|
||||
@@ -162,7 +162,7 @@ bool Session::Accept(Connection& conn)
|
||||
std::string errmsg;
|
||||
bool disconnect{false};
|
||||
|
||||
while (!*m_interrupt) {
|
||||
while (!m_interrupt->interrupted()) {
|
||||
Sock::Event occurred;
|
||||
if (!conn.sock->Wait(MAX_WAIT_FOR_IO, Sock::RECV, &occurred)) {
|
||||
errmsg = "wait on socket failed";
|
||||
@@ -205,7 +205,7 @@ bool Session::Accept(Connection& conn)
|
||||
return true;
|
||||
}
|
||||
|
||||
if (*m_interrupt) {
|
||||
if (m_interrupt->interrupted()) {
|
||||
LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Accept was interrupted\n");
|
||||
} else {
|
||||
LogPrintLevel(BCLog::I2P, BCLog::Level::Debug, "Error accepting%s: %s\n", disconnect ? " (will close the session)" : "", errmsg);
|
||||
|
||||
Reference in New Issue
Block a user