SASGIS

Веб-картография и навигация


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0001336SAS.Планета[All Projects] Багpublic14-06-2012 18:5910-10-2012 11:41
Reportervovoshka 
Assigned Tovasketsov 
PrioritynormalSeveritycrashReproducibilitysometimes
StatusclosedResolutionfixed 
PlatformWindowsOS7OS VersionUltimate
Product Version.Nightly 
Target Version120808Fixed in Version120808 
Summary0001336: Неверный дескриптор при выходе с центрируемой по GPS карте
Descriptionпри выходе с центрируемой по гпс карте вылет с ошибкой неверного дескриптора окна.
elf файл прилагается
Steps To Reproduceзапускаем программу
подключаем GPS
устанавливаем чекбокс "текущая позиция всегда в центре"
нажимаем кнопку "автоматически перемещать карту"
сразу закрываем программу
получаем ошибку.
Additional Informationвоспроизводится не каждый раз но довольно часто.
также наблюдался вылет при изменении параметров панели GPS и незамедлительном выходе. изменённые параметры при этом не сохраняются.
TagsNo tags attached.
Attached Files? file icon SASPlanet.Debug.elf [^] (73,195 bytes) 14-06-2012 18:59

- Relationships

-  Notes
(0007476)
vdemidov (manager)
19-06-2012 04:01

У меня на 4-х ядерном проце выдает ошибку при закрытии и без включенного центрирования. А вот на стареньком P4 никаких проблем не наблюдается.
(0007525)
vasketsov (manager)
19-06-2012 10:00

>на 4-х ядерном проце выдает ошибку при закрытии и без включенного центрирования
На CloseHandle (оно же NtClose) для thread?
А то у меня даже мыслей нету (((
(0007529)
vdemidov (manager)
19-06-2012 11:12

>На CloseHandle (оно же NtClose) для thread?
Вроде бы да. Сейчас проверить не могу. Причем стек именно такой как в приаттаченном файле.
(0008205)
vdemidov (manager)
07-08-2012 12:37

Ну ты блин даешь. Сначала создаешь тред с параметром
FPacketThread.FreeOnTerminate:=TRUE;
А потом пытаешься его убить в деструкторе
FreeAndNil(FPacketThread);
(0008206)
vdemidov (manager)
07-08-2012 12:40

Да и вообще, использование указателя на тред после того как поставил ему FreeOnTerminate:=TRUE;
это отличный способ стрельбы по своим ногам :)
(0008208)
vasketsov (manager)
07-08-2012 12:47

FPacketThread.OnTerminate:=InternalOnPacketThreadTerminate;
внутри обработчика FPacketThread должно подчищаться как бы.
(0008209)
vdemidov (manager)
07-08-2012 12:50

Ну и что. Вот ты получил ссылку на тред из переменной FPacketThread. Она скопировалась в стек. Проверилась. Не нулевая. В это время тред завершил работу и вызвал OnTerminate. Переменная FPacketThread обнилилась, но на стеке то лежит ненулевая ссылка. Вот в ней то деструктор второй раз и вызывается.
(0008210)
vdemidov (manager)
07-08-2012 12:51

Золотое правило. Если ты поставил FreeOnTerminate:=TRUE то забудь о существовании ссылки на этот объект. Она в любой момент может стать невалидной.
(0008211)
vasketsov (manager)
07-08-2012 13:01
edited on: 07-08-2012 13:06

Здесь это "золотое правило" не всегда применимо. Если поток завис, то Terminate его ничего не даст. А убить его надо, так что остаётся только "хэдшот в ногу" ))).
Если ты прав в этом конкретном случае, то обрамление обNILивания и FreeAndNil в критическую секцию решит проблему. Но у меня проблемы с воспроизведением этого.

А сбрасывать FreeOnTerminate тут нельзя, так как при отключении GPS (по кнопке на панели инструментов) просто испускается Terminate и не ждётся Free.

(0008212)
vdemidov (manager)
07-08-2012 13:20

Добавь критическую секцию, а я проверю. У меня дома на 4-х ядернике воспроизводится на ура.
(0008213)
vasketsov (manager)
07-08-2012 14:30

Критическая секция там уже есть, её надо только подключить.

Сейчас приаттачу EXE с захватом секции.

Если захочешь поиграться самостоятельно - в файле RUNTIME/vsagps_object.pas
надо сделать

- FreeAndNil(FPacketThread);
+ EnterCriticalSection(FCS_CloseHandle);
+ try
+ FreeAndNil(FPacketThread);
+ finally
+ LeaveCriticalSection(FCS_CloseHandle);
+ end;

и внутри InternalOnPacketThreadTerminate соответственно

- FPacketThread:=nil;
+ EnterCriticalSection(FCS_CloseHandle);
+ try
+ FPacketThread:=nil;
+ finally
+ LeaveCriticalSection(FCS_CloseHandle);
+ end;
(0008214)
vdemidov (manager)
07-08-2012 17:48

Совсем другое дело. Можно коммитить в репо и закрывать баг.
(0008215)
vasketsov (manager)
07-08-2012 18:10

Закоммитил. Приаттаченный EXE удалил.

- Users who viewed this issue
User List Anonymous (2512x)
Total Views 2512
Last View 21-11-2024 09:34

- Issue History
Date Modified Username Field Change
14-06-2012 18:59 vovoshka New Issue
14-06-2012 18:59 vovoshka File Added: SASPlanet.Debug.elf
15-06-2012 18:29 vdemidov Assigned To => vasketsov
15-06-2012 18:29 vdemidov Status new => assigned
18-06-2012 18:32 vdemidov Target Version => 120808
19-06-2012 04:01 vdemidov Note Added: 0007476
19-06-2012 10:00 vasketsov Note Added: 0007525
19-06-2012 11:12 vdemidov Note Added: 0007529
07-07-2012 13:30 gpsMax Summary неверный дескриптор при выходе с центрируемой по GPS карте => Неверный дескриптор при выходе с центрируемой по GPS карте
07-08-2012 12:37 vdemidov Note Added: 0008205
07-08-2012 12:40 vdemidov Note Added: 0008206
07-08-2012 12:47 vasketsov Note Added: 0008208
07-08-2012 12:50 vdemidov Note Added: 0008209
07-08-2012 12:51 vdemidov Note Added: 0008210
07-08-2012 13:01 vasketsov Note Added: 0008211
07-08-2012 13:06 vasketsov Note Edited: 0008211 View Revisions
07-08-2012 13:20 vdemidov Note Added: 0008212
07-08-2012 14:30 vasketsov Note Added: 0008213
07-08-2012 14:32 vasketsov File Added: SASPlanet_bug_1336.rar
07-08-2012 14:59 vdemidov Target Version 120808 => 121010
07-08-2012 17:48 vdemidov Note Added: 0008214
07-08-2012 18:10 vasketsov File Deleted: SASPlanet_bug_1336.rar
07-08-2012 18:10 vasketsov Note Added: 0008215
07-08-2012 18:11 vasketsov Status assigned => resolved
07-08-2012 18:11 vasketsov Fixed in Version => 121010
07-08-2012 18:11 vasketsov Resolution open => fixed
08-08-2012 17:12 vdemidov Fixed in Version 121010 => 120808
08-08-2012 17:12 vdemidov Target Version 121010 => 120808
10-10-2012 11:41 Tolik Status resolved => closed



Copyright © 2007 - 2024 SAS.Planet Team