diff --git a/networktables/cpp/lib/share/networktables2/WriteManager.cpp b/networktables/cpp/lib/share/networktables2/WriteManager.cpp index c8eb8fee46..64688e3cb3 100644 --- a/networktables/cpp/lib/share/networktables2/WriteManager.cpp +++ b/networktables/cpp/lib/share/networktables2/WriteManager.cpp @@ -54,10 +54,15 @@ void WriteManager::stop(){ void WriteManager::offerOutgoingAssignment(NetworkTableEntry* entry) { { - NTSynchronized sync(transactionsLock); - ((std::queue*)incomingAssignmentQueue)->push(entry); - - if(((std::queue*)incomingAssignmentQueue)->size()>=queueSize){ + bool test_queue_overflow=false; + { + NTSynchronized sync(transactionsLock); + ((std::queue*)incomingAssignmentQueue)->push(entry); + + test_queue_overflow=(((std::queue*)incomingAssignmentQueue)->size()>=queueSize); + } + if (test_queue_overflow) + { run(); writeWarning("assignment queue overflowed. decrease the rate at which you create new entries or increase the write buffer size"); } @@ -67,9 +72,15 @@ void WriteManager::offerOutgoingAssignment(NetworkTableEntry* entry) { void WriteManager::offerOutgoingUpdate(NetworkTableEntry* entry) { { - NTSynchronized sync(transactionsLock); - ((std::queue*)incomingUpdateQueue)->push(entry); - if(((std::queue*)incomingUpdateQueue)->size()>=queueSize){ + bool test_queue_overflow=false; + { + NTSynchronized sync(transactionsLock); + ((std::queue*)incomingUpdateQueue)->push(entry); + test_queue_overflow=(((std::queue*)incomingUpdateQueue)->size()>=queueSize); + + } + if (test_queue_overflow) + { run(); writeWarning("update queue overflowed. decrease the rate at which you update entries or increase the write buffer size"); } diff --git a/networktables/cpp/lib/share/networktables2/server/ServerIncomingStreamMonitor.cpp b/networktables/cpp/lib/share/networktables2/server/ServerIncomingStreamMonitor.cpp index 51c57336e2..44bf367aed 100644 --- a/networktables/cpp/lib/share/networktables2/server/ServerIncomingStreamMonitor.cpp +++ b/networktables/cpp/lib/share/networktables2/server/ServerIncomingStreamMonitor.cpp @@ -7,6 +7,7 @@ #include "networktables2/server/ServerIncomingStreamMonitor.h" #include "networktables2/stream/IOStream.h" +#include "networktables2/util/System.h" ServerIncomingStreamMonitor::ServerIncomingStreamMonitor(IOStreamProvider& _streamProvider, ServerNetworkTableEntryStore& _entryStore, ServerIncomingConnectionListener& _incomingListener, ServerAdapterManager& _adapterListener, NetworkTableEntryTypeManager& _typeManager, @@ -69,6 +70,7 @@ void ServerIncomingStreamMonitor::run() ServerConnectionAdapter* connectionAdapter = new ServerConnectionAdapter(newStream, entryStore, entryStore, adapterListener, typeManager, threadManager); incomingListener.OnNewConnection(*connectionAdapter); } + sleep_ms(100); //avoid busy wait } } catch (IOException& e)