From b233cfb33eab1895b6dfdb4fffb5c44fa36e05d2 Mon Sep 17 00:00:00 2001 From: Billy Laws Date: Mon, 3 Jul 2023 17:36:35 +0100 Subject: [PATCH] wineboot: Always attempt setup for all machine types. Without this, wineboot would bail out on ARM64 in the case where x86_64 WOW is not available but i386 is. Leaving an incomplete prefix without any clear error. --- programs/wineboot/wineboot.c | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/programs/wineboot/wineboot.c b/programs/wineboot/wineboot.c index c05ce580298..76d9812a4bf 100644 --- a/programs/wineboot/wineboot.c +++ b/programs/wineboot/wineboot.c @@ -1498,20 +1498,23 @@ static void update_wineprefix( BOOL force ) HWND hwnd = show_wait_window(); for (;;) { - MSG msg; - DWORD res = MsgWaitForMultipleObjects( 1, &process, FALSE, INFINITE, QS_ALLINPUT ); - if (res == WAIT_OBJECT_0) + if (process) { + MSG msg; + DWORD res = MsgWaitForMultipleObjects( 1, &process, FALSE, INFINITE, QS_ALLINPUT ); + if (res != WAIT_OBJECT_0) + { + while (PeekMessageW( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageW( &msg ); + continue; + } CloseHandle( process ); - if (!machines[count]) break; - if (HIWORD(machines[count]) & 4 /* native machine */) - process = start_rundll32( inf_path, L"DefaultInstall", IMAGE_FILE_MACHINE_TARGET_HOST ); - else - process = start_rundll32( inf_path, L"Wow64Install", LOWORD(machines[count]) ); - count++; - if (!process) break; } - else while (PeekMessageW( &msg, 0, 0, 0, PM_REMOVE )) DispatchMessageW( &msg ); + if (!machines[count]) break; + if (HIWORD(machines[count]) & 4 /* native machine */) + process = start_rundll32( inf_path, L"DefaultInstall", IMAGE_FILE_MACHINE_TARGET_HOST ); + else + process = start_rundll32( inf_path, L"Wow64Install", LOWORD(machines[count]) ); + count++; } DestroyWindow( hwnd ); }