From 8ac3a66702c43386eb580b7a1a8b1a31cd675327 Mon Sep 17 00:00:00 2001 From: Sergey Vlasov Date: Sun, 18 Jul 2010 16:17:49 +0400 Subject: [PATCH] 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 Acked-by: Eric Wong --- git-svn.perl | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/git-svn.perl b/git-svn.perl index 19d6848d0..c4163584a 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 { -- 2.30.2