SASGIS

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


View Issue Details Jump to Notes ] Issue History ] Print ]
IDProjectCategoryView StatusDate SubmittedLast Update
0002925SAS.Планета[All Projects] Багpublic12-12-2015 12:1208-01-2021 17:51
ReporterDjam 
Assigned Tozed 
PrioritynormalSeveritymajorReproducibilityalways
StatusresolvedResolutionfixed 
Platformwine 1.7.55OSROSA Linux Fresh R6OS Version2014.1
Product Version151111 
Target Version160606Fixed in Version160606 
Summary0002925: SAS.Planet 151111 не запускается под wine 1.7 и выше
DescriptionС версий 15xxx SAS.Planet перестал запускаться. При установке различных конфигураций OSWindows XP-Seven, в то время как версии <15xxx исправно продолжают работать.

Steps To Reproduce1. в ROSA Linux Fresh R6 с wine 1.7.55 скопировать в домашнюю директорию wine
$HOME/.wine/wine_c/ загрузить и распаковать дистрибутивы SAS.Planet 14xx и 15хх
2. запустить из папки SAS.Planet 14xx файл SASPlanet.exe убедиться что программа работает
3. запустить из папки с SAS.Planet 15xx SASPlanet.exe или SASPlanet.Unicode.exe убедиться в том что программа падает при запуске.

Additional Informationлог прилагаю
TagsNo tags attached.
Attached Files? file icon SASPlanet.Unicode.elf [^] (71,034 bytes) 12-12-2015 12:12

- Relationships

-  Notes
(0016930)
zed (manager)
13-12-2015 18:03

На wine 1.6 точно работало.
(0016931)
Djam (reporter)
13-12-2015 19:12

но 14е версии как работали так и работают.
(0016932)
zed (manager)
13-12-2015 19:13

И какие будут предложения?
(0016933)
Djam (reporter)
13-12-2015 19:23

по логам возможно понять что не так с песочницей?
Отладить под 1.7.x вином. Со своей стороны так как работаю в лине, могу потестировать, если что-то подправить надо, думаю смогу.

Жаль что нет нативной версии. Как и под lazarus(freepascal) но тут наверное бесполезно об этом думать
(0016934)
zed (manager)
13-12-2015 19:43

По логу видно, что это внешняя ошибка в ntdll.dll:

  2.2 Address : 7BC48889
  2.3 Module Name : ntdll.dll - (Wine ntdll)
  2.4 Module Version: 5.1.2600.2180
  2.5 Type : EExternalException
  2.6 Message : External exception C0000264.

Ошибка произошла в объекте синхронизации:


procedure TSynchronizerSRW.EndWrite;
begin
  FDll.ReleaseExclusive(@FLock);
end;


этот объект как раз и поставляется либой ntdll.dll:

  VDllHandle := GetModuleHandle('ntdll.dll');
  // Resource
  if (0 <> VDllHandle) then begin
    VInitializePtr := GetProcAddress(VDllHandle, 'RtlInitializeSRWLock');
    if VInitializePtr <> nil then begin
      // Vista and newer
      VAcquireExclusivePtr := GetProcAddress(VDllHandle, 'RtlAcquireSRWLockExclusive');
      VReleaseExclusivePtr := GetProcAddress(VDllHandle, 'RtlReleaseSRWLockExclusive');
      VAcquireSharedPtr := GetProcAddress(VDllHandle, 'RtlAcquireSRWLockShared');
      VReleaseSharedPtr := GetProcAddress(VDllHandle, 'RtlReleaseSRWLockShared');
...
(0016935)
Djam (reporter)
13-12-2015 20:08

Хм, странно, но от чего же ж в 14х версиях такого на замечено?
Хм, если я правильно понимаю, то это для Vista and newer?
Может какое-то исключение необходимо для обхода этой проблемы?
(0016936)
Djam (reporter)
13-12-2015 20:17

для чистоты эксперимента удалил старую песочницу и пересоздал новую, по дефолту поставил Windows7.

Ситуация ни как не изменилась.
14ххх - работает без проблем
151111 - крошится с теми же ошибками.
(0016939)
vdemidov (manager)
14-12-2015 09:06

Вариантов несколько. Или Wine врет насчет поддержки этого примитива синхронизации, или есть какие-то особенности его реализации, какие не знаю. Рекурсивного вызова нет, освобождения без захвата тоже. У меня идей нет. Можно, конечно при создании фабрики синхронизаторов пытаться создавать синхронизатор и тестировать его использование, но мне такое делать лень. Если кому сильно надо работа под Wine, то жду пул реквеста или предложения с оплатой.
(0016940)
zed (manager)
14-12-2015 10:02

Можете попробовать PlayOnLinux - если не ошибаюсь, эта штука позволяет выбрать подходящую версию wine для запуска приложения.

Можете ещё попробовать в wine выставить конфигурацию Win2000 если там такая есть.
(0016943)
Djam (reporter)
14-12-2015 12:49

Хм, ничего не изменилось:
Operating System:
--------------------------------------
  6.1 Type : Microsoft Windows 2000
  6.2 Build # : 2195
  6.3 Update : Service Pack 4
  6.4 Language: Russian
  6.5 Charset : 204

Application:
-------------------------------------------------------
  1.1 Start Date : Mon, 14 Dec 2015 15:47:11 +0300
  1.2 Name/Description: SASPlanet.Unicode.exe
  1.3 Version Number : 15.11.11.9233
  1.4 Parameters :
  1.5 Compilation Date: Wed, 11 Nov 2015 15:55:30 +0300
  1.6 Up Time : 5 seconds

Exception:
-----------------------------------------------------
  2.1 Date : Mon, 14 Dec 2015 15:47:16 +0300
  2.2 Address : 7BC48889
  2.3 Module Name : ntdll.dll - (Wine ntdll)
  2.4 Module Version: 5.1.2600.2180
  2.5 Type : EExternalException
  2.6 Message : External exception C0000264.
  2.7 ID : 0D21
  2.8 Count : 1
  2.9 Status : New
  2.10 Note :

User:
-------------------------------------------------------
  3.5 Privileges: SeChangeNotifyPrivilege - ON
                  SeSecurityPrivilege - OFF
                  SeBackupPrivilege - OFF
                  SeRestorePrivilege - OFF
                  SeSystemtimePrivilege - OFF
                  SeShutdownPrivilege - OFF
                  SeRemoteShutdownPrivilege - OFF
                  SeTakeOwnershipPrivilege - OFF
                  SeDebugPrivilege - OFF
                  SeSystemEnvironmentPrivilege - OFF
                  SeSystemProfilePrivilege - OFF
                  SeProfileSingleProcessPrivilege - OFF
                  SeIncreaseBasePriorityPrivilege - OFF
                  SeLoadDriverPrivilege - ON
                  SeCreatePagefilePrivilege - OFF
                  SeIncreaseQuotaPrivilege - OFF
                  SeUndockPrivilege - OFF
                  SeManageVolumePrivilege - OFF
                  SeImpersonatePrivilege - ON
                  SeCreateGlobalPrivilege - ON

Computer:
-----------------------------------------------------
  5.3 Free Memory : 5256 Mb
  5.5 Free Disk : 10,17 Gb
  5.7 Processor : Intel(R) Pentium(R) 4 CPU 2.40GHz
  5.8 Display Mode: 1366 x 768, 32 bit
  5.9 Display DPI : 96
  5.10 Video Card : Wine Display Adapter (driver )


все также 14хх без проблем, 15ххх - проблема
(0016963)
zed (manager)
26-12-2015 19:39

Немного потестил SAS под wine в Ubuntu 14.04 через PlayOnLinux.

Версия 1.8.rc4 падает с такой же ошибкой, что и 1.7.55. При этом в логе wine пишется пара строчек:

> err:win:DefWindowProcA called for other process window 0x10020
> fixme:win:EnumDisplayDevicesW ((null),0,0x15ddac8,0x00000000), stub!

Версии 1.6.2 и 1.4.1 работают без ошибок. При этом 1.6 безбожно тормозит и реально пользоваться можно только на версии 1.4.
(0016964)
vdemidov (manager)
26-12-2015 19:53

Можешь попробовать принудительно включить использование только самых простых примитивов синхронизации и проверить. Если дело в них, то можно сделать настройку, которая будет вызывать переход на них пусть и с потерей производительности.
(0016965)
zed (manager)
26-12-2015 19:55

Как это включить? Т.е. там же по-моему это не получится сделать изменив одну строчку?
(0016966)
vdemidov (manager)
26-12-2015 21:54

Ну, в одну строку нет, но и не сильно много. Заменить этот код в конструкторе

  inherited Create(
    MakeSyncVariable(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncSymmetrical(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncSymmetricalRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncStd(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncStdRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncBig(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncBigRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters)
  );

на

  inherited Create(
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters),
    MakeSyncVariableRecursive(APerfList, AUseDebug, AUseDestroyCounters, AUseBeginEndCounters)
  );

Тоесть для всех типов синхронизаторов будет использоваться критическая секция со спинлоком TSynchronizerCSSCFactory
(0016967)
zed (manager)
27-12-2015 09:00

Да, это решает проблему. И, кстати, под 1.8 тормозов как на 1.6 не наблюдается.

Значит, нужно детектить версию ОС, и если там XP и ниже, использовать критическую секцию?
(0016968)
vdemidov (manager)
27-12-2015 09:12

Не обязательно именно критическую секцию. Желательно проверить другие примитивы. Главное не путать допускающие рекурсивный вызов с не допускающими.
А еще вместо определения ОС можно в процессе создания фабрик создавать тестовый экземпляр и пробовать его лочить, и если вылетел ексепшен, то не пользоваться этой фабрикой.
Если у тебя есть время и возможность, было бы хорошо, если бы ты этим занялся.
(0016969)
zed (manager)
27-12-2015 11:01

Похоже, достаточно сделать проверку на версию ОС в одном месте, чтобы оно даже не пыталось создать примитив, заведомо не существующий в данной ОС.

Теперь, под wine 1.8, если выбрать профиль WinXP, то всё работает, а если Vista и выше - нет.

Djam, после тестов можете попробовать сообщить разработчикам wine о проблеме с SRW локом.
(0020041)
zed (manager)
08-01-2021 17:51

Wine 5.0 по дефолту представляется как Windows 7 и с AV уже не падает, но в консоль всё-равно пишет ошибки, связанные с этим локом:

0009:err:sync:fast_release_srw_exclusive Lock 0x331ccc0 is not owned exclusive! (0x1)
0009:err:sync:fast_release_srw_exclusive Lock 0x331cd60 is not owned exclusive! (0x1)
0009:err:sync:fast_release_srw_exclusive Lock 0x331ce00 is not owned exclusive! (0x1)
0009:err:sync:fast_release_srw_exclusive Lock 0x331cea0 is not owned exclusive! (0x1)
0009:err:sync:fast_release_srw_exclusive Lock 0xeeea670 is not owned exclusive! (0x1)

Поэтому, отключил этот лок, если программа запущена под wine.

- Users who viewed this issue
User List Anonymous (5249x), mrjack (2x), ingener (1x), vdemidov (26x), zed (38x), leremin (2x), netsky (4x), NK0 (1x), vitiek0 (1x), Tolik (5x), viktor6 (1x), Garl (2x), bk99 (1x), lokrifa (1x), Djam (22x), GunSmoker (1x)
Total Views 5357
Last View 29-03-2024 06:58

- Issue History
Date Modified Username Field Change
12-12-2015 12:12 Djam New Issue
12-12-2015 12:12 Djam File Added: SASPlanet.Unicode.elf
13-12-2015 18:03 zed Note Added: 0016930
13-12-2015 19:12 Djam Note Added: 0016931
13-12-2015 19:13 zed Note Added: 0016932
13-12-2015 19:23 Djam Note Added: 0016933
13-12-2015 19:43 zed Note Added: 0016934
13-12-2015 20:08 Djam Note Added: 0016935
13-12-2015 20:17 Djam Note Added: 0016936
14-12-2015 09:06 vdemidov Note Added: 0016939
14-12-2015 10:02 zed Note Added: 0016940
14-12-2015 12:49 Djam Note Added: 0016943
16-12-2015 10:16 vdemidov Status new => confirmed
16-12-2015 10:16 vdemidov Target Version => 30xxxx.Vip
26-12-2015 19:39 zed Note Added: 0016963
26-12-2015 19:53 vdemidov Note Added: 0016964
26-12-2015 19:55 zed Note Added: 0016965
26-12-2015 21:54 vdemidov Note Added: 0016966
27-12-2015 09:00 zed Note Added: 0016967
27-12-2015 09:01 zed Summary SAS.Planet 151111 не запускается под wine => SAS.Planet 151111 не запускается под wine 1.7 и выше
27-12-2015 09:12 vdemidov Note Added: 0016968
27-12-2015 11:01 zed Note Added: 0016969
27-12-2015 14:32 zed Status confirmed => feedback
27-12-2015 14:32 zed Target Version 30xxxx.Vip => 160606
03-01-2016 21:37 zed Status feedback => resolved
03-01-2016 21:37 zed Fixed in Version => 160606
03-01-2016 21:37 zed Resolution open => fixed
03-01-2016 21:37 zed Assigned To => zed
08-01-2021 17:51 zed Note Added: 0020041



Copyright © 2007 - 2024 SAS.Planet Team