Browse Source

[2108] If there's an exception, clear last_rrset_

Mukund Sivaraman 12 years ago
parent
commit
3f0eb8fec7
1 changed files with 10 additions and 5 deletions
  1. 10 5
      src/lib/datasrc/memory/memory_client.cc

+ 10 - 5
src/lib/datasrc/memory/memory_client.cc

@@ -548,11 +548,16 @@ InMemoryClient::InMemoryClientImpl::load(
 
 
     assert(!last_rrset_);
     assert(!last_rrset_);
 
 
-    rrset_installer(boost::bind(&InMemoryClientImpl::addFromLoad, this,
-                                _1, zone_name, holder.get()));
-
-    // Add any last RRset that was left
-    addRdataSet(zone_name, *holder.get(), ConstRRsetPtr(), ConstRRsetPtr());
+    try {
+        rrset_installer(boost::bind(&InMemoryClientImpl::addFromLoad, this,
+                                    _1, zone_name, holder.get()));
+        // Add any last RRset that was left
+        addRdataSet(zone_name, *holder.get(),
+                    ConstRRsetPtr(), ConstRRsetPtr());
+    } catch (...) {
+        last_rrset_ = ConstRRsetPtr();
+        throw;
+    }
 
 
     assert(!last_rrset_);
     assert(!last_rrset_);