[sisyphus] I: updated package - subversion
Vladimir Lettiev
=?iso-8859-1?q?crux_=CE=C1_gorodmasterov=2Ecom?=
Сб Ноя 26 12:12:03 MSK 2005
Dmitry V. Levin пишет:
> On Sat, Nov 26, 2005 at 12:08:43AM +0200, Sviatoslav Sviridov wrote:
>> Dmitry V. Levin wrote:
>>> On Wed, Aug 17, 2005 at 12:51:32AM +0300, Sviataslau Svirydau
>>>> проблему, которую я описывал в
>>>> http://lists.altlinux.ru/pipermail/sisyphus/2005-August/066367.html
>>
>> Проблема до сих пор не решена. Помогите кто чем может :) Сам я в
>> разумные сроки исправить не смогу...
>
> Тут нужен специалист по перлу более высокого уровня.
Алексей не откликается, я попробую ;)
...
> У меня тоже не получилось, даже --query-repackage --build='--with
> swig_pl' не помогло (какой-то макрос не был определён), пришлось в
> spec-файл залезть.
>
> В результате имеем то же самое (лишь номер строки изменился): Use of
> uninitialized value in string eq at
> /usr/src/tmp/subversion-buildroot/usr/lib/perl5/vendor_perl/i386-linux/SVN/Core.pm
> line 410 during global destruction.
Пока лишь могу попытаться объяснить причину ошибки. Фикс теоретически
готов, но надо время затестить (уж больно долго собирается subversion).
Причина ошибки, вот это такое изменение в коде Core.pm:
+our $gpool = SVN::Pool->new_default;
+SVN::Core::utf_initialize($gpool);
+
Добавляется создание объекта SVN::Pool. А значит и все warnnings
связанные с его отработкой.
После отработки кода собиратель мусора унижтожает все объекты: при
нормальном завершении работы выполняются код END {} затем код процедуры
DESTROY модуля SVN::Pool.
Что будет если запустить проверку кода с помощью `perl -c`? Выполнятся
только секции BEGIN{}, CHECK{} и после perl выполнит процедуру DESTROY
модуля (если требуется). Т.о. из цепочки выпала секция END{}, которая и
обеспечивала нормальное выполнение кода процедуры DESTROY в SVN::Pool.
Похоже, что в perl.req работает такой же принцип проверки (без вызова
END{}).
Самый простой фикс, добавить строчку в тело SVN::Pool :
no warnings 'uninitialized';
Чуть сложнее и наверное корректнее (пока не проверил):
--- Core.pm.old 2005-11-26 11:13:58 +0300
+++ Core.pm 2005-11-26 12:03:11 +0300
@@ -406,6 +406,7 @@
sub DESTROY {
return if $globaldestroy;
my $self = shift;
+ return unless ($$self && $SVN::_Core::current_pool);
if ($$self eq $SVN::_Core::current_pool) {
$SVN::_Core::current_pool = pop @POOLSTACK;
}
--
С уважением, Владимир Леттиев aka crux <crux на gorodmasterov.com>
Подробная информация о списке рассылки Sisyphus