https://bugs.winehq.org/show_bug.cgi?id=47989
Anastasius Focht focht@gmx.net changed:
What |Removed |Added ---------------------------------------------------------------------------- Keywords| |download CC| |focht@gmx.net URL| |https://web.archive.org/web | |/20201111124727/https://dem | |odownload.image-line.com/fl | |studio/flstudio_win_20.7.3. | |1987.exe Status|NEEDINFO |NEW Summary|FL Studio 20 hangs on |FL Studio 20 hangs on |splash screen |splash screen (reading from | |default stdin causes | |indefinite blocking)
--- Comment #7 from Anastasius Focht focht@gmx.net --- Hello folks,
confirming.
Adding stable download link via Internet Archive:
https://web.archive.org/web/20201111124727/https://demodownload.image-line.c...
The app tries to read at one point from stdin which causes the hang. It's a GUI process, not supposed to do interact with console.
Workaround #1 (others already mentioned)
Start the app from a helper process via 'start' - there just needs to be a parent process:
Workaround #2:
Provide stdin via redirect which causes failure by design but doesn't block:
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Image-Line/FL Studio 20
$ wine ./FL.exe < /dev/null --- snip ---
Without parent (causes hang on reading stdin):
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Image-Line/FL Studio 20
$ WINEDEBUG=+seh,+relay,+loaddll,+server,+console,+msvcrt wine ./FL.exe
log.txt 2>&1
... 0024:Call ntdll.__wine_init_unix_lib(00450000,00000001,00000000,004e73e0) ret=00489a72 0024:trace:msvcrt:__wine_init_unix_lib 0024:Ret ntdll.__wine_init_unix_lib() retval=00000000 ret=00489a72 0024:Call KERNEL32.GetStartupInfoA(0031ede4) ret=00474032 0024:Ret KERNEL32.GetStartupInfoA() retval=7b612f60 ret=00474032 ... 0024:Call KERNEL32.GetStdHandle(fffffff6) ret=004742bd 0024:Ret KERNEL32.GetStdHandle() retval=0000002f ret=004742bd 0024:Call KERNEL32.GetFileType(0000002f) ret=004742c5 0024:Ret KERNEL32.GetFileType() retval=00000002 ret=004742c5 0024:Call KERNEL32.SetStdHandle(fffffff6,0000002f) ret=0047432b 0024:Ret KERNEL32.SetStdHandle() retval=00000001 ret=0047432b ... 0024:Call KERNEL32.GetStdHandle(fffffff5) ret=00474401 0024:Ret KERNEL32.GetStdHandle() retval=0000000c ret=00474401 0024:Call KERNEL32.GetFileType(0000000c) ret=00474409 0024:Call ntdll.NtQueryVolumeInformationFile(0000000c,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 0024: get_handle_fd( handle=000c ) 0024: *fd* 000c -> 25 0024: get_handle_fd() = 0 { type=1, cacheable=1, access=00120116, options=00000020 } 0024:Ret ntdll.NtQueryVolumeInformationFile() retval=00000000 ret=7b0180cf 0024:Ret KERNEL32.GetFileType() retval=00000001 ret=00474409 0024:Call KERNEL32.SetStdHandle(fffffff5,0000000c) ret=0047446f 0024:Ret KERNEL32.SetStdHandle() retval=00000001 ret=0047446f ... 0024:Call KERNEL32.GetStdHandle(fffffff4) ret=00474569 0024:Ret KERNEL32.GetStdHandle() retval=00000010 ret=00474569 0024:Call KERNEL32.GetFileType(00000010) ret=00474571 0024:Call ntdll.NtQueryVolumeInformationFile(00000010,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 0024: get_handle_fd( handle=0010 ) 0024: *fd* 0010 -> 26 0024: get_handle_fd() = 0 { type=1, cacheable=1, access=00120116, options=00000020 } 0024:Ret ntdll.NtQueryVolumeInformationFile() retval=00000000 ret=7b0180cf 0024:Ret KERNEL32.GetFileType() retval=00000001 ret=00474571 0024:Call KERNEL32.SetStdHandle(fffffff4,00000010) ret=004745d7 0024:Ret KERNEL32.SetStdHandle() retval=00000001 ret=004745d7 0024:trace:msvcrt:msvcrt_init_io :handles (0000002F)(0000000C)(00000010) 0024:trace:msvcrt:msvcrt_init_console :Opening console handles 0024:Call KERNEL32.CreateFileA(004ca02e "CONIN$",c0000000,00000003,00000000,00000003,00000000,00000000) ret=00464117 ... 0024:Call ntdll.NtCreateFile(0031ed94,c0100080,0031ed50,0031ed70,00000000,00000000,00000003,00000001,00000060,00000000,00000000) ret=7b0128f4 0024: open_file_object( access=c0100080, attributes=00000040, rootdir=0000, sharing=00000003, options=00000060, filename=L"\??\CONIN$" ) 0024: open_file_object() = 0 { handle=0034 } 0024:Ret ntdll.NtCreateFile() retval=00000000 ret=7b0128f4 ... 0024:Ret KERNEL32.CreateFileA() retval=00000037 ret=00464117 ... 0024:Call KERNEL32.GetFileAttributesW(0387288c L"C:\Program Files\Image-Line\FL Studio 20\Data\Templates.nfo") ret=009847fa ... 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=009847fa 0024:Call KERNEL32.GetLastError() ret=00984853 0024:Ret KERNEL32.GetLastError() retval=00000002 ret=00984853 0024:Call KERNEL32.GetStdHandle(fffffff6) ret=00967926 0024:Ret KERNEL32.GetStdHandle() retval=0000002f ret=00967926 0024:Call KERNEL32.ReadFile(0000002f,0031dfa0,00000080,0031dd60,00000000) ret=009677c3 0024:Call ntdll.NtReadFile(0000002f,00000000,00000000,00000000,0031dc88,0031dfa0,00000080,00000000,00000000) ret=7b012c62 0024: get_handle_fd( handle=002f ) 0024: get_handle_fd() = BAD_DEVICE_TYPE { type=0, cacheable=1, access=00000000, options=00000000 } 0024: read( async={handle=002f,event=0000,iosb=0031dc88,user=7e52ced0,apc=00000000,apc_context=00000000}, pos=00000000 ) 0024: read() = PENDING { wait=01d8, options=00000020, data={} } 0024: select( flags=2, cookie=0031d08c, timeout=infinite, size=8, prev_apc=0000, result={}, data={WAIT_ALL,handles={01d8}}, context={} ) 0024: select() = PENDING { call={APC_NONE}, apc_handle=0000, context={} }
<waits forever> --- snip ---
It should fail to read from stdin and not block indefinately.
With stdin redirect using '/dev/null' (no hang):
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Image-Line/FL Studio 20
$ WINEDEBUG=+seh,+relay,+loaddll,+server,+console,+msvcrt wine ./FL.exe < /dev/null >>log.txt 2>&1 ... 0024:Call ntdll.__wine_init_unix_lib(00450000,00000001,00000000,004e73e0) ret=00489a72 0024:trace:msvcrt:__wine_init_unix_lib 0024:Ret ntdll.__wine_init_unix_lib() retval=00000000 ret=00489a72 0024:Call KERNEL32.GetStartupInfoA(0031ede4) ret=00474032 0024:Ret KERNEL32.GetStartupInfoA() retval=7b612f60 ret=00474032 ... 0024:Call KERNEL32.GetStdHandle(fffffff6) ret=004742bd 0024:Ret KERNEL32.GetStdHandle() retval=00000008 ret=004742bd 0024:Call KERNEL32.GetFileType(00000008) ret=004742c5 0024:Call ntdll.NtQueryVolumeInformationFile(00000008,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 0024: get_handle_fd( handle=0008 ) 0024: *fd* 0008 -> 23 0024: get_handle_fd() = 0 { type=7, cacheable=1, access=00120089, options=00000020 } 0024:Ret ntdll.NtQueryVolumeInformationFile() retval=00000000 ret=7b0180cf 0024:Ret KERNEL32.GetFileType() retval=00000002 ret=004742c5 0024:Call KERNEL32.SetStdHandle(fffffff6,00000008) ret=0047432b 0024:Ret KERNEL32.SetStdHandle() retval=00000001 ret=0047432b ... 0024:Call KERNEL32.GetStdHandle(fffffff5) ret=00474401 0024:Ret KERNEL32.GetStdHandle() retval=0000000c ret=00474401 0024:Call KERNEL32.GetFileType(0000000c) ret=00474409 0024:Call ntdll.NtQueryVolumeInformationFile(0000000c,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 0024: get_handle_fd( handle=000c ) 0024: *fd* 000c -> 25 0024: get_handle_fd() = 0 { type=1, cacheable=1, access=00120116, options=00000020 } 0024:Ret ntdll.NtQueryVolumeInformationFile() retval=00000000 ret=7b0180cf 0024:Ret KERNEL32.GetFileType() retval=00000001 ret=00474409 0024:Call KERNEL32.SetStdHandle(fffffff5,0000000c) ret=0047446f 0024:Ret KERNEL32.SetStdHandle() retval=00000001 ret=0047446f ... 0024:Call KERNEL32.GetStdHandle(fffffff4) ret=00474569 0024:Ret KERNEL32.GetStdHandle() retval=00000010 ret=00474569 0024:Call KERNEL32.GetFileType(00000010) ret=00474571 0024:Call ntdll.NtQueryVolumeInformationFile(00000010,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 0024: get_handle_fd( handle=0010 ) 0024: *fd* 0010 -> 26 0024: get_handle_fd() = 0 { type=1, cacheable=1, access=00120116, options=00000020 } 0024:Ret ntdll.NtQueryVolumeInformationFile() retval=00000000 ret=7b0180cf 0024:Ret KERNEL32.GetFileType() retval=00000001 ret=00474571 0024:Call KERNEL32.SetStdHandle(fffffff4,00000010) ret=004745d7 0024:Ret KERNEL32.SetStdHandle() retval=00000001 ret=004745d7 0024:trace:msvcrt:msvcrt_init_io :handles (00000008)(0000000C)(00000010) 0024:trace:msvcrt:msvcrt_init_console :Opening console handles 0024:Call KERNEL32.CreateFileA(004ca02e "CONIN$",c0000000,00000003,00000000,00000003,00000000,00000000) ret=00464117 ... 0024:Call ntdll.NtCreateFile(0031ed94,c0100080,0031ed50,0031ed70,00000000,00000000,00000003,00000001,00000060,00000000,00000000) ret=7b0128f4 0024: open_file_object( access=c0100080, attributes=00000040, rootdir=0000, sharing=00000003, options=00000060, filename=L"\??\CONIN$" ) 0024: open_file_object() = INVALID_HANDLE { handle=0000 } 0024:Ret ntdll.NtCreateFile() retval=c0000008 ret=7b0128f4 ... 0024:Ret KERNEL32.CreateFileA() retval=ffffffff ret=00464117 ... 0024:Call KERNEL32.GetFileAttributesW(03872a3c L"C:\Program Files\Image-Line\FL Studio 20\Data\Templates.nfo") ret=009847fa ... 0024:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=009847fa 0024:Call KERNEL32.GetLastError() ret=00984853 0024:Ret KERNEL32.GetLastError() retval=00000002 ret=00984853 0024:Call KERNEL32.GetStdHandle(fffffff6) ret=00967926 0024:Ret KERNEL32.GetStdHandle() retval=00000008 ret=00967926 0024:Call KERNEL32.ReadFile(00000008,0031e918,00000080,0031e6d8,00000000) ret=009677c3 0024:Call ntdll.NtReadFile(00000008,00000000,00000000,00000000,0031e608,0031e918,00000080,00000000,00000000) ret=7b012c62 0024:Ret ntdll.NtReadFile() retval=c0000011 ret=7b012c62 0024:Ret KERNEL32.ReadFile() retval=00000001 ret=009677c3 0024:Call user32.KillTimer(00010174,00000006) ret=00d059c7 0024: kill_win_timer( win=00010174, id=00000006, msg=00000113 ) 0024: kill_win_timer() = INVALID_PARAMETER 0024:Ret user32.KillTimer() retval=00000000 ret=00d059c7 0024:Call KERNEL32.GetFileAttributesW(0385a24c L"C:\users\focht\My Documents\Image-Line\FL Studio\Projects\Backup\") ret=009847fa ... --- snip ---
With parent process using 'start.exe' (no hang):
--- snip --- $ pwd /home/focht/.wine/drive_c/Program Files/Image-Line/FL Studio 20
$ WINEDEBUG=+seh,+relay,+loaddll,+server,+console,+msvcrt wine start ./FL.exe
log.txt 2>&1
... 00fc:Call ntdll.__wine_init_unix_lib(00450000,00000001,00000000,004e73e0) ret=00489a72 00fc:trace:msvcrt:__wine_init_unix_lib 00fc:Ret ntdll.__wine_init_unix_lib() retval=00000000 ret=00489a72 00fc:Call KERNEL32.GetStartupInfoA(0031ede4) ret=00474032 00fc:Ret KERNEL32.GetStartupInfoA() retval=7b612f60 ret=00474032 ... 00fc:Call KERNEL32.GetStdHandle(fffffff6) ret=004742bd 00fc:Ret KERNEL32.GetStdHandle() retval=0000002f ret=004742bd 00fc:Call KERNEL32.GetFileType(0000002f) ret=004742c5 00fc:Ret KERNEL32.GetFileType() retval=00000002 ret=004742c5 00fc:Call KERNEL32.SetStdHandle(fffffff6,0000002f) ret=0047432b 00fc:Ret KERNEL32.SetStdHandle() retval=00000001 ret=0047432b ... 00fc:Call KERNEL32.GetStdHandle(fffffff5) ret=00474401 00fc:Ret KERNEL32.GetStdHandle() retval=0000000c ret=00474401 00fc:Call KERNEL32.GetFileType(0000000c) ret=00474409 00fc:Call ntdll.NtQueryVolumeInformationFile(0000000c,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 00fc: get_handle_fd( handle=000c ) 00fc: get_handle_fd() = OBJECT_TYPE_MISMATCH { type=0, cacheable=0, access=00000000, options=00000000 } 00fc:Ret ntdll.NtQueryVolumeInformationFile() retval=c0000024 ret=7b0180cf 00fc:Call ntdll.RtlNtStatusToDosError(c0000024) ret=7b0180da 00fc:Ret ntdll.RtlNtStatusToDosError() retval=00000006 ret=7b0180da 00fc:Ret KERNEL32.GetFileType() retval=00000000 ret=00474409 00fc:Call KERNEL32.SetStdHandle(fffffff5,00000000) ret=0047446f 00fc:Ret KERNEL32.SetStdHandle() retval=00000001 ret=0047446f ... 00fc:Call KERNEL32.GetStdHandle(fffffff4) ret=00474569 00fc:Ret KERNEL32.GetStdHandle() retval=00000010 ret=00474569 00fc:Call KERNEL32.GetFileType(00000010) ret=00474571 00fc:Call ntdll.NtQueryVolumeInformationFile(00000010,0031ed94,0031ed9c,00000008,00000004) ret=7b0180cf 00fc:Ret ntdll.NtQueryVolumeInformationFile() retval=00000000 ret=7b0180cf 00fc:Ret KERNEL32.GetFileType() retval=00000001 ret=00474571 00fc:Call KERNEL32.SetStdHandle(fffffff4,00000010) ret=004745d7 00fc:Ret KERNEL32.SetStdHandle() retval=00000001 ret=004745d7 00fc:trace:msvcrt:msvcrt_init_io :handles (0000002F)(FFFFFFFE)(00000010) 00fc:trace:msvcrt:msvcrt_init_console :Opening console handles 00fc:Call KERNEL32.CreateFileA(004ca02e "CONIN$",c0000000,00000003,00000000,00000003,00000000,00000000) ret=00464117 ... 00fc:Call ntdll.NtCreateFile(0031ed94,c0100080,0031ed50,0031ed70,00000000,00000000,00000003,00000001,00000060,00000000,00000000) ret=7b0128f4 00fc: open_file_object( access=c0100080, attributes=00000040, rootdir=0000, sharing=00000003, options=00000060, filename=L"\??\CONIN$" ) 00fc: open_file_object() = INVALID_HANDLE { handle=0000 } 00fc:Ret ntdll.NtCreateFile() retval=c0000008 ret=7b0128f4 ... 00fc:Ret KERNEL32.CreateFileA() retval=ffffffff ret=00464117 ... 00fc:Call KERNEL32.GetFileAttributesW(0387288c L"C:\Program Files\Image-Line\FL Studio 20\Data\Templates.nfo") ret=009847fa ... 00fc:Ret KERNEL32.GetFileAttributesW() retval=ffffffff ret=009847fa 00fc:Call KERNEL32.GetLastError() ret=00984853 00fc:Ret KERNEL32.GetLastError() retval=00000002 ret=00984853 00fc:Call KERNEL32.GetStdHandle(fffffff6) ret=00967926 00fc:Ret KERNEL32.GetStdHandle() retval=0000002f ret=00967926 00fc:Call KERNEL32.ReadFile(0000002f,0031dfa0,00000080,0031dd60,00000000) ret=009677c3 00fc:Call ntdll.NtReadFile(0000002f,00000000,00000000,00000000,0031dc88,0031dfa0,00000080,00000000,00000000) ret=7b012c62 00fc:Ret ntdll.NtReadFile() retval=c0000022 ret=7b012c62 00fc:Call ntdll.RtlNtStatusToDosError(c0000022) ret=7b012cc2 00fc:Ret ntdll.RtlNtStatusToDosError() retval=00000005 ret=7b012cc2 00fc:Ret KERNEL32.ReadFile() retval=00000000 ret=009677c3 00fc:Call KERNEL32.GetLastError() ret=009677cc 00fc:Ret KERNEL32.GetLastError() retval=00000005 ret=009677cc 00fc:Call KERNEL32.GetFileAttributesW(03858e4c L"C:\users\focht\My Documents\Image-Line\FL Studio\Projects\Backup\") ret=009847fa ... 00fc:Ret KERNEL32.GetFileAttributesW() retval=00000010 ret=009847fa ... --- snip ---
$ sha1sum flstudio_win_20.7.3.1987.exe fdb22ed93d7ed3134cb6bb6839741bf2f87f7674 flstudio_win_20.7.3.1987.exe
$ du -sh flstudio_win_20.7.3.1987.exe 910M flstudio_win_20.7.3.1987.exe
$ wine --version wine-5.22-39-g4807a8f588c
Regards