about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--src/libstore/db.cc28
-rw-r--r--src/libstore/db.hh2
-rw-r--r--src/libstore/store.cc6
3 files changed, 31 insertions, 5 deletions
diff --git a/src/libstore/db.cc b/src/libstore/db.cc
index 74c933d0e687..7ded82ef1fe8 100644
--- a/src/libstore/db.cc
+++ b/src/libstore/db.cc
@@ -292,11 +292,12 @@ void Database::close()
     try {
 
         for (map<TableId, Db *>::iterator i = tables.begin();
-             i != tables.end(); i++)
+             i != tables.end(); )
         {
-            Db * db = i->second;
-            db->close(DB_NOSYNC);
-            delete db;
+            map<TableId, Db *>::iterator j = i;
+            ++j;
+            closeTable(i->first);
+            i = j;
         }
 
         /* Do a checkpoint every 128 kilobytes, or every 5 minutes. */
@@ -336,6 +337,25 @@ TableId Database::openTable(const string & tableName, bool sorted)
 }
 
 
+void Database::closeTable(TableId table)
+{
+    try {
+        Db * db = getDb(table);
+        db->close(DB_NOSYNC);
+        delete db;
+        tables.erase(table);
+    } catch (DbException e) { rethrow(e); }
+}
+
+
+void Database::deleteTable(const string & table)
+{
+    try {
+        env->dbremove(0, table.c_str(), 0, DB_AUTO_COMMIT);
+    } catch (DbException e) { rethrow(e); }
+}
+
+
 bool Database::queryString(const Transaction & txn, TableId table, 
     const string & key, string & data)
 {
diff --git a/src/libstore/db.hh b/src/libstore/db.hh
index b7ebd446793d..dd7d76b8cebb 100644
--- a/src/libstore/db.hh
+++ b/src/libstore/db.hh
@@ -65,6 +65,8 @@ public:
     void close();
 
     TableId openTable(const string & table, bool sorted = false);
+    void closeTable(TableId table);
+    void deleteTable(const string & table);
 
     bool queryString(const Transaction & txn, TableId table, 
         const string & key, string & data);
diff --git a/src/libstore/store.cc b/src/libstore/store.cc
index fbbf12269ace..db12ba2d537b 100644
--- a/src/libstore/store.cc
+++ b/src/libstore/store.cc
@@ -1034,8 +1034,12 @@ static void upgradeStore09()
             nixDB.setString(txn, dbReferrers, addPrefix(*i, *j), "");
         cerr << ".";
     }
-    
+
     cerr << "\n";
 
     txn.commit();
+
+    nixDB.closeTable(dbReferers);
+
+    nixDB.deleteTable("referers");
 }