From 8825b39f6cb16db281a8d0fc0d263453f2cb88dc Mon Sep 17 00:00:00 2001 From: erwincoumans Date: Tue, 16 Oct 2018 18:31:17 -0700 Subject: [PATCH] fix potential memory leak in previous commit related to InMemoryFileIO class. --- .../plugins/fileIOPlugin/fileIOPlugin.cpp | 31 ++++++++++++------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/examples/SharedMemory/plugins/fileIOPlugin/fileIOPlugin.cpp b/examples/SharedMemory/plugins/fileIOPlugin/fileIOPlugin.cpp index c434113ca..4e8626e5d 100644 --- a/examples/SharedMemory/plugins/fileIOPlugin/fileIOPlugin.cpp +++ b/examples/SharedMemory/plugins/fileIOPlugin/fileIOPlugin.cpp @@ -1,5 +1,3 @@ - - #include "fileIOPlugin.h" #include "../../SharedMemoryPublic.h" #include "../b3PluginContext.h" @@ -46,9 +44,14 @@ struct InMemoryFileIO : public CommonFileIOInterface { b3HashMap m_fileCache; InMemoryFileAccessor m_fileHandles[B3_MAX_FILEIO_INTERFACES]; + int m_numAllocs; + int m_numFrees; InMemoryFileIO() { + m_numAllocs=0; + m_numFrees=0; + for (int i=0;im_buffer); + m_numFrees++; delete (mem); + m_numFrees++; } } } @@ -80,6 +88,7 @@ struct InMemoryFileIO : public CommonFileIOInterface char* buffer = 0; if (len) { + m_numAllocs++; buffer = new char[len]; } return buffer; @@ -92,6 +101,7 @@ struct InMemoryFileIO : public CommonFileIOInterface virtual int registerFile(const char* fileName, char* buffer, int len) { + m_numAllocs++; InMemoryFile* f = new InMemoryFile(); f->m_buffer = buffer; f->m_fileSize = len; @@ -227,7 +237,6 @@ struct InMemoryFileIO : public CommonFileIOInterface } if (c && c!='\n') { - char a='\r'; if (c!=13) { destBuffer[numRead++]=c; @@ -347,8 +356,12 @@ struct WrapperFileIO : public CommonFileIOInterface if (slot>=0) { //first check the cache - int childHandle = m_cachedFiles.fileOpen(fileName, mode); - if (childHandle<0) + int cacheHandle = m_cachedFiles.fileOpen(fileName, mode); + if (cacheHandle>=0) + { + m_cachedFiles.fileClose(cacheHandle); + } + if (cacheHandle<0) { for (int i=0;i=0 && fileHandle=0 && fileHandle=0 && fileHandlem_text) + if (strlen(arguments->m_text)) { obj->m_fileIO.addFileIOInterface(new CNSFileIO(arguments->m_text)); }