Commit e340cafe authored by Misha Koshelev's avatar Misha Koshelev Committed by Alexandre Julliard

winemenubuilder: Create/release semaphore only around call to wineshelllink.

parent c03125a1
......@@ -907,6 +907,7 @@ static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
WCHAR szArgs[INFOTIPSIZE], szIconPath[MAX_PATH];
int iIconId = 0, r = -1;
DWORD csidl = -1;
HANDLE hsem = NULL;
if ( !link )
{
......@@ -1015,11 +1016,23 @@ static BOOL InvokeShellLinker( IShellLinkW *sl, LPCWSTR link, BOOL bAgain )
escaped_args = escape(szArgs);
escaped_description = escape(szDescription);
/* running multiple instances of wineshelllink
at the same time may be dangerous */
hsem = CreateSemaphoreA( NULL, 1, 1, "winemenubuilder_semaphore");
if( WAIT_OBJECT_0 != WaitForSingleObject( hsem, INFINITE ) )
{
WINE_ERR("failed wait for semaphore\n");
goto cleanup;
}
r = fork_and_wait("wineshelllink", link_name, escaped_path,
in_desktop_dir(csidl), escaped_args, icon_name,
work_dir ? work_dir : "", escaped_description);
ReleaseSemaphore( hsem, 1, NULL );
cleanup:
if (hsem) CloseHandle( hsem );
HeapFree( GetProcessHeap(), 0, icon_name );
HeapFree( GetProcessHeap(), 0, work_dir );
HeapFree( GetProcessHeap(), 0, link_name );
......@@ -1147,17 +1160,8 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show
{
LPSTR token = NULL, p;
BOOL bAgain = FALSE;
HANDLE hsem = CreateSemaphoreA( NULL, 1, 1, "winemenubuilder_semaphore");
int ret = 0;
/* running multiple instances of wineshelllink
at the same time may be dangerous */
if( WAIT_OBJECT_0 != WaitForSingleObject( hsem, INFINITE ) )
{
CloseHandle(hsem);
return FALSE;
}
for( p = cmdline; p && *p; )
{
token = next_token( &p );
......@@ -1182,8 +1186,5 @@ int PASCAL WinMain (HINSTANCE hInstance, HINSTANCE prev, LPSTR cmdline, int show
}
}
ReleaseSemaphore( hsem, 1, NULL );
CloseHandle( hsem );
return ret;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment