]> git.ipfire.org Git - thirdparty/kea.git/commitdiff
[2836] Don't leak memory on exception
authorMichal 'vorner' Vaner <michal.vaner@nic.cz>
Wed, 15 May 2013 10:55:20 +0000 (12:55 +0200)
committerMichal 'vorner' Vaner <michal.vaner@nic.cz>
Wed, 15 May 2013 10:55:20 +0000 (12:55 +0200)
If we throw an exception from the constructor, destructor is not called.
Call the clean-up manually there, so we don't leak memory.

src/lib/datasrc/memory/segment_object_holder.h

index 923c1e42ceb50decc60f37b06f1f4bc9bbfe003f..91c7127fd87fe86747e23150395c0230f7d029c5 100644 (file)
@@ -47,6 +47,10 @@ public:
         holder_name_(getNextHolderName()), holding_(true)
     {
         if (mem_sgmt_.setNamedAddress(holder_name_.c_str(), NULL)) {
+            // OK. We've grown. The caller might need to be informed, so
+            // we throw. But then, we don't get our destructor, so we
+            // release the memory right away.
+            mem_sgmt_.clearNamedAddress(holder_name_.c_str());
             isc_throw(isc::util::MemorySegmentGrown,
                       "Segment grown when allocating holder");
         }