diff --git a/src/peer.cpp b/src/peer.cpp index 2ab4ca09f797831b5c3b101401c97c1a2520ba4b..cc955545b8610b1b16f6f18186305c48b5601447 100644 --- a/src/peer.cpp +++ b/src/peer.cpp @@ -218,10 +218,16 @@ void Peer::_updateURI() { } void Peer::rawClose() { - UNIQUE_LOCK(send_mtx_, lk_send); // UNIQUE_LOCK(recv_mtx_, lk_recv); - sock_->close(); status_ = NodeStatus::kDisconnected; + + // Must make sure no jobs are active + while (job_count_ > 0) { + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + + UNIQUE_LOCK(send_mtx_, lk_send); + sock_->close(); } void Peer::close(bool retry) { @@ -288,7 +294,9 @@ void Peer::_createJob() { } void Peer::data() { + ftl::Counter counter(&job_count_); if (!sock_->is_valid()) { return; } + if (status_ == NodeStatus::kDisconnected) return; int rc = 0;