Bug 2611

Summary: Задержка и потеря данных при сканировании ШК
Product: WINE@Etersoft Reporter: Шильников Андрей <shan>
Component: Оборудование ; ДрайвераAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: kondratyuk, lav, stasw
Version: 1.0.8   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 48    
Bug Blocks: 777    
Attachments: Лог, полученный с помощью oprofile во время сканирования
Лог с закомментированным использованием mcache в wine_server_call
WINEDEBUG=+timestamps,+file,+relay ww 1cv7s.exe 2>&1 | egrep '(ReadFile buffer|Call user32.MessageBoxA)'

Description Шильников Андрей 2008-10-14 19:15:16 MSD
В основном бага воспроизводится при сканировнии ШК с проброшенного порта. Появляется как в 1с77 так и 1с81.
Задержка - при сканировании некоторое время в 1с не передается никокой информации, а потом через секунды 3 выдается вся информация, поступившая со сканера за это время (в случаи если мы сканируем несколько ШК подряд).

Потеря данных - это когда со сканера поступает код по половинке или частично.

При этом, все тесты в атоле проходят нормально, никаких нареканий.
Comment 1 Шильников Андрей 2008-10-17 17:59:40 MSD
В 1с77 проблема с потерей данных решается увеличением чувствительности до 30 мс.
Comment 2 Стас Вавилин 2008-10-19 12:11:20 MSD
Баг воспроизводится (у меня) как с проброшеннего, так и с локального ком порта - проброс в пропатченном (куррент) вайне выполнен похоже окончательно и надежно - дело вроде как не в пробросе.
Попробую в понедельник в трех точках на четырех ККМ+СканШК в "Боевых усл - в т.ч. один "проброшен"" (в тестовых трудно что-то сказать - вроде задержка уменьшилась, но не пропала) чуствительность 30 в атол.драйвере - к вечеру рез-таты, но предварит. анализ думаю рано радоваться - и при чуствительности 0 по умолчанию вроде (у меня) данные не терялись.
В сборках куррент .24 или .25 есть изменения по теме? В боевых куррент.20
Comment 3 Стас Вавилин 2008-10-20 17:55:05 MSD
(In reply to comment #2) себе:
> Баг воспроизводится (у меня) как с
> проброшеннего, так и с локального ком порта
Реч идет только о задержке! 
> вроде задержка уменьшилась, но не
> пропала) чуствительность 30 в атол.драйвере
результаты задержек от сканирования до момента появления "выполняется обработка" в инф.строке 1с при спокойной работе на второй (ремсериал) кассе (мало покупателей - пробитых чеков) в "боевых условиях" в течение часа (сек):
2,2,2,3,1,3,2,2,4,3,2,1,2,3,2,2,2,3 (на "глазок" - считалось "ираз", "идва"...)
Сервер fedora9 DualCore1.8GHz RAM1Gb FreeNX(RX) 
> думаю рано радоваться 
надо что-то делать !!!
> куррент.20


Comment 4 Александр Морозов 2008-10-23 16:29:55 MSD
Из профайлеров я нагуглил gprof, cprof, oprofile.

gprof непонятно, как использовать с wine. Собрал ntdll с флагом -pg, запустил программку через ww, gmon.out нигде не нашёл.

К cprof даже прилагается патч для wine, но сам cprof собрать не удалось. Да и файлы в архиве с исходниками 2001-го года, так что не факт, что с теперешним wine будет работать.

В wine-devel советуют oprofile. Он меряет не одно приложение, а всё, что запущено в системе, то есть видимо надо чтобы на компьютере кроме измеряемого wine с 1С не было запущено ещё несколько других потребляющих ресурсы программ (ещё несколько wine-ов, например). Кроме того, запускать его надо под root.
Comment 5 Александр Морозов 2008-10-24 20:38:53 MSD
Created attachment 828 [details]
Лог, полученный с помощью oprofile во время сканирования

Судя по всему, профайлер в данном случае не поможет
Comment 6 Александр Морозов 2008-10-24 20:41:53 MSD
Created attachment 829 [details]
Лог с закомментированным использованием mcache в wine_server_call
Comment 7 Александр Морозов 2008-10-28 17:49:26 MSK
Добавил вывод читаемых ReadFile штрихкодов и временных отметок в виде [секунды:микросекунды] (на основе патча Peter Urbanec). Штрихкоды сразу же выводятся в лог, а MessageBox может появиться и через 10 секунд.
Comment 8 Александр Морозов 2008-10-28 17:51:38 MSK
Created attachment 840 [details]
WINEDEBUG=+timestamps,+file,+relay ww 1cv7s.exe 2>&1 | egrep '(ReadFile buffer|Call user32.MessageBoxA)'

Штрихкод 9785941578511
Comment 9 Александр Морозов 2008-10-28 20:00:15 MSK
Проблема оказалась связана с увеличением таймаута одного из таймеров с помощью функции etersoft_fixtimer. Установка этого таймера в логе:
0009:Call user32.SetTimer(00000000,00000000,000000c8,2200e170) ret=2200fb7d
0009:Ret  user32.SetTimer() retval=00007fff ret=2200fb7d

Проблему можно решить с помощью патча
diff --git a/dlls/user32/message.c b/dlls/user32/message.c
index 952ed09..16d0d4e 100644
--- a/dlls/user32/message.c
+++ b/dlls/user32/message.c
@@ -3589,9 +3589,12 @@ UINT_PTR WINAPI SetTimer( HWND hwnd, UINT_PTR id, UINT timeout, TIMERPROC proc )

     if (proc) winproc = WINPROC_AllocProc( (WNDPROC)proc, NULL );

-    LOADETER_FUNC(etersoft_fixtimer);
-    if (etersoft_fixtimer)
-        etersoft_fixtimer(id, &timeout);
+    if (!(id == 0 && timeout == 200))
+    {
+        LOADETER_FUNC(etersoft_fixtimer);
+        if (etersoft_fixtimer)
+            etersoft_fixtimer(id, &timeout);
+    }

     SERVER_START_REQ( set_win_timer )
     {

Возможно, правильнее поправить etersoft_fixtimer.
Comment 10 Vitaly Lipatov 2008-10-28 20:45:22 MSK
Исправлено в закрытой части, будет в сборке eter10
Comment 11 Vitaly Lipatov 2014-09-11 18:45:36 MSK
Для тех, кто не пользуется багзиллой или не умеет пользоваться групповым редактированием при поиске, закрываем задачи, которые они должны были принять.