Fix deadlock with Driver::write

Use a spin lock to recheck the queue size until it has room to push.
This commit is contained in:
Kyle Schwarz
2020-08-14 16:57:52 -04:00
parent afda617894
commit 4cd897badd
6 changed files with 2 additions and 13 deletions
+2 -2
View File
@@ -45,9 +45,9 @@ bool Driver::write(const std::vector<uint8_t>& bytes) {
}
if(writeBlocks) {
std::unique_lock<std::mutex> lk(writeMutex);
if(writeQueue.size_approx() > writeQueueSize)
writeCV.wait(lk);
while(writeQueue.size_approx() > (writeQueueSize * 3 / 4))
std::this_thread::sleep_for(std::chrono::milliseconds(10));
} else {
if(writeQueue.size_approx() > writeQueueSize) {
report(APIEvent::Type::TransmitBufferFull, APIEvent::Severity::Error);