Don't count_down past 0
CI / pre-commit (push) Successful in 59s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-arm64, ubuntu-latest-arm64) (push) Successful in 2m22s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-amd64, ubuntu-latest-amd64) (push) Successful in 2m57s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-arm64, ubuntu-latest-arm64) (push) Successful in 2m44s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-amd64, ubuntu-latest-amd64) (push) Successful in 3m10s
CI / pre-commit (push) Successful in 59s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-arm64, ubuntu-latest-arm64) (push) Successful in 2m22s
CI / build (-DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++, clang-amd64, ubuntu-latest-amd64) (push) Successful in 2m57s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-arm64, ubuntu-latest-arm64) (push) Successful in 2m44s
CI / build (-DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++, gcc-amd64, ubuntu-latest-amd64) (push) Successful in 3m10s
This commit is contained in:
+20
-6
@@ -3,22 +3,36 @@
|
||||
#include "connection_handler.hpp"
|
||||
#include "server.hpp"
|
||||
|
||||
#include <atomic>
|
||||
#include <doctest/doctest.h>
|
||||
#include <latch>
|
||||
#include <string_view>
|
||||
#include <thread>
|
||||
|
||||
struct Event {
|
||||
void wait() { done_.wait(); }
|
||||
void set() {
|
||||
if (!set_.exchange(true, std::memory_order_relaxed)) {
|
||||
done_.count_down();
|
||||
}
|
||||
}
|
||||
|
||||
private:
|
||||
std::latch done_{1};
|
||||
std::atomic<bool> set_;
|
||||
};
|
||||
|
||||
struct EchoHandler : ConnectionHandler {
|
||||
Arena arena;
|
||||
std::span<std::string_view> reply;
|
||||
WeakRef<MessageSender> wconn;
|
||||
std::latch done{1};
|
||||
Event done;
|
||||
void on_data_arrived(std::string_view data, Connection &conn) override {
|
||||
reply = arena.allocate_span<std::string_view>(1);
|
||||
reply[0] = arena.copy_string(data);
|
||||
wconn = conn.get_weak_ref();
|
||||
CHECK(wconn.lock());
|
||||
done.count_down();
|
||||
done.set();
|
||||
}
|
||||
};
|
||||
|
||||
@@ -60,8 +74,8 @@ struct ShutdownTestHandler : ConnectionHandler {
|
||||
Arena arena;
|
||||
std::span<std::string_view> reply;
|
||||
WeakRef<MessageSender> wconn;
|
||||
std::latch received_data{1};
|
||||
std::latch connection_closed_latch{1};
|
||||
Event received_data;
|
||||
Event connection_closed_latch;
|
||||
ConnectionShutdown shutdown_mode = ConnectionShutdown::None;
|
||||
std::atomic<bool> connection_closed{false};
|
||||
|
||||
@@ -69,12 +83,12 @@ struct ShutdownTestHandler : ConnectionHandler {
|
||||
reply = arena.allocate_span<std::string_view>(1);
|
||||
reply[0] = arena.copy_string(data);
|
||||
wconn = conn.get_weak_ref();
|
||||
received_data.count_down();
|
||||
received_data.set();
|
||||
}
|
||||
|
||||
void on_connection_closed(Connection &) override {
|
||||
connection_closed = true;
|
||||
connection_closed_latch.count_down();
|
||||
connection_closed_latch.set();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user