diff --git a/lib/base/stdiostream.cpp b/lib/base/stdiostream.cpp index 959e377dc..ec4cf4d0c 100644 --- a/lib/base/stdiostream.cpp +++ b/lib/base/stdiostream.cpp @@ -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; + } } diff --git a/lib/base/stdiostream.h b/lib/base/stdiostream.h index fdd544f73..9e5b48b5a 100644 --- a/lib/base/stdiostream.h +++ b/lib/base/stdiostream.h @@ -33,6 +33,7 @@ public: typedef weak_ptr 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);