summaryrefslogtreecommitdiff
path: root/git-svn.perl
diff options
context:
space:
mode:
authorSergey Vlasov <vsu@altlinux.ru>2010-07-18 12:17:49 (GMT)
committerEric Wong <normalperson@yhbt.net>2010-07-19 06:31:04 (GMT)
commit8ac3a66702c43386eb580b7a1a8b1a31cd675327 (patch)
tree1338314e81762a0de30a65c39e7cb32777f7d33c /git-svn.perl
parent24e7a5be373c95f977bab4f0f41f736bb1d25075 (diff)
downloadgit-8ac3a66702c43386eb580b7a1a8b1a31cd675327.zip
git-8ac3a66702c43386eb580b7a1a8b1a31cd675327.tar.gz
git-8ac3a66702c43386eb580b7a1a8b1a31cd675327.tar.bz2
git-svn: write memoized data explicitly to avoid Storable bug
Apparently using the Storable module during global destruction is unsafe - there is a bug which can cause segmentation faults: http://rt.cpan.org/Public/Bug/Display.html?id=36087 http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=482355 The persistent memoization support introduced in commit 8bff7c538 relied on global destruction to write cached data, which was leading to segfaults in some Perl configurations. Calling Memoize::unmemoize in the END block forces the cache writeout to be performed earlier, thus avoiding the bug. Signed-off-by: Sergey Vlasov <vsu@altlinux.ru> Acked-by: Eric Wong <normalperson@yhbt.net>
Diffstat (limited to 'git-svn.perl')
-rwxr-xr-xgit-svn.perl16
1 files changed, 16 insertions, 0 deletions
diff --git a/git-svn.perl b/git-svn.perl
index 19d6848..c416358 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -3169,6 +3169,22 @@ sub has_no_changes {
LIST_CACHE => 'FAULT',
;
}
+
+ sub unmemoize_svn_mergeinfo_functions {
+ return if not $memoized;
+ $memoized = 0;
+
+ Memoize::unmemoize 'lookup_svn_merge';
+ Memoize::unmemoize 'check_cherry_pick';
+ Memoize::unmemoize 'has_no_changes';
+ }
+}
+
+END {
+ # Force cache writeout explicitly instead of waiting for
+ # global destruction to avoid segfault in Storable:
+ # http://rt.cpan.org/Public/Bug/Display.html?id=36087
+ unmemoize_svn_mergeinfo_functions();
}
sub parents_exclude {