From 3b2a4aa060a777e1653445542df579fd87d2af8a Mon Sep 17 00:00:00 2001
From: Nicolas Pope <nwpope@utu.fi>
Date: Fri, 14 Jun 2019 06:32:13 +0300
Subject: [PATCH] Move recv to happen outside new thread

---
 components/net/cpp/src/peer.cpp | 25 +++++++++++++++++++++----
 1 file changed, 21 insertions(+), 4 deletions(-)

diff --git a/components/net/cpp/src/peer.cpp b/components/net/cpp/src/peer.cpp
index 8b1096511..678046d1a 100644
--- a/components/net/cpp/src/peer.cpp
+++ b/components/net/cpp/src/peer.cpp
@@ -389,10 +389,27 @@ void Peer::error(int e) {
 
 void Peer::data() {
 	//if (!is_waiting_) return;
-	is_waiting_ = false;
+	//is_waiting_ = false;
+	std::unique_lock<std::recursive_mutex> lk(recv_mtx_);
+	recv_buf_.reserve_buffer(kMaxMessage);
+
+	if (recv_buf_.buffer_capacity() < (kMaxMessage / 10)) {
+		LOG(WARNING) << "Net buffer at capacity";
+		return;
+	}
+
+	int rc = ftl::net::internal::recv(sock_, recv_buf_.buffer(), kMaxMessage, 0);
+
+	if (rc <= 0) {
+		return;
+	}
+	
+	recv_buf_.buffer_consumed(rc);
+	lk.unlock();
+
 	pool.push([](int id, Peer *p) {
 		p->_data();
-		p->is_waiting_ = true;
+		//p->is_waiting_ = true;
 	}, this);
 }
 
@@ -409,14 +426,14 @@ void Peer::data() {
 bool Peer::_data() {
 	std::unique_lock<std::recursive_mutex> lk(recv_mtx_);
 
-	recv_buf_.reserve_buffer(kMaxMessage);
+	/*recv_buf_.reserve_buffer(kMaxMessage);
 	int rc = ftl::net::internal::recv(sock_, recv_buf_.buffer(), kMaxMessage, 0);
 
 	if (rc <= 0) {
 		return false;
 	}
 	
-	recv_buf_.buffer_consumed(rc);
+	recv_buf_.buffer_consumed(rc);*/
 
 	if (scheme_ == ftl::URI::SCHEME_WS && !ws_read_header_) {
 		wsheader_type ws;
-- 
GitLab