[PATCH 2/2] git-svn: ignore SIGPIPE
- From
Roman Kagan <rkagan@mail.ru>
- Date
- Apr 2, 2012, 16:13 UTC
- Message-ID
- <af5d9c78d04ebc78ebd3636f7912b675b3c1f19d.1333381684.git.rkagan@mail.ru>
- In-Reply-To
- <cover.1333381684.git.rkagan@mail.ru>
In HTTP with keep-alive it's not uncommon for the client to notice that the server decided to stop maintaining the current connection only when sending a new request. This naturally results in -EPIPE and possibly SIGPIPE.
The subversion library itself makes no provision for SIGPIPE. Some combinations of the underlying libraries do (typically SIG_IGN-ing it), some don't.
Presumably for that reason all subversion commands set SIGPIPE to SIG_IGN early in their main()-s.
So should we.
This, together with the previous patch, fixes the notorious "git-svn died of signal 13" problem (see e.g. http://thread.gmane.org/gmane.comp.version-control.git/134936).
Signed-off-by: Roman Kagan <rkagan@mail.ru> --- git-svn.perl | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl index 570504c..aa14564 100755 --- a/git-svn.perl +++ b/git-svn.perl @@ -36,6 +36,11 @@ $ENV{TZ} = 'UTC'; $| = 1; # unbuffer STDOUT sub fatal (@) { print STDERR "@_\n"; exit 1 } + +# All SVN commands do it. Otherwise we may die on SIGPIPE when the remote +# repository decides to close the connection which we expect to be kept alive. +$SIG{PIPE} = 'IGNORE'; + sub _req_svn { require SVN::Core; # use()-ing this causes segfaults for me... *shrug* require SVN::Ra;
-- 1.7.7.6