Browse Source

[1183] make dbparameters_ a scoped_ptr

so that failed constructor does not leak
Jelte Jansen 13 years ago
parent
commit
8cfa0f76ba
2 changed files with 5 additions and 5 deletions
  1. 3 4
      src/lib/datasrc/sqlite3_accessor.cc
  2. 2 1
      src/lib/datasrc/sqlite3_accessor.h

+ 3 - 4
src/lib/datasrc/sqlite3_accessor.cc

@@ -49,7 +49,7 @@ struct SQLite3Parameters {
 };
 
 SQLite3Database::SQLite3Database(const std::string& filename,
-                                     const isc::dns::RRClass& rrclass) :
+                                 const isc::dns::RRClass& rrclass) :
     dbparameters_(new SQLite3Parameters),
     class_(rrclass.toText()),
     database_name_("sqlite3_" +
@@ -243,7 +243,7 @@ SQLite3Database::open(const std::string& name) {
     }
 
     checkAndSetupSchema(&initializer);
-    initializer.move(dbparameters_);
+    initializer.move(dbparameters_.get());
 }
 
 SQLite3Database::~SQLite3Database() {
@@ -251,7 +251,6 @@ SQLite3Database::~SQLite3Database() {
     if (dbparameters_->db_ != NULL) {
         close();
     }
-    delete dbparameters_;
 }
 
 void
@@ -432,7 +431,7 @@ private:
     void copyColumn(std::string (&data)[COLUMN_COUNT], int column) {
         data[column] = convertToPlainChar(sqlite3_column_text(statement_,
                                                               column),
-                                          database_->dbparameters_);
+                                          database_->dbparameters_.get());
     }
 
     void bindZoneId(const int zone_id) {

+ 2 - 1
src/lib/datasrc/sqlite3_accessor.h

@@ -21,6 +21,7 @@
 #include <exceptions/exceptions.h>
 
 #include <boost/enable_shared_from_this.hpp>
+#include <boost/scoped_ptr.hpp>
 #include <string>
 
 namespace isc {
@@ -127,7 +128,7 @@ public:
 
 private:
     /// \brief Private database data
-    SQLite3Parameters* dbparameters_;
+    boost::scoped_ptr<SQLite3Parameters> dbparameters_;
     /// \brief The class for which the queries are done
     const std::string class_;
     /// \brief Opens the database