{Tim] ... > Curious: ZODB 3.4's and Zope 2.8's and Zope3's test suites all let this > one slip by. To provoke this, looks like Zope3 had to do > transaction.begin() before it opened any connections. Nothing wrong with > that, it's just unusual -- at least for human-written code <wink>.
Jim, I think this may point to a deeper, older bug in ThreadTransactionManager (TTM): if no synchronizers have been registered with a thread by the time TTM needs to create a Transaction object, TTM passes None as the `synchronizers` argument to the Transaction constructor. That Transaction object will then never learn about any synchronizers that may register with TTM after this point. So, e.g., in start with a clean slate transaction.begin() cn = DB.open(whatever) ... transaction.commit() cn's afterCompletion() method won't get called. The base transaction manager doesn't have this problem (if problem it is ...), it's specific to the thread transaction manager. _______________________________________________ For more information about ZODB, see the ZODB Wiki: http://www.zope.org/Wikis/ZODB/ ZODB-Dev mailing list - ZODB-Dev@zope.org http://mail.zope.org/mailman/listinfo/zodb-dev