[svn] commit: r1384 - in /trunk/src/lib/auth: sqlite3_datasrc.cc tests/sqlite3_unittest.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Sat Mar 13 00:42:24 UTC 2010


Author: jinmei
Date: Sat Mar 13 00:42:23 2010
New Revision: 1384

Log:
prevented duplicate DB open

Modified:
    trunk/src/lib/auth/sqlite3_datasrc.cc
    trunk/src/lib/auth/tests/sqlite3_unittest.cc

Modified: trunk/src/lib/auth/sqlite3_datasrc.cc
==============================================================================
--- trunk/src/lib/auth/sqlite3_datasrc.cc (original)
+++ trunk/src/lib/auth/sqlite3_datasrc.cc Sat Mar 13 00:42:23 2010
@@ -37,7 +37,7 @@
 namespace {
 // Note: this cannot be std::string to avoid
 // "static initialization order fiasco".
-static const char* DEFAULT_DB_FILE = "/tmp/zone.sqlite3";
+const char* DEFAULT_DB_FILE = "/tmp/zone.sqlite3";
 }
 
 //
@@ -95,7 +95,8 @@
     return (i);
 }
 
-static int
+namespace {
+int
 importSqlite3Rows(sqlite3_stmt* query, const Name& qname, const RRClass& qclass,
                   const RRType& qtype, const bool nsec3_tree,
                   RRsetList& result_sets, uint32_t& flags)
@@ -180,6 +181,7 @@
     }
 
     return (rows);
+}
 }
 
 int
@@ -685,6 +687,9 @@
 //
 void
 Sqlite3DataSrc::open(const string& name) {
+    if (db != NULL) {
+        isc_throw(Sqlite3Error, "Duplicate Sqlite3 open with " << name);
+    }
     if (sqlite3_open(name.c_str(), &db) != 0) {
         // sqlite3_close() must be called even when open fails.
         sqlite3_close(db);

Modified: trunk/src/lib/auth/tests/sqlite3_unittest.cc
==============================================================================
--- trunk/src/lib/auth/tests/sqlite3_unittest.cc (original)
+++ trunk/src/lib/auth/tests/sqlite3_unittest.cc Sat Mar 13 00:42:23 2010
@@ -365,6 +365,11 @@
     EXPECT_THROW(data_source.init(SQLITE_DBFILE_NOTEXIST), Sqlite3Error);
 }
 
+TEST_F(Sqlite3DataSourceTest, doubleOpen) {
+    // An attempt of duplicate open should trigger an exception.
+    EXPECT_THROW(data_source.init(SQLITE_DBFILE_EXAMPLE), Sqlite3Error);
+}
+
 TEST_F(Sqlite3DataSourceTest, findClosestEnclosure) {
     NameMatch name_match(www_name);
     data_source.findClosestEnclosure(name_match, rrclass);




More information about the bind10-changes mailing list