diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2004-11-16 06:41:05 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2004-11-16 06:41:05 +0000 |
commit | 5a885782491538abe81ff242dd08f7d9f594967f (patch) | |
tree | 00726668c3b5112e9d0c5718d137372e66d1c7e1 /lib/Bytecode/Reader/ReaderWrappers.cpp | |
parent | a4d0c6fb94003609d1e00a96887c9db12d6f1936 (diff) |
Per code review:\
* Get rid of memory leaks on exception \
* Provide better comments of how the memory handling works
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@17876 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode/Reader/ReaderWrappers.cpp')
-rw-r--r-- | lib/Bytecode/Reader/ReaderWrappers.cpp | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/lib/Bytecode/Reader/ReaderWrappers.cpp b/lib/Bytecode/Reader/ReaderWrappers.cpp index 7cdcf64de1..c8958ad19c 100644 --- a/lib/Bytecode/Reader/ReaderWrappers.cpp +++ b/lib/Bytecode/Reader/ReaderWrappers.cpp @@ -377,13 +377,12 @@ bool llvm::GetBytecodeSymbols(const sys::Path& fName, std::auto_ptr<ModuleProvider> AMP( getBytecodeModuleProvider(fName.get())); // Get the module from the provider - Module* M = AMP->releaseModule(); + Module* M = AMP->materializeModule(); // Get the symbols getSymbols(M, symbols); // Done with the module - delete M; return true; } catch (...) { @@ -393,12 +392,13 @@ bool llvm::GetBytecodeSymbols(const sys::Path& fName, ModuleProvider* llvm::GetBytecodeSymbols(const unsigned char*Buffer, unsigned Length, - const std::string& ModuleID, - std::vector<std::string>& symbols) { + const std::string& ModuleID, + std::vector<std::string>& symbols) { + ModuleProvider* MP = 0; try { - ModuleProvider* MP = - getBytecodeBufferModuleProvider(Buffer, Length, ModuleID); + // Get the module provider + MP = getBytecodeBufferModuleProvider(Buffer, Length, ModuleID); // Get the module from the provider Module* M = MP->materializeModule(); @@ -406,11 +406,15 @@ llvm::GetBytecodeSymbols(const unsigned char*Buffer, unsigned Length, // Get the symbols getSymbols(M, symbols); - // Done with the module + // Done with the module. Note that ModuleProvider will delete the + // Module when it is deleted. Also note that its the caller's responsibility + // to delete the ModuleProvider. return MP; } catch (...) { - // Fall through + // We only delete the ModuleProvider here because its destructor will + // also delete the Module (we used materializeModule not releaseModule). + delete MP; } return 0; } |