| Summary: | Не запускается arj | ||
|---|---|---|---|
| Product: | WINE@Etersoft | Reporter: | Vitaly Lipatov <lav> |
| Component: | Общее | Assignee: | BUGS@Etersoft <bugs> |
| Status: | CLOSED FIXED | QA Contact: | |
| Severity: | normal | ||
| Priority: | P5 | ||
| Version: | 1.0.8 | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | |||
| Заявки RT: | Связано с: | ||
| Дата напоминания: | |||
| Bug Depends on: | 442 | ||
| Bug Blocks: | 777 | ||
Добавляю зависимость на багу 442, которая была о том же. Надо наверное что-то сделать, чтобы зависания не было. Вообще возможно что надо, как и в Windows, все консольные программы запускать в консоли. Как минимум, нужно воспроизвести ситуацию с ReadConsoleInput http://api.farmanager.com/ru/winapi/readconsoleinput.html Думаю, полный цикл вот такой (на 22.12.07 зацикливается):
000b:trace:int:DOSVM_Loop waiting for action
000b:Call user32.MsgWaitForMultipleObjects(00000002,0034f688,00000000,ffffffff,000004ff) ret=7e88ed5c
000b: set_queue_mask( wake_mask=00000000, changed_mask=000004ff, skip_wait=0 )
000b: set_queue_mask() = 0 { wake_bits=00000108, changed_bits=00000108 }
000b:Call winex11.drv.MsgWaitForMultipleObjectsEx(00000003,0034f3d8,ffffffff,000004ff,00000000) ret=7ee8d30b
000b:trace:sync:WaitForMultipleObjectsEx *handle=4, timeout=-1
000b: select( flags=4, cookie=0x34f0f0, signal=(nil), prev_apc=(nil), timeout=infinite, result={}, handles={0x4,0x80,0x84} )
000b: select() = 0 { apc_handle=(nil), timeout=infinite, call={APC_NONE} }
000b:Ret winex11.drv.MsgWaitForMultipleObjectsEx() retval=00000000 ret=7ee8d30b
000b:Ret user32.MsgWaitForMultipleObjects() retval=00000000 ret=7e88ed5c
000b:Call KERNEL32.GetStdHandle(fffffff6) ret=7e88e741
000b:Ret KERNEL32.GetStdHandle() retval=00000004 ret=7e88e741
000b:Call KERNEL32.ReadConsoleInputA(00000004,0034f600,00000001,0034f614) ret=7e88e756
000b: get_console_wait_event( )
000b: get_console_wait_event() = INVALID_PARAMETER { handle=(nil) }
000b: get_handle_fd( handle=(nil) )
000b: get_handle_fd() = INVALID_HANDLE { type=0, removable=0, access=00000000, options=00000000 }
000b:trace:sync:WaitForSingleObject filetype=0
000b:trace:sync:WaitForMultipleObjectsEx *handle=0, timeout=-1
000b: select( flags=4, cookie=0x34f220, signal=(nil), prev_apc=(nil), timeout=infinite, result={}, handles={(nil)} )
000b: select() = INVALID_HANDLE { apc_handle=(nil), timeout=infinite, call={APC_NONE} }
000b:trace:sync:WaitForSingleObject handle=0, ret=ffffffff
000b:Ret KERNEL32.ReadConsoleInputA() retval=00000000 ret=7e88e756
Проблема связана с использованием ReadConsoleInput, который не может работать без wineconsole. В багу http://bugs.winehq.org/show_bug.cgi?id=9178 есть патч, устраняющий проблему. 32-битная версия работает без проблем: $ wine arj.exe ARJ 3.10a (ARJ32) Copyright (c) 1990-2002 ARJ Software, Inc. May 31 2002 Registered to [Tagir R#1234] Long filenames enabled Processing archive: C:\arj.exe Archive created: 2002-05-31 17:11:16, modified: 2002-05-31 17:11:16 List of frequently used commands and switches. Type ARJ32 -? for more help. 16-битна тоже: $ wine ARJ.EXE ARJ 2.41 Copyright (c) 1990-93 Robert K Jung. Jun 03 1993 All Rights Reserved. U.S. Patent No. 5,140,321 and patent pending. *** This SHAREWARE program is NOT REGISTERED for use in a business, commercial, *** government, or institutional environment except for evaluation purposes. Архиваторы для тестирования здесь: /var/ftp/pvt/Windows/Compressors |
arj запускается только через wineconsole, причём можно и так: C:\> wineconsole arj Иначе он зависает в бесконечном цикле: 000b:Call KERNEL32.ReadConsoleInputA(00000004,0034f694,00000001,0034f6a8) ret=7d8b11e7 000b: get_console_wait_event( ) 000b: get_console_wait_event() = INVALID_PARAMETER { handle=(nil) } 000b: select( flags=4, cookie=0x34f344, signal=(nil), timeout=infinite, handles={(nil)} ) 000b: select() = INVALID_HANDLE { timeout=infinite }