diff options
author | Misha Brukman <brukman+llvm@gmail.com> | 2003-10-08 19:55:47 +0000 |
---|---|---|
committer | Misha Brukman <brukman+llvm@gmail.com> | 2003-10-08 19:55:47 +0000 |
commit | 7f58de2b991cb8dff4d1bd3e8c9ece9ea2ba639c (patch) | |
tree | 7c7777268333b10eb9b94dae9dbbe7bdbb47d359 /lib/Bytecode/Reader | |
parent | 608e75c604a0454f51d514e23b3d70254b832a10 (diff) | |
download | external_llvm-7f58de2b991cb8dff4d1bd3e8c9ece9ea2ba639c.zip external_llvm-7f58de2b991cb8dff4d1bd3e8c9ece9ea2ba639c.tar.gz external_llvm-7f58de2b991cb8dff4d1bd3e8c9ece9ea2ba639c.tar.bz2 |
Destroy allocated resources on exception.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8969 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Bytecode/Reader')
-rw-r--r-- | lib/Bytecode/Reader/ReaderWrappers.cpp | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/lib/Bytecode/Reader/ReaderWrappers.cpp b/lib/Bytecode/Reader/ReaderWrappers.cpp index 99c0e6b..9b63274 100644 --- a/lib/Bytecode/Reader/ReaderWrappers.cpp +++ b/lib/Bytecode/Reader/ReaderWrappers.cpp @@ -59,8 +59,13 @@ BytecodeFileReader::BytecodeFileReader(const std::string &Filename) { if (Buffer == (unsigned char*)MAP_FAILED) throw std::string("Error mmapping file!"); - // Parse the bytecode we mmapped in - ParseBytecode(Buffer, Length, Filename); + try { + // Parse the bytecode we mmapped in + ParseBytecode(Buffer, Length, Filename); + } catch (...) { + munmap((char*)Buffer, Length); + throw; + } } BytecodeFileReader::~BytecodeFileReader() { @@ -106,7 +111,12 @@ BytecodeBufferReader::BytecodeBufferReader(const unsigned char *Buf, ParseBegin = Buffer = Buf; MustDelete = false; } - ParseBytecode(ParseBegin, Length, ModuleID); + try { + ParseBytecode(ParseBegin, Length, ModuleID); + } catch (...) { + if (MustDelete) delete [] Buffer; + throw; + } } BytecodeBufferReader::~BytecodeBufferReader() { |