[svn] commit: r1385 - in /trunk/src/lib/auth: data_source.h sqlite3_datasrc.cc tests/sqlite3_unittest.cc
BIND 10 source code commits
bind10-changes at lists.isc.org
Sat Mar 13 00:58:17 UTC 2010
Author: jinmei
Date: Sat Mar 13 00:58:16 2010
New Revision: 1385
Log:
prevented double close for sqlite3 data sources
Modified:
trunk/src/lib/auth/data_source.h
trunk/src/lib/auth/sqlite3_datasrc.cc
trunk/src/lib/auth/tests/sqlite3_unittest.cc
Modified: trunk/src/lib/auth/data_source.h
==============================================================================
--- trunk/src/lib/auth/data_source.h (original)
+++ trunk/src/lib/auth/data_source.h Sat Mar 13 00:58:16 2010
@@ -25,6 +25,8 @@
#include <boost/shared_ptr.hpp>
+#include <exceptions/exceptions.h>
+
#include <dns/name.h>
#include <dns/rrclass.h>
#include <cc/data.h>
@@ -46,6 +48,15 @@
class DataSrc;
typedef boost::shared_ptr<DataSrc> DataSrcPtr;
typedef boost::shared_ptr<const DataSrc> ConstDataSrcPtr;
+
+/// This exception represents Backend-independent errors relating to
+/// data source operations.
+class DataSourceError : public Exception {
+public:
+ DataSourceError(const char* file, size_t line, const char* what) :
+ isc::Exception(file, line, what) {}
+};
+
class AbstractDataSrc {
///
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:58:16 2010
@@ -482,7 +482,9 @@
}
Sqlite3DataSrc::~Sqlite3DataSrc() {
- close();
+ if (db != NULL) {
+ close();
+ }
}
DataSrc::Result
@@ -688,7 +690,7 @@
void
Sqlite3DataSrc::open(const string& name) {
if (db != NULL) {
- isc_throw(Sqlite3Error, "Duplicate Sqlite3 open with " << name);
+ isc_throw(DataSourceError, "Duplicate Sqlite3 open with " << name);
}
if (sqlite3_open(name.c_str(), &db) != 0) {
// sqlite3_close() must be called even when open fails.
@@ -702,7 +704,8 @@
DataSrc::Result
Sqlite3DataSrc::close(void) {
if (db == NULL) {
- return (SUCCESS);
+ isc_throw(DataSourceError,
+ "Sqlite3 data source is being closed before open");
}
if (q_zone != NULL) {
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:58:16 2010
@@ -367,7 +367,13 @@
TEST_F(Sqlite3DataSourceTest, doubleOpen) {
// An attempt of duplicate open should trigger an exception.
- EXPECT_THROW(data_source.init(SQLITE_DBFILE_EXAMPLE), Sqlite3Error);
+ EXPECT_THROW(data_source.init(SQLITE_DBFILE_EXAMPLE), DataSourceError);
+}
+
+TEST_F(Sqlite3DataSourceTest, doubleClose) {
+ // An attempt of duplicate close should trigger an exception.
+ EXPECT_EQ(DataSrc::SUCCESS, data_source.close());
+ EXPECT_THROW(data_source.close(), DataSourceError);
}
TEST_F(Sqlite3DataSourceTest, findClosestEnclosure) {
More information about the bind10-changes
mailing list