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
This commit is contained in:
Reid Spencer 2004-11-16 06:41:05 +00:00
parent a4d0c6fb94
commit 5a88578249

View File

@ -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;
}