Etienne Labuschagne wrote at 2003-7-16 00:48 +0200:
... The above is abbreviated, but I can send you a more verbose list with stack traces for each step. I printed out the threading.currentThread().getName()s every step to check which threads are doing what.
I am not really interested in a detailed log :-) "Storage._transaction" is set in "tpc_begin" and reset in "tpc_abort" and "tpc_finish". When the check "transaction is self._transaction" fails, look at "self._transaction". When is is None, then someone (maybe a different thread) called "tpc_abort" or "tpc_finish" or (not likely "tpc_begin" was not executed). When it is not None, then its value specifies the transaction that most recently executed "tpc_begin". This must be a different thread (since there is one transaction per thread and "transaction" is ours). Dieter