From 98374dc7abdeb8ca7d4807fc0b92c17e28ce93e8 Mon Sep 17 00:00:00 2001 From: Nicolas Pope <nicolas.pope@utu.fi> Date: Tue, 10 May 2022 20:03:57 +0100 Subject: [PATCH] Try recv lock fix --- src/peer.cpp | 9 ++++++++- src/peer.hpp | 2 +- src/universe.cpp | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/peer.cpp b/src/peer.cpp index e0a1fbc..3b97d72 100644 --- a/src/peer.cpp +++ b/src/peer.cpp @@ -262,7 +262,10 @@ void Peer::data() { int rc = 0; - recv_buf_.reserve_buffer(kMaxMessage); + { + UNIQUE_LOCK(recv_mtx_,lk); + recv_buf_.reserve_buffer(kMaxMessage); + } if (recv_buf_.buffer_capacity() < (kMaxMessage / 10)) { net_->_notifyError(this, ftl::protocol::Error::kBufferSize, "Buffer is at capacity"); @@ -360,7 +363,11 @@ bool Peer::_data() { try { recv_checked_.test_and_set(); + + UNIQUE_LOCK(recv_mtx_,lk); bool has_next = _has_next() && recv_buf_.next(msg_handle); + lk.unlock(); + if (!has_next) { already_processing_.clear(); if (!recv_checked_.test_and_set() && !already_processing_.test_and_set()) { diff --git a/src/peer.hpp b/src/peer.hpp index db15668..45fba38 100644 --- a/src/peer.hpp +++ b/src/peer.hpp @@ -248,7 +248,7 @@ private: // Functions std::atomic_flag recv_checked_ = ATOMIC_FLAG_INIT; msgpack::unpacker recv_buf_; - //MUTEX recv_mtx_; + MUTEX recv_mtx_; // Send buffers msgpack::vrefbuffer send_buf_; diff --git a/src/universe.cpp b/src/universe.cpp index d9c43e3..bbfdd41 100644 --- a/src/universe.cpp +++ b/src/universe.cpp @@ -418,6 +418,7 @@ PeerPtr Universe::getWebService() const { } void Universe::_periodic() { + LOG(INFO) << "PERIODIC " << reconnects_.size(); auto i = reconnects_.begin(); while (i != reconnects_.end()) { -- GitLab