diff --git a/components/net/cpp/src/peer.cpp b/components/net/cpp/src/peer.cpp index 52e082373276edc14ea553fb0dc13ee6f8a37e20..549d6478e516c4fe058a3d8253b3b90956c0afbf 100644 --- a/components/net/cpp/src/peer.cpp +++ b/components/net/cpp/src/peer.cpp @@ -417,15 +417,6 @@ void Peer::data() { bool Peer::_data() { std::unique_lock<std::recursive_mutex> lk(recv_mtx_); - /*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);*/ - if (scheme_ == ftl::URI::SCHEME_WS && !ws_read_header_) { wsheader_type ws; if (ws_parse(recv_buf_, ws) < 0) { @@ -436,6 +427,8 @@ bool Peer::_data() { msgpack::object_handle msg; while (recv_buf_.next(msg)) { + // CHECK Safe to unlock here? + lk.unlock(); ws_read_header_ = false; msgpack::object obj = msg.get(); if (status_ != kConnected) { @@ -457,6 +450,9 @@ bool Peer::_data() { } disp_->dispatch(*this, obj); + // Relock before next loop of while + lk.lock(); + if (scheme_ == ftl::URI::SCHEME_WS && recv_buf_.nonparsed_size() > 0) { wsheader_type ws; if (ws_parse(recv_buf_, ws) < 0) {