]> granicus.if.org Git - icinga2/commitdiff
Fix FIFO bug.
authorGunnar Beutner <gunnar@beutner.name>
Mon, 8 Apr 2013 07:44:12 +0000 (09:44 +0200)
committerGunnar Beutner <gunnar@beutner.name>
Mon, 8 Apr 2013 07:44:12 +0000 (09:44 +0200)
lib/base/fifo.cpp
lib/base/fifo.h
lib/remoting/endpoint.cpp
lib/remoting/endpointmanager.cpp

index cc12f422fd77eadf7def65672c8727b012d49772..b908c784310c17a820d9d1f2830001c15c178157 100644 (file)
@@ -42,13 +42,16 @@ FIFO::~FIFO(void)
  *
  * @param newSize The minimum new size of the FIFO buffer.
  */
-void FIFO::ResizeBuffer(size_t newSize)
+void FIFO::ResizeBuffer(size_t newSize, bool decrease)
 {
-       if (m_AllocSize >= newSize)
+       if (m_AllocSize >= newSize && !decrease)
                return;
 
        newSize = (newSize / FIFO::BlockSize + 1) * FIFO::BlockSize;
 
+       if (newSize == m_AllocSize)
+               return;
+
        char *newBuffer = static_cast<char *>(realloc(m_Buffer, newSize));
 
        if (newBuffer == NULL)
@@ -69,7 +72,8 @@ void FIFO::Optimize(void)
                memcpy(m_Buffer, m_Buffer + m_Offset, m_DataSize);
                m_Offset = 0;
 
-               ResizeBuffer(m_DataSize);
+               if (m_DataSize > 0)
+                       ResizeBuffer(m_DataSize, true);
 
                return;
        }
@@ -99,7 +103,7 @@ size_t FIFO::Read(void *buffer, size_t count)
  */
 void FIFO::Write(const void *buffer, size_t count)
 {
-       ResizeBuffer(m_Offset + m_DataSize + count);
+       ResizeBuffer(m_Offset + m_DataSize + count, false);
        memcpy(m_Buffer + m_Offset + m_DataSize, buffer, count);
        m_DataSize += count;
 }
index 4c41a9c8981ae8438994309b65f0692b21d64631..97c81e1a1cd8987c5cbbceff9ff7be824a93f250 100644 (file)
@@ -54,7 +54,7 @@ private:
        size_t m_AllocSize;
        size_t m_Offset;
 
-       void ResizeBuffer(size_t newSize);
+       void ResizeBuffer(size_t newSize, bool decrease);
        void Optimize(void);
 };
 
index 713aad0640f2db70a9584801b8015d31c8205067..151e3c3ef05d5b0fb092cd6243e3c5febf2cdd79 100644 (file)
@@ -292,8 +292,6 @@ void Endpoint::MessageThreadProc(const Stream::Ptr& stream)
                } catch (const std::exception& ex) {
                        Log(LogWarning, "jsonrpc", "Error while reading JSON-RPC message for endpoint '" + GetName() + "': " + boost::diagnostic_information(ex));
 
-                       GetClient()->Close();
-
                        m_Client.reset();
                }
 
index ff5759f37f43fb1d0088d625f2419aaecfdf5399..af517bfd9eba44e6a673a768ffc74f84a60994d6 100644 (file)
@@ -203,9 +203,7 @@ void EndpointManager::NewClientHandler(const Socket::Ptr& client, TlsRole role)
        if (!endpoint)
                endpoint = Endpoint::MakeEndpoint(identity, true);
 
-       BufferedStream::Ptr bufferedStream = boost::make_shared<BufferedStream>(tlsStream);
-
-       endpoint->SetClient(bufferedStream);
+       endpoint->SetClient(tlsStream);
 }
 
 /**