]> granicus.if.org Git - icinga2/commitdiff
Fix memory leak in the StdioStream class.
authorGunnar Beutner <gunnar.beutner@netways.de>
Fri, 19 Apr 2013 12:59:38 +0000 (14:59 +0200)
committerGunnar Beutner <gunnar.beutner@netways.de>
Fri, 19 Apr 2013 13:06:45 +0000 (15:06 +0200)
lib/base/stdiostream.cpp
lib/base/stdiostream.h

index 959e377dcccf9458b227b2ade55ecb273ae4f4dc..ec4cf4d0c6bd056caecb9cd93ebcc60ef7b40102 100644 (file)
@@ -34,6 +34,11 @@ StdioStream::StdioStream(std::iostream *innerStream, bool ownsStream)
        : m_InnerStream(innerStream), m_OwnsStream(ownsStream)
 { }
 
+StdioStream::~StdioStream(void)
+{
+       Close();
+}
+
 size_t StdioStream::Read(void *buffer, size_t size)
 {
        ObjectLock olock(this);
@@ -51,6 +56,8 @@ void StdioStream::Write(const void *buffer, size_t size)
 
 void StdioStream::Close(void)
 {
-       if (m_OwnsStream)
+       if (m_OwnsStream) {
                delete m_InnerStream;
+               m_OwnsStream = false;
+       }
 }
index fdd544f73c68a53ec21e2025329e97f6f5c63c93..9e5b48b5af74f843574ea11b6ac73d4d00625ac3 100644 (file)
@@ -33,6 +33,7 @@ public:
        typedef weak_ptr<StdioStream> WeakPtr;
 
        StdioStream(std::iostream *innerStream, bool ownsStream);
+       ~StdioStream(void);
 
        virtual size_t Read(void *buffer, size_t size);
        virtual void Write(const void *buffer, size_t size);