Anonymous | Login | Signup for a new account | 21-11-24 13:36 UTC |
All Projects | SAS.Планета | Домен, сайт, форум, багтрекер | Доработка карты (ZMP) | Переводы и локализации | Прочее |
My View | View Issues | Change Log | Roadmap | Search |
View Issue Details [ Jump to Notes ] | [ Issue History ] [ Print ] | ||||||||
ID | Project | Category | View Status | Date Submitted | Last Update | ||||
0001336 | SAS.Планета | [All Projects] Баг | public | 14-06-2012 18:59 | 10-10-2012 11:41 | ||||
Reporter | vovoshka | ||||||||
Assigned To | vasketsov | ||||||||
Priority | normal | Severity | crash | Reproducibility | sometimes | ||||
Status | closed | Resolution | fixed | ||||||
Platform | Windows | OS | 7 | OS Version | Ultimate | ||||
Product Version | .Nightly | ||||||||
Target Version | 120808 | Fixed in Version | 120808 | ||||||
Summary | 0001336: Неверный дескриптор при выходе с центрируемой по GPS карте | ||||||||
Description | при выходе с центрируемой по гпс карте вылет с ошибкой неверного дескриптора окна. elf файл прилагается | ||||||||
Steps To Reproduce | запускаем программу подключаем GPS устанавливаем чекбокс "текущая позиция всегда в центре" нажимаем кнопку "автоматически перемещать карту" сразу закрываем программу получаем ошибку. | ||||||||
Additional Information | воспроизводится не каждый раз но довольно часто. также наблюдался вылет при изменении параметров панели GPS и незамедлительном выходе. изменённые параметры при этом не сохраняются. | ||||||||
Tags | No tags attached. | ||||||||
Attached Files | SASPlanet.Debug.elf [^] (73,195 bytes) 14-06-2012 18:59 | ||||||||
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 удалил. |
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 |
My View | View Issues | Change Log | Roadmap | Search |
Copyright © 2007 - 2024 SAS.Planet Team |