dlls/kernel/comm.c: not releasing file descriptors?
cihan at uq.edu.au
Thu Nov 3 01:38:01 CST 2005
I am trying to get G-Ware to run under wine which provides a user
interface to set up Echo Canceller Units made by ClearOne. The unit is
connected to the serial port (com1 = ttyS0).
The only way I can start the program at all is by configuring wine to
act as Windows 95/98 and using native COM dll's. Furthermore,
'GWare.exe' starts 'PSRServe.exe' under native Windows but not under
wine so I do the following in a bash file:
wine C:\\Program\ Files\\G-Ware\\PSRServe.exe &
wine C:\\Program\ Files\\G-Ware\\GWare.exe
When I connect to the device I get endless
fixme:comm:COMM_WaitCommEvent EV_RXFLAG not handled
messages before communication breaks with this:
wine client error:3bc: pipe: Too many open files
After investigating I found out that indeed the number of open pipes
to ttyS0 increases statically so I tried to find the reason and suspect
the following (using the CVS checkout from 20051102):
In the function COMM_WaitCommEvent in /dlls/kernel/comm.c line 2106 a
thread is created for WaitCommEventService. However, in this branch of
the if-statement fd is not released (using release_comm_fd).
Releasing fd seems to work and the number of open pipes don't get past
I am new to wine development and this is just a guess and I might be
totally wrong. Unfortunately this does not fix the communication with
the device (It reports timeouts and errors retrieving values etc).
I guess this has to do with the first fixme messages I mentioned.
Can anybody tell me what EV_RXFLAG is used for?
Using WINEDEBUG=+tid,+comm I compared the output to what Sysinternals
PortMon gives me on native Windows and it really looks promising. Is
there a way to display the actual data that was sent/received through
the serial port? I tried WINEDEBUG=+io which does not work.
The program uses threads so there might as well be other issues.
 http://www.clearone.com/docs/downloads/G-Ware5.0.6.zip (20MB)
More information about the wine-devel