[PATCH] Fix resource cleanup ordering
Nathaniel Smith
njs at pobox.com
Fri May 21 07:32:01 UTC 2004
Currently resources are set up in an order that respects their
dependencies, but torn down in an effectively random order. This
patch fixes this, and adds a test to make sure that we don't
reintroduce the bug in the future (especially useful if we try to do
something cleverer with resources; the current algorithm is pretty
stupid).
For review.
-- Nathaniel
--
Damn the Solar System. Bad light; planets too distant; pestered with
comets; feeble contrivance; could make a better one myself.
-- Lord Jeffrey
-------------- next part --------------
? results.qmr
? qm/external/__init__.pyc
? qm/external/__init__.pyo
? qmdist/command/bdist_wininst.py
? tests/regress/resource_ordering
? tests/regress/QMTest/regression_database.pyc
? tests/regress/QMTest/selftest.pyc
? tests/regress/tuple1/QMTest/tuple_test.pyc
? tests/results_files/QMTest/results_file_database.pyc
? tests/results_files/QMTest/results_file_test.pyc
Index: ChangeLog
===================================================================
RCS file: /home/qm/Repository/qm/ChangeLog,v
retrieving revision 1.619
diff -u -r1.619 ChangeLog
--- ChangeLog 21 May 2004 07:22:22 -0000 1.619
+++ ChangeLog 21 May 2004 07:28:04 -0000
@@ -1,5 +1,14 @@
2004-05-21 Nathaniel Smith <njs at codesourcery.com>
+ * qm/test/target.py (Target.Start): Add instance variable
+ '__order_of_resources'.
+ (Target._FinishResourceSetUp): Record resource setup order in
+ it.
+ (Target.Stop): Use it to determine resource cleanup order.
+ * tests/regress/resource_ordering: New test.
+
+2004-05-21 Nathaniel Smith <njs at codesourcery.com>
+
* Makefile: Switch default copyright date to 2004.
* docbook: Likewise.
* docbook-chapter: Likewise.
Index: qm/test/target.py
===================================================================
RCS file: /home/qm/Repository/qm/qm/test/target.py,v
retrieving revision 1.26
diff -u -r1.26 target.py
--- qm/test/target.py 16 Mar 2004 05:10:56 -0000 1.26
+++ qm/test/target.py 21 May 2004 07:28:04 -0000
@@ -171,6 +171,7 @@
self.__engine = engine
# There are no resources available on this target yet.
self.__resources = {}
+ self.__order_of_resources = []
def Stop(self):
@@ -183,12 +184,15 @@
Derived classes may override this method."""
# Clean up any available resources.
- for (name, rop) in self.__resources.items():
+ self.__order_of_resources.reverse()
+ for name in self.__order_of_resources:
+ rop = self.__resources[name]
if rop and rop[1] == Result.PASS:
self._CleanUpResource(name, rop[0])
del self.__response_queue
del self.__engine
del self.__resources
+ del self.__order_of_resources
def RunTest(self, descriptor, context):
@@ -321,6 +325,7 @@
del properties[Context.ID_CONTEXT_PROPERTY]
rop = (resource, result.GetOutcome(), properties)
self.__resources[result.GetId()] = rop
+ self.__order_of_resources.append(result.GetId())
return rop
More information about the qmtest
mailing list