Sfoglia il codice sorgente

Buffer up at most A2_IOV_MAX buffer entries for BtMessages

Tatsuhiro Tsujikawa 12 anni fa
parent
commit
c04df672d1
4 ha cambiato i file con 15 aggiunte e 6 eliminazioni
  1. 4 6
      src/DefaultBtMessageDispatcher.cc
  2. 5 0
      src/PeerConnection.cc
  3. 2 0
      src/PeerConnection.h
  4. 4 0
      src/SocketBuffer.h

+ 4 - 6
src/DefaultBtMessageDispatcher.cc

@@ -116,13 +116,11 @@ void DefaultBtMessageDispatcher::sendMessagesInternal()
   }
 }
 
-void DefaultBtMessageDispatcher::sendMessages() {
-  // First flush any pending data in the buffer.
-  peerConnection_->sendPendingData();
-  if(!peerConnection_->sendBufferIsEmpty()) {
-    return;
+void DefaultBtMessageDispatcher::sendMessages()
+{
+  if(peerConnection_->getBufferEntrySize() < A2_IOV_MAX) {
+    sendMessagesInternal();
   }
-  sendMessagesInternal();
   peerConnection_->sendPendingData();
 }
 

+ 5 - 0
src/PeerConnection.cc

@@ -253,6 +253,11 @@ bool PeerConnection::sendBufferIsEmpty() const
   return socketBuffer_.sendBufferIsEmpty();
 }
 
+size_t PeerConnection::getBufferEntrySize() const
+{
+  return socketBuffer_.getBufferEntrySize();
+}
+
 ssize_t PeerConnection::sendPendingData()
 {
   ssize_t writtenLength = socketBuffer_.send();

+ 2 - 0
src/PeerConnection.h

@@ -119,6 +119,8 @@ public:
 
   bool sendBufferIsEmpty() const;
 
+  size_t getBufferEntrySize() const;
+
   ssize_t sendPendingData();
 
   const unsigned char* getBuffer() const

+ 4 - 0
src/SocketBuffer.h

@@ -144,6 +144,10 @@ public:
   // Returns true if queue is empty.
   bool sendBufferIsEmpty() const;
 
+  size_t getBufferEntrySize() const
+  {
+    return bufq_.size();
+  }
 };
 
 } // namespace aria2