Re: [PATCH] git-svn: workaround for a bug in svn serf backend
- From
Thomas Rast <tr@thomasrast.ch>
- Date
- Dec 30, 2013, 12:20 UTC
- Message-ID
- <87lhz2o7ht.fsf@thomasrast.ch>
- In-Reply-To
- <1388059524-4864-1-git-send-email-rkagan@mail.ru>
Roman Kagan <rkagan@mail.ru> writes:
Show 7 quoted lines
> + # 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