X-Git-Url: http://dolda2000.com/gitweb/?p=didex.git;a=blobdiff_plain;f=didex%2Fdb.py;h=7435166cde372f7deff7d44b43b4d4d95d7bdb33;hp=75aee02bddf37ca71c7c993a86f491e4957ddb86;hb=fed04312788aef5e52e5549fe5325988d2bb56eb;hpb=8950191cebfc907b7ec9a643b71d6734d90f4e9b diff --git a/didex/db.py b/didex/db.py index 75aee02..7435166 100644 --- a/didex/db.py +++ b/didex/db.py @@ -2,6 +2,8 @@ import time, threading, struct from . import lib from bsddb3 import db as bd +__all__ = ["environment", "database"] + deadlock = bd.DBLockDeadlockError class environment(lib.closable): @@ -64,10 +66,18 @@ class txn(object): def __init__(self, env, flags=bd.DB_TXN_WRITE_NOSYNC): self.tx = env.txn_begin(None, flags) self.done = False + self.pcommit = set() def commit(self): self.done = True self.tx.commit(0) + def run1(list): + if len(list) > 0: + try: + list[0]() + finally: + run1(list[1:]) + run1(list(self.pcommit)) def abort(self): self.done = True @@ -81,6 +91,9 @@ class txn(object): self.abort() return False + def postcommit(self, fun): + self.pcommit.add(fun) + def txnfun(envfun): def fxf(fun): def wrapper(self, *args, tx=None, **kwargs):