[PATCH] Don't clean temporary files in child processes

Niko Tyni ntyni at debian.org
Mon Aug 23 05:15:15 UTC 2010


As of SQLite 3.7.0, write locks try to stat() the database
file and fail with a 'Disk I/O error' if it is missing. This
breaks those tests that fork child processes (namely 08_busy.t
and t/28_schemachange.t) because the child process removes
the database file in the END block.

The fix is to disable the clean() function for child processes.

See <http://bugs.debian.org/591111>
---
 t/lib/Test.pm |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/t/lib/Test.pm b/t/lib/Test.pm
index 80e50ce..8d1be25 100644
--- a/t/lib/Test.pm
+++ b/t/lib/Test.pm
@@ -7,6 +7,7 @@ use Exporter   ();
 use File::Spec ();
 use Test::More ();
 
+my $parent;
 use vars qw{$VERSION @ISA @EXPORT @CALL_FUNCS};
 BEGIN {
 	$VERSION = '1.29';
@@ -15,6 +16,7 @@ BEGIN {
 
 	# Allow tests to load modules bundled in /inc
 	unshift @INC, 'inc';
+	$parent = $$;
 }
 
 # Always load the DBI module
@@ -22,6 +24,7 @@ use DBI ();
 
 # Delete temporary files
 sub clean {
+	return if $$ != $parent;
 	unlink( 'foo'         );
 	unlink( 'foo-journal' );
 }
-- 
1.7.1


--n8g4imXOkfNTN/H1--





More information about the pkg-perl-maintainers mailing list