Bug 922

Summary: Зависание 1С 8.0 при печати
Product: WINE@Etersoft Reporter: Константин Кондратюк <kondratyuk>
Component: Печать ; Диалог печатиAssignee: Константин Кондратюк <kondratyuk>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P5 CC: baraka, lav, pav
Version: 1.0.8   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 584    

Description Константин Кондратюк 2007-12-05 19:25:42 MSK
При печати в 1С 8.0 Альфа-Авто.
После печати нескольких (одного?) документов - теряет принтер по умолчанию.

В консоли:
trace:commdlg:PrintDlgA (0x75cf1a11): hwndOwner = (nil), hDevMode = (nil), hDevNames = (nil)
pp. 0-0, min p 1, max p 0, copies 1, hinst (nil)
flags 00000408 (PD_NOPAGENUMS PD_RETURNDEFAULT )
warn:commdlg:PrintDlgA Can't find default printer
trace:commdlg:COMDLG32_SetCommDlgExtendedError (00001008)

Дебаггер:
Backtrace:
=>1 0x174a4b3f in frame (+0x4e4b3f) (0x7ed177c8)
  2 0x7ed17938 (0x00000001)
  3 0x00000000 (0x00000000)
Comment 1 Константин Кондратюк 2007-12-05 20:10:51 MSK
Ошибка проявляется после печати первого документа. Даже из блокнота 1С на пустой базе.
Но процессор при этом не удаётся загрузить хоть как-нибудь.
Comment 2 Константин Кондратюк 2007-12-05 21:33:33 MSK
trace:profile:GetPrivateProfileStringW (L"windows", L"device", L"", 0x7ff2a6c0, 280, L"win.ini")
trace:profile:PROFILE_GetPrivateProfileString L"windows",L"device",L"",0x7ff2a6c0,280,L"win.ini"
trace:profile:PROFILE_Open path: L"c:\\windows\\win.ini"
trace:profile:PROFILE_Open MRU Filename: L"c:\\windows\\win.ini", new filename: L"c:\\windows\\win.ini"
trace:profile:PROFILE_Open (L"c:\\windows\\win.ini"): already opened, needs refreshing (mru=0)
trace:profile:PROFILE_GetString (L"windows",L"device",L""): returning L""
trace:profile:PROFILE_GetPrivateProfileString returning L"", 0
warn:commdlg:PrintDlgA Can't find default printer
trace:commdlg:COMDLG32_SetCommDlgExtendedError (00001008)
Comment 3 Константин Кондратюк 2007-12-06 09:04:59 MSK
Для сравнения, лог с нашей машины:

trace:profile:PROFILE_Open (L"c:\\windows\\win.ini"): already opened, needs refreshing (mru=0)
trace:profile:PROFILE_GetString (L"windows",L"device",L""): returning L"HP,WINEPS.DRV,LPR:hp"
trace:profile:PROFILE_GetPrivateProfileString returning L"HP,WINEPS.DRV,LPR:hp", 20
Comment 4 Константин Кондратюк 2007-12-06 09:33:14 MSK
Участок кода функции PROFILE_GetString()

key = PROFILE_Find( &CurProfile->section, section, key_name, FALSE, FALSE);
PROFILE_CopyEntry( buffer, (key && key->value) ? key->value : 
   def_val, len, TRUE );
TRACE("(%s,%s,%s): returning %s\n",
   debugstr_w(section), debugstr_w(key_name), 
   debugstr_w(def_val), debugstr_w(buffer) );
return strlenW( buffer );
Comment 5 Константин Кондратюк 2007-12-06 09:40:37 MSK
Если в PROFILE_CopyEntry() передавать def_val, то получаем такую ошибку. Можно предположить, что (key && key->value) == FALSE при повторных вызовах.
У нас (key && key->value) выполняется всегда.
Comment 6 Константин Кондратюк 2007-12-06 15:34:31 MSK
При отсутствии в win2k3 принтера по умолчанию возвращается ERROR_FILE_NOT_FOUND и мусор в буфере. Wine в таком случае обновляет информацию о принтере через cups (откуда ещё?), а потом возвращает 1 (успешное выполнение функции). При этом win.ini и реестр дополняются этой информацией.
Comment 7 Vitaly Lipatov 2007-12-06 18:56:12 MSK
Никто ничего ни в каком случае не обновляет.
Хотелось бы всё же понять, совпадает ли поведение Wine с поведением
Windows.
Для этого нужно запустить в wine тест в условиях отсутствия принтера по умолчанию.
Comment 8 Константин Кондратюк 2007-12-07 07:56:02 MSK
Windows ничего не обновляет, конечно. Значение-то мы удаляем - пока не назначим снова, ничего не будет.
Comment 9 Vitaly Lipatov 2007-12-09 20:35:48 MSK
Сложно говорить об одном и том же на разных языках.

Итак, проблема в том, что после нескольких распечаток 1С начинает грузить процессор на 100%, а то и вовсе вылетает.
Нужно воспроизвести ситуацию у нас, или начать полномасштабную отладку на сервере клиента. Данные на вход прежние, под этим пользователем пока никто не работает.
Comment 10 Vitaly Lipatov 2007-12-28 21:04:14 MSK
Принтер по умолчанию больше не теряется вроде как,
во всяком случае проблема воспроизводится гораздо реже.
Инцидент можно считать исчерпанным.