Notes |
|
(0017218)
|
zed
|
19-05-2016 10:16
|
|
Думаю впереть вот такую конструкцию для фикса AV конкретно в TTileDownloaderSimple:
procedure TTileDownloaderSimple.OnConfigChange;
var
VTileDownloaderConfigStatic: ITileDownloaderConfigStatic;
begin
if not Assigned(FTileDownloaderConfig) then begin
{$MESSAGE HINT 'http://www.sasgis.org/mantis/view.php?id=3029'}
Exit;
end;
VTileDownloaderConfigStatic := FTileDownloaderConfig.GetStatic;
...
Или есть лучший вариант? |
|
|
|
Да, есть такая проблема. И я не знаю как ее решить. Переделка TNotifierBase.Notify с запихиванием нотификации под лок, только добавит возможность дедлока. |
|
|
|
> Думаю впереть вот такую конструкцию для фикса AV конкретно в TTileDownloaderSimple
Боюсь это проблему, только сделает чуть-чуть более редкой, но не решит. |
|
|
|
Как вариант убрать из TTileDownloaderSimple слежение за конфигом, а следить за ним на уровень выше и при изменении пере создавать весь массив. |
|
|
(0017222)
|
zed
|
19-05-2016 10:38
|
|
Т.е. в TTileDownloaderList.OnConfigChange выкинуть всю ту логику с копированием, а в TTileDownloaderSimple в качестве параметра передавать ITileDownloaderConfigStatic? Можно попробовать. Главное, чтобы в будущем ни у кого не возникло желания сделать оптимизацию и перенести часть слежения обратно в TTileDownloaderSimple. Придётся писать предупреждение от такого. |
|
|
|
>Т.е. в TTileDownloaderList.OnConfigChange выкинуть всю ту логику с копированием, а в TTileDownloaderSimple в качестве параметра передавать ITileDownloaderConfigStatic?
Ага.
Но вообще, нужно что-то придумывать с листенерами и нотифаерами. Я пытался сделать в листенере метод Disconnect, который вызывать в деструкторе класса, который этот листенер подписывает, но потом понял, что это тоже только маскирует часть ошибок. Пока пришел к тому, что пытаюсь всех подписчиков сделать максимально долгоживущими. |
|