SASGIS - SAS.Планета
View Issue Details
0002044SAS.Планета[All Projects] Багpublic21-07-2013 12:4503-11-2013 19:25
Papazol 
vdemidov 
normaltweakhave not tried
resolvedfixed 
WindowsXPProfessional SP3
.Nightly 
131111131111 
0002044: Неожиданно прекращается загрузка в режиме Интернет+Кэш
В указанном режиме двигаюсь по снимку. Сначала тайлы нормально скачиваются и появляются на экране. Через некоторое время (не уверен, что дело тут во времени) после очередного сдвига карты пустые тайлы остаются пустыми, программа пишет, что осталось 0, дальнейшее движение карты не приводит к заполнению пустых тайлов. Однако с помощью Insert+ЛКМ тайлы загружаются. Если закрыть программу, а затем снова открыть, загрузка возобновляется.
Используется кэш Беркли неверсионный.
No tags attached.
parent of 0002068resolved vdemidov Избавиться от пересоздания IBitmapProvider в слоях 
? SASPlanet.Debug.elf (74,974) 02-08-2013 11:12
http://www.sasgis.org/mantis/file_download.php?file_id=1459&type=bug
Issue History
21-07-2013 12:45PapazolNew Issue
21-07-2013 13:23GarlNote Added: 0012157
31-07-2013 08:22vdemidovNote Added: 0012246
31-07-2013 08:22vdemidovStatusnew => feedback
02-08-2013 11:12vdemidovFile Added: SASPlanet.Debug.elf
02-08-2013 11:13vdemidovNote Added: 0012278
02-08-2013 11:13vdemidovStatusfeedback => confirmed
02-08-2013 11:13vdemidovTarget Version => 131111
07-08-2013 08:20vdemidovNote Added: 0012297
07-08-2013 08:28vdemidovAssigned To => vdemidov
07-08-2013 08:28vdemidovStatusconfirmed => assigned
09-08-2013 06:58vdemidovRelationship addedparent of 0002068
09-08-2013 10:46vasketsovNote Added: 0012315
09-08-2013 10:57vdemidovNote Added: 0012316
09-08-2013 11:06vasketsovNote Added: 0012317
09-08-2013 11:15vdemidovNote Added: 0012318
09-08-2013 11:16vdemidovNote Added: 0012319
03-11-2013 19:25vdemidovStatusassigned => resolved
03-11-2013 19:25vdemidovFixed in Version => 131111
03-11-2013 19:25vdemidovResolutionopen => fixed

Notes
(0012157)
Garl   
21-07-2013 13:23   
такое поведение замечено не только на беркли
при сдвиге карт ыопределяется что надо скачать 32 тайла, затем сдвигам обратно (там где надо скачать 2-3 тайа) и бац! осталось скачать 0 тайлов!!!
хотя 2-3 так и осталиь не скачаными...
(0012246)
vdemidov   
31-07-2013 08:22   
Нужно воспроизвести в дебажной версии. Сейчас там должны перехватываться ексепшены в фоновых потоках.
(0012278)
vdemidov   
02-08-2013 11:13   
Кажись у меня самого воспроизвелось.
(0012297)
vdemidov   
07-08-2013 08:20   
Итог изысканий: нужно или добавлять в листенеры синхронизазаторы, чтобы избежать вызова полсле того как владелец начал удаляться, или по возможности избегать ситуаций, когда удаляется владелец листенера, сейчас это происходит при пересоздании IBitmapProvider-ов, которое чаще всего происходит при обновлении векторных тайлов. Второй вариант мне нравится больше, тем более что он совпадает с моими планами, но и первым придется скорее всего воспользоваться.
(0012315)
vasketsov   
09-08-2013 10:46   
Может быть по первому варианту тебе даже удастся сделать один легковесный объект типа

TCancellableOperation = record
private
  FOperationID: Integer;
  FCancelNotifier: INotifierOperation;
strict private
  function GetIsCancelled: Boolean;
public
  property IsCancelled: Boolean read GetIsCancelled;
end;

или аналогичный интерфейсный объект, чтобы его одного передавать как const вместо пары

const AOperationID: Integer;
const ACancelNotifier: INotifierOperation;

?

Смысл в том, чтобы передавать всё для отбоя в рамках одной сущности, и чтобы она же проверяла сама себя внутри IsCancelled на кончину, без ненужного вытаскивания наружу OperationID и CancelNotifier.

А возможно и байт как флаг смерти владельца туда можно будет всунуть.
(0012316)
vdemidov   
09-08-2013 10:57   
Не, я такого делать не хочу. Пару
const AOperationID: Integer;
const ACancelNotifier: INotifierOperation;
можно передать в любую dll на любом языке без проблем, а тот рекорд, который предлагаешь ты чисто делфовая структура, а интерфейсный объект ИМХО не стоит создавать каждый раз, но вообще уже есть такая вещь называется INotifierOneOperation.
(0012317)
vasketsov   
09-08-2013 11:06   
>можно передать в любую dll на любом языке без проблем
Если честно - не вижу принципиальных отличий в передаче. Там SizeOf как у обычного record-а, все эти IsCancelled вообще никуда не упираются. При передаче только как const вообще никаких проблем не прогнозируется.

>вообще уже есть такая вещь называется INotifierOneOperation
А почему тогда он в тех же экспортах не используется, ведь экспорт всегда как одна операция прерывается?
(0012318)
vdemidov   
09-08-2013 11:15   
>>можно передать в любую dll на любом языке без проблем
>Если честно - не вижу принципиальных отличий в передаче. Там SizeOf как у обычного record-а, все эти IsCancelled вообще никуда не упираются. При передаче только как const вообще никаких проблем не прогнозируется.
Может быть, но мне лень переделывать.

>А почему тогда он в тех же экспортах не используется, ведь экспорт всегда как одна операция прерывается?
Потому что позже появилось. Да и даунлодер и тп. расчитаны именно на пару AOperationID, ACancelNotifier.
(0012319)
vdemidov   
09-08-2013 11:16   
PS: В данном инциденте это полный оффтопик ибо никакого отношения к проблеме не имеет.