fix(falco): prevent use-after-return in webserver

Signed-off-by: Luca Guerra <luca@guerra.sh>
This commit is contained in:
Luca Guerra
2024-12-17 17:07:29 +00:00
committed by poiana
parent 129087a08b
commit 1239566467
2 changed files with 6 additions and 6 deletions

View File

@@ -69,9 +69,8 @@ void falco_webserver::start(const falco::app::state &state,
throw falco_exception("invalid webserver configuration");
}
std::atomic<bool> failed;
failed.store(false, std::memory_order_release);
m_server_thread = std::thread([this, webserver_config, &failed] {
m_failed.store(false, std::memory_order_release);
m_server_thread = std::thread([this, webserver_config] {
try {
this->m_server->listen(webserver_config.m_listen_address,
webserver_config.m_listen_port);
@@ -79,16 +78,16 @@ void falco_webserver::start(const falco::app::state &state,
falco_logger::log(falco_logger::level::ERR,
"falco_webserver: " + std::string(e.what()) + "\n");
}
failed.store(true, std::memory_order_release);
this->m_failed.store(true, std::memory_order_release);
});
// wait for the server to actually start up
// note: is_running() is atomic
while(!m_server->is_running() && !failed.load(std::memory_order_acquire)) {
while(!m_server->is_running() && !m_failed.load(std::memory_order_acquire)) {
std::this_thread::yield();
}
m_running = true;
if(failed.load(std::memory_order_acquire)) {
if(m_failed.load(std::memory_order_acquire)) {
stop();
throw falco_exception("an error occurred while starting webserver");
}

View File

@@ -45,4 +45,5 @@ private:
bool m_running = false;
std::unique_ptr<httplib::Server> m_server = nullptr;
std::thread m_server_thread;
std::atomic<bool> m_failed;
};