Fixes and improvements
Fix use of accept-connections flag. Fix use of TSQueue (add top_and_pop_and_rsize fn). Reduce sleep time of threadedUpdate to 8 ms.
This commit is contained in:
parent
27528bfbc5
commit
aa7255c2e5
3 changed files with 18 additions and 8 deletions
|
@ -27,6 +27,7 @@ class TSQueue {
|
|||
std::optional<T> top();
|
||||
bool pop();
|
||||
std::optional<T> top_and_pop();
|
||||
std::optional<T> top_and_pop_and_rsize(unsigned int *rsize);
|
||||
void clear();
|
||||
/*
|
||||
* status ==
|
||||
|
@ -117,6 +118,20 @@ std::optional<T> TSQueue<T>::top_and_pop() {
|
|||
return value;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
std::optional<T> TSQueue<T>::top_and_pop_and_rsize(unsigned int *rsize) {
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
std::optional<T> value = std::nullopt;
|
||||
if(!rb.empty()) {
|
||||
value = rb.top();
|
||||
rb.pop();
|
||||
}
|
||||
if(rsize) {
|
||||
*rsize = rb.getSize();
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
void TSQueue<T>::clear() {
|
||||
std::lock_guard<std::mutex> lock(mutex);
|
||||
|
|
|
@ -237,7 +237,6 @@ public:
|
|||
/*
|
||||
* 0 - is threaded
|
||||
* 1 - is client
|
||||
* 2 - is accepting new connections
|
||||
*/
|
||||
std::bitset<32> flags;
|
||||
std::atomic_bool isAcceptNewConnections;
|
||||
|
|
|
@ -169,7 +169,6 @@ mutex()
|
|||
} else {
|
||||
flags.reset(0);
|
||||
}
|
||||
flags.set(2);
|
||||
|
||||
rng_engine.seed(std::chrono::system_clock::now().time_since_epoch().count());
|
||||
|
||||
|
@ -611,7 +610,7 @@ void UDPC::Context::update_impl() {
|
|||
|
||||
UDPC_ConnectionId identifier{receivedData.sin6_addr, receivedData.sin6_scope_id, ntohs(receivedData.sin6_port)};
|
||||
|
||||
if(isConnect && flags.test(2)) {
|
||||
if(isConnect && isAcceptNewConnections.load()) {
|
||||
// is connect packet and is accepting new connections
|
||||
if(!flags.test(1)
|
||||
&& conMap.find(identifier) == conMap.end()) {
|
||||
|
@ -936,7 +935,7 @@ void UDPC::threadedUpdate(Context *ctx) {
|
|||
ctx->update_impl();
|
||||
ctx->mutex.unlock();
|
||||
nextNow = std::chrono::steady_clock::now();
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(11) - (nextNow - now));
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(8) - (nextNow - now));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1279,10 +1278,7 @@ UDPC_PacketInfo UDPC_get_received(UDPC_HContext ctx, unsigned int *remaining) {
|
|||
return UDPC::get_empty_pinfo();
|
||||
}
|
||||
|
||||
auto opt_pinfo = c->receivedPkts.top_and_pop();
|
||||
if(remaining) {
|
||||
*remaining = c->receivedPkts.size();
|
||||
}
|
||||
auto opt_pinfo = c->receivedPkts.top_and_pop_and_rsize(remaining);
|
||||
if(opt_pinfo) {
|
||||
return *opt_pinfo;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue