From: Thomas Rast
Date: Mon, 30 Dec 2013 12:20:30 GMT
Subject: Re: [PATCH] git-svn: workaround for a bug in svn serf backend
Message-ID: <87lhz2o7ht.fsf@thomasrast.ch>
In-Reply-To: <1388059524-4864-1-git-send-email-rkagan@mail.ru>
Roman Kagan writes:
> + # workaround for a bug in svn serf backend (v1.8.5 and below):
> + # store 3d argument to ->add_file() in a local variable, to make it
> + # have the same lifetime as $fbat
> + my $upa = $self->url_path($m->{file_a});
> my $fbat = $self->add_file($self->repo_path($m->{file_b}), $pbat,
> - $self->url_path($m->{file_a}), $self->{r});
> + $upa, $self->{r});
Hmm, now that you put it that way, I wonder if the patch is correct.
Let me first rephrase the problem to verify that I understand the issue:
$fbat keeps a pointer to the $upa string, without maintaining a
reference to it. When $fbat is destroyed, it needs this string, so we
must ensure that the lifetime of $upa is at least as long as that of
$fbat.
However, does Perl make any guarantees as to the order in which local
variables are unreferenced and then destroyed? I can't find any such
guarantee.
In the absence of such, wouldn't we have to keep $upa in an outer,
separate scope to ensure that $fbat is destroyed first?
--
Thomas Rast
tr@thomasrast.ch