BIND 10 trac2850_2, updated. 17590957db6a352e86c208c3520a340349b340ea [2850] Throw std::bad_alloc if ZoneTable::create() throws MemorySegmentGrown

BIND 10 source code commits bind10-changes at lists.isc.org
Fri May 10 14:26:25 UTC 2013


The branch, trac2850_2 has been updated
       via  17590957db6a352e86c208c3520a340349b340ea (commit)
      from  e2889aabb93e201bfaf49046472ffc42df8b4b77 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit 17590957db6a352e86c208c3520a340349b340ea
Author: Mukund Sivaraman <muks at isc.org>
Date:   Fri May 10 19:55:40 2013 +0530

    [2850] Throw std::bad_alloc if ZoneTable::create() throws MemorySegmentGrown
    
    We don't attempt to recover in this case.
    
    Also change some error handling to simply asserts.

-----------------------------------------------------------------------

Summary of changes:
 .../datasrc/memory/zone_table_segment_mapped.cc    |   35 +++++++-------------
 1 file changed, 12 insertions(+), 23 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/datasrc/memory/zone_table_segment_mapped.cc b/src/lib/datasrc/memory/zone_table_segment_mapped.cc
index 362263c..f199e3d 100644
--- a/src/lib/datasrc/memory/zone_table_segment_mapped.cc
+++ b/src/lib/datasrc/memory/zone_table_segment_mapped.cc
@@ -97,16 +97,7 @@ ZoneTableSegmentMapped::processChecksum(MemorySegmentMapped& segment,
         *static_cast<size_t*>(checksum) = 0;
         const bool grew = segment.setNamedAddress(ZONE_TABLE_CHECKSUM_NAME,
                                                   checksum);
-        if (grew) {
-            // If the segment grew here, we have a problem as the
-            // checksum address may no longer be valid. In this case, we
-            // cannot recover. This case is extremely unlikely as we
-            // reserved memory for the ZONE_TABLE_CHECKSUM_NAME
-            // above. It indicates a very restrictive MemorySegment
-            // which we should not use.
-            error_msg = "Segment grew unexpectedly in setNamedAddress()";
-            return (false);
-        }
+        assert(!grew);
     }
 
     return (true);
@@ -141,19 +132,17 @@ ZoneTableSegmentMapped::processHeader(MemorySegmentMapped& segment,
                 // Do nothing and try again.
             }
         }
-        ZoneTableHeader* new_header = new(ptr)
-            ZoneTableHeader(ZoneTable::create(segment, rrclass_));
-        const bool grew = segment.setNamedAddress(ZONE_TABLE_HEADER_NAME,
-                                                  new_header);
-        if (grew) {
-            // If the segment grew here, we have a problem as the table
-            // header address may no longer be valid. In this case, we
-            // cannot recover. This case is extremely unlikely as we
-            // reserved memory for the ZONE_TABLE_HEADER_NAME above. It
-            // indicates a very restrictive MemorySegment which we
-            // should not use.
-            error_msg = "Segment grew unexpectedly in setNamedAddress()";
-            return (false);
+        try {
+            ZoneTableHeader* new_header = new(ptr)
+                ZoneTableHeader(ZoneTable::create(segment, rrclass_));
+            const bool grew = segment.setNamedAddress(ZONE_TABLE_HEADER_NAME,
+                                                      new_header);
+            assert(!grew);
+        } catch (const MemorySegmentGrown&) {
+            // This is extremely unlikely and we just throw a fatal
+            // exception here without attempting to recover.
+
+            throw std::bad_alloc();
         }
     }
 



More information about the bind10-changes mailing list