Fix a deadlock-prone test
Peter Rabbitson [Tue, 28 Dec 2010 11:25:00 +0000 (12:25 +0100)]
Changes
t/storage/txn.t

diff --git a/Changes b/Changes
index 18a67f9..d6500b3 100644 (file)
--- a/Changes
+++ b/Changes
@@ -4,6 +4,7 @@ Revision history for DBIx::Class
         - Bump forgotten Class::Accessor::Grouped core dependency
         - Promote forgotten Hash::Merge optdep to a hard requirement
         - Skip t/storage/error.t on smokers with leaking perls
+        - Fix t/storage/txn.t deadlocks on slower machines
 
 0.08125 2010-12-27 04:30 (UTC)
     * New Features / Changes
index 895eaaa..c4ecefd 100644 (file)
@@ -233,6 +233,12 @@ sub _test_forking_action {
   for my $pid (@pids) {
     waitpid ($pid, 0);
     ok (! $?, "Child $pid exit ok (pass $pass)");
+  }
+
+  # it is important to reap all children before checking the final db-state
+  # otherwise a deadlock may occur between the transactions running in the
+  # children and the query of the parent
+  for my $pid (@pids) {
     isa_ok ($schema->resultset ('Artist')->find ({ name => "forking action $pid" }), 'DBIx::Class::Row');
   }
 }