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