diff options
author | Sergey Vlasov <vsu@altlinux.ru> | 2010-07-18 16:17:49 +0400 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2010-07-19 06:31:04 +0000 |
commit | 8ac3a66702c43386eb580b7a1a8b1a31cd675327 (patch) | |
tree | 1338314e81762a0de30a65c39e7cb32777f7d33c /git-svn.perl | |
parent | 24e7a5be373c95f977bab4f0f41f736bb1d25075 (diff) | |
download | git-8ac3a66702c43386eb580b7a1a8b1a31cd675327.tar.gz git-8ac3a66702c43386eb580b7a1a8b1a31cd675327.tar.xz |
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-x | git-svn.perl | 16 |
1 files changed, 16 insertions, 0 deletions
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 { |