Discussion:
Фигня с архивами
(слишком старое сообщение для ответа)
Alexey Korop
2005-03-16 05:37:06 UTC
Permalink
Привет, All!

Я попытался разобраться, почему новый DN/2 у многих падает в архивах. Hачал
тыкаться во все подряд архивы, какие у меня есть, нашёл такой, в котором
устойчиво падает. В нём же при тех же операциях ни beta16, ни DN OSP 490 не
падают.
Дошагал до падения и слегка обалдел. Почему новый DN падает, вроде,
понятно. А вот почему не падают все остальные - этого я понять не могу.

Вот фрагмент из ARCVIEW.PAS, TArcDrive.GetDirectory, ближе к концу. Это из
форматированного DN/2, в beta13 DN/2 и в DN OSP 490 то же самое, с точностью до
форматирования.

{else FD^.Insert(F);}
else
FD^.AtInsert(si, F);
end
else
Continue;
if AFiles^.Search(F, si) then
DelFileRec(F)
{else AFiles^.Insert(F);}
else
AFiles^.AtInsert(si, F);
end;

NoMemory := MAvail <= MemReq;
FreeSpace := '';
TotalInfo := TTL;

История падения такая:

FD^.AtInsert(si, F);
if AFiles^.Search(F, si) then
DelFileRec(F)

Перед этим F^.UsageCount=1, так что DelFileRec освобождает память, а в FD^
ссылка на эту память остаётся.

По-моему, это заведомый баг в программе. Почему оно не падает в других
версиях - я не понимаю.

Падение появляется после патча mv50225a.dif (переименованный
dn2a08-archivers_optimization.patch):

======== OS/2 clipboard start
изменено определено LIM и SQZ (longint вместо string)
вычищает всякий мусор (ненужные использования строковых переменных)
оптимизировано добавление файла в ArcDrive
======== OS/2 clipboard end

Похоже на то, что в программе всегда была заложена эта мина, а теперь
Максим на неё наступил. Я ему отписал, пусть попробует разминировать.

Hу а пока следует откатить mv50225a.dif.

С уважением, Alexey.

...В действительности всё совсем не так, как на самом деле.
Jaroslaw Osadtchiy
2005-03-20 11:28:50 UTC
Permalink
0000 OS/2 Доpогой(ая) Alexey!

16 Mar 05 08:37, Alexey Korop пишет к All:

AK> Похоже на то, что в программе всегда была заложена эта мина, а
AK> теперь Максим на неё наступил. Я ему отписал, пусть попробует
AK> разминировать.

AK> Hу а пока следует откатить mv50225a.dif.

Вообще, этот патч (точнее, та его часть, котоpая относится к arcview.pas) -
это как pаз та, как Ты любишь выpажаться, кака, котpую нам однозначно не
следует тащить в pот. Потому как pеальной пользы от этих изменений нет, а
потенциальным источником глюков они могут послужить запpосто (и послужили
таки).

С наилучшими пожеланиями, Яpослав aka |+|+|+
+| +|
(2:5030/82.53 aka 2:5030/415.17)

Loading...