mirror of
https://github.com/gnif/LookingGlass.git
synced 2025-08-09 20:24:14 +00:00
[host] windows: fix graceful exit
We were using an auto-reset event to signal the mousehook exit. This was fine when there was only one thread, but with the addition of the update thread, only one thread is signaled, causing the wait to last forever. The fix is switching to a manual reset event and call ResetEvent after the threads have exited.
This commit is contained in:
@@ -166,7 +166,7 @@ void mouseHook_install(MouseHookFn callback)
|
||||
{
|
||||
if (!mouseHook.event)
|
||||
{
|
||||
mouseHook.event = CreateEventA(NULL, FALSE, FALSE, NULL);
|
||||
mouseHook.event = CreateEventA(NULL, TRUE, FALSE, NULL);
|
||||
if (!mouseHook.event)
|
||||
{
|
||||
DEBUG_WINERROR("Failed to create mouse hook uninstall event",
|
||||
@@ -201,6 +201,7 @@ void mouseHook_remove(void)
|
||||
SetEvent(mouseHook.event);
|
||||
WaitForSingleObject(mouseHook.thread , INFINITE);
|
||||
WaitForSingleObject(mouseHook.updateThread, INFINITE);
|
||||
ResetEvent(mouseHook.event);
|
||||
CloseHandle(mouseHook.thread);
|
||||
CloseHandle(mouseHook.updateThread);
|
||||
}
|
||||
|
@@ -698,6 +698,7 @@ VOID WINAPI SvcMain(DWORD dwArgc, LPTSTR *lpszArgv)
|
||||
{
|
||||
case WAIT_OBJECT_0:
|
||||
service.running = false;
|
||||
doLog("Host application exited gracefully\n");
|
||||
break;
|
||||
case WAIT_TIMEOUT:
|
||||
doLog("Host application failed to exit in 1 second\n");
|
||||
|
Reference in New Issue
Block a user