Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 4324 - Ошибка в реализации InitiateSystemShutdownExW   Make a simular bug
Summary: Ошибка в реализации InitiateSystemShutdownExW
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Консоль ; Вызов программ (show other bugs)
Version: 1.0.11
Hardware: PC All
: P2 critical
Target Milestone: ---
Assignee: Илья Шпигорь
QA Contact: Денис Баранов
URL:
Whiteboard:
Keywords:
Depends on: 4171
Blocks: 3932
  Show dependency treegraph
 
In work:
Reported: 2009-09-30 12:38 MSD by Илья Шпигорь
Modified: 2010-10-04 11:53 MSD (History)
3 users (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Илья Шпигорь 2009-09-30 12:38:11 MSD
Сейчас для реализации InitiateSystemShutdownExW используется запрос к wineserver kill_wineserver. При его выполнении wineserver убивается, но остаются связанные с ним процессы:

shpigor  16054  1.2  0.4 2927584 9544 ?        Sl   12:26   0:00 C:\windows\system32\winedevice.exe MountMgr
shpigor  16073  0.8  0.5 2928428 10348 ?       Sl   12:26   0:00 C:\windows\system32\winedevice.exe
shpigor  16086  0.6  0.4 2927648 9532 ?        Sl   12:26   0:00 C:\windows\system32\winedevice.exe Parport
shpigor  16094  0.7  0.4 2927584 9532 ?        Sl   12:26   0:00 C:\windows\system32\winedevice.exe Usbhub

При многократном выполнении InitiateSystemShutdownExW, wine вообще перестает запускаться (возможно заканчиваются pid'ы или какой-то системный ресурс).

После такого завершения wineserver'а изменения в winecfg на вкладке "Ключи защиты" не сохраняются. Несмотря на то, что изменения в реестр успешно вносятся, после kill_wineserver они сбрасываются.
Comment 1 Илья Шпигорь 2009-09-30 16:00:20 MSD
Выложил патч.

Ошибка была в новом обработчике сервера - kill_wineserver. В нем вызывается kill_lock_owner, которая посылает wineserver'у сигнал SIGINT, но при посылке она ориентируется закрыт ли специальный lock файл. По этому lock файлу определяется pid wineserver'a, а так как kill_lock_owner вызывается из этого же wineserver'а, то проверка lock файла не срабатывает (он оказывается свободным). В результате сигналы не посылаются.

Для решения ошибки необходимо создавать дочерний процесс и посылать все сигналы из него.
Comment 2 Денис Баранов 2010-04-15 17:27:51 MSD
Принято.
WINE@Etersoft 1.0.12 eter5/eter4