Registed datastore environments with atexit.
[didex.git] / didex / store.py
index 55dc71e..a9bf0cd 100644 (file)
@@ -1,4 +1,4 @@
-import threading, pickle, inspect
+import threading, pickle, inspect, atexit
 from . import db, index, cache
 from .db import txnfun
 
@@ -22,11 +22,13 @@ class environment(object):
                 if self.path is None:
                     self.path = self.getpath()
                 self.bk = db.environment(self.path, recover=self.recover)
+                atexit.register(self.close)
             return self.bk
 
     def close(self):
         with self.lk:
             if self.bk is not None:
+                atexit.unregister(self.close)
                 self.bk.close()
                 self.bk = None
 
@@ -42,7 +44,7 @@ def storedescs(obj):
             for nm, val in st.__dict__.items():
                 if isinstance(val, storedesc):
                     ret.append((nm, val))
-        t.__dict__["__didex_attr"] = ret
+        t.__didex_attr = ret
     return ret
 
 class datastore(object):