Subject: Re: git svn import failure : write .git/Git_svn_hash_BmjclS: Bad file descriptor

From: Eric Wong <[email-masked]>
Date: Fri, 30 Jan 2015 00:22:47 +0000

Valery Yundin <[email-masked]> wrote:
> Hi,
> 
> Here you go:
> dfa72fdb96befbd790f623bb2909a347176753c2 is the first bad commit

Thank you.  Can you give the following patch a try?
I have not been able to reproduce the problem on my end.
If it doesn't work out, I might be out of ideas for a bit :/
Increasing --log-window-size will help you run longer without
the error, but that's not ideal as it can also eat memory.

-----------------------8<----------------------
From: Eric Wong <[email-masked]>
Subject: [PATCH] git-svn: destroy all tempfiles when reloading RA

This may fix the errors some users are seeing with:
"write .git/Git_svn_hash_XXXXXX: Bad file descriptor"

Thanks to Valery Yundin for helping bisect the problem introduced in
commit dfa72fdb96befbd790f623bb2909a347176753c2
(git-svn: reload RA every log-window-size)

Cc: Valery Yundin <[email-masked]>
Signed-off-by: Eric Wong <[email-masked]>
---
 perl/Git.pm        | 6 ++++++
 perl/Git/SVN/Ra.pm | 1 +
 2 files changed, 7 insertions(+)

diff --git a/perl/Git.pm b/perl/Git.pm
index b5905ee..698018e 100644
--- a/perl/Git.pm
+++ b/perl/Git.pm
@@ -1347,6 +1347,12 @@ sub temp_path {
 	$TEMP_FILES{$temp_fd}{fname};
 }
 
+sub temp_reset_all {
+	unlink values %TEMP_FILEMAP if %TEMP_FILEMAP;
+	%TEMP_FILEMAP = ();
+	%TEMP_FILES = ();
+}
+
 sub END {
 	unlink values %TEMP_FILEMAP if %TEMP_FILEMAP;
 }
diff --git a/perl/Git/SVN/Ra.pm b/perl/Git/SVN/Ra.pm
index 622535e..878679d 100644
--- a/perl/Git/SVN/Ra.pm
+++ b/perl/Git/SVN/Ra.pm
@@ -397,6 +397,7 @@ sub gs_fetch_loop_common {
 		$_[0] = undef;
 		$self = undef;
 		$RA = undef;
+		Git->temp_reset_all;
 		$gpool->clear;
 		$self = Git::SVN::Ra->new($ra_url);
 		$ra_invalid = undef;
-- 
EW