https://bugs.winehq.org/show_bug.cgi?id=43125
Konrad Rzepecki hannibal@astral.lodz.pl changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |hannibal@astral.lodz.pl
--- Comment #6 from Konrad Rzepecki hannibal@astral.lodz.pl --- My installation is also affected by this annoying messages: 0056:err:hid_report:process_hid_report Device reports coming in too fast, last report not read yet!
In my case this are mostly mouse events but sometimes also keyboard. Mouse events are not device specific. I see this messages on external USB mouse but also on internal trackpoint.
I seems appear randomly, but there are one case when they appear much more often.
I run my wine app on remotely mouted sshfs partition. This messages appears almost always when this app access files on this partition. Quite often there are dozens of them in a row.
My system is Slackware-current on Lenovo T410.
Like Kai I have looked into source:
EnterCriticalSection(&ext->report_cs); ... ... ... if (!ext->last_report_read) ERR_(hid_report)("Device reports coming in too fast, last report not read yet!\n");
memcpy(ext->last_report, report, length); ext->last_report_size = length; ext->last_report_read = FALSE;
while ((entry = RemoveHeadList(&ext->irp_queue)) != &ext->irp_queue) { IO_STACK_LOCATION *irpsp; TRACE_(hid_report)("Processing Request\n"); irp = CONTAINING_RECORD(entry, IRP, Tail.Overlay.s.ListEntry); irpsp = IoGetCurrentIrpStackLocation(irp); irp->IoStatus.u.Status = deliver_last_report(ext, irpsp->Parameters.DeviceIoControl.OutputBufferLength, irp->UserBuffer, &irp->IoStatus.Information); ext->last_report_read = TRUE; IoCompleteRequest(irp, IO_NO_INCREMENT); } LeaveCriticalSection(&ext->report_cs);
This code is in critical section and only setting ext->last_report_read to FALSE is after check. So other code should not affect this at all. Only possibility I see is that this "while" is never entered so TRUE is not set. I think this line with TRUE set should be moved outside while for two reasons. 1. If list is empty TRUE is never set however there is no report to process and it should (this bug). 2. When there are more than one report after process first it is set to TRUE however it should be after last.
But since all this appear in critical section i see no reason to have this handly made "last_report_read" semaphore in code at all. However I'm not familiar with wine code so my analyses may be wrong, but I hope it help someone fix this bug. This messages in console application are really annoying...