Explorar el Código

Added TX queue cap for issue #769

Joseph Henry hace 7 años
padre
commit
a9ca26c698
Se han modificado 2 ficheros con 11 adiciones y 0 borrados
  1. 8 0
      node/Constants.hpp
  2. 3 0
      node/Switch.cpp

+ 8 - 0
node/Constants.hpp

@@ -193,6 +193,14 @@
  */
  */
 #define ZT_RX_QUEUE_SIZE 64
 #define ZT_RX_QUEUE_SIZE 64
 
 
+/**
+ * Size of TX queue
+ *
+ * This is about 2mb, and can be decreased for small devices. A queue smaller
+ * than about 4 is probably going to cause a lot of lost packets.
+ */
+#define ZT_TX_QUEUE_SIZE 64
+
 /**
 /**
  * Length of secret key in bytes -- 256-bit -- do not change
  * Length of secret key in bytes -- 256-bit -- do not change
  */
  */

+ 3 - 0
node/Switch.cpp

@@ -503,6 +503,9 @@ void Switch::send(void *tPtr,Packet &packet,bool encrypt)
 	if (!_trySend(tPtr,packet,encrypt)) {
 	if (!_trySend(tPtr,packet,encrypt)) {
 		{
 		{
 			Mutex::Lock _l(_txQueue_m);
 			Mutex::Lock _l(_txQueue_m);
+			if (_txQueue.size() >= ZT_TX_QUEUE_SIZE) {
+				_txQueue.pop_front();
+			}
 			_txQueue.push_back(TXQueueEntry(dest,RR->node->now(),packet,encrypt));
 			_txQueue.push_back(TXQueueEntry(dest,RR->node->now(),packet,encrypt));
 		}
 		}
 		if (!RR->topology->getPeer(tPtr,dest))
 		if (!RR->topology->getPeer(tPtr,dest))