[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