[Bug 26160] New: Broken control path in mcicda
wine-bugs at winehq.org
wine-bugs at winehq.org
Fri Feb 18 06:10:31 CST 2011
http://bugs.winehq.org/show_bug.cgi?id=26160
Summary: Broken control path in mcicda
Product: Wine
Version: 1.3.13
Platform: x86
OS/Version: Mac OS X 10.5
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: winmm&mci
AssignedTo: wine-bugs at winehq.org
ReportedBy: hoehle at users.sourceforge.net
I'm thankful to C. Robinson for making mcicda work on my Linux machines since
wine-1.1.5. Since then the code supports 2 modes of operation, either via
- IOCTL_CDROM_*_AUDIO (PLAY/STOP/PAUSE/RESUME/SEEK)
- or via a separate thread using DirectSound with
IOCTL_CDROM_RAW_READ. READ_TOC is needed in both modes.
However,
commit 8afa626faa3c5aa2d32d17dca77edaf9efb3a5da
uses as selector
if (wmcda->hThread != 0) {
which causes inconsistent results as the thread may be long dead. I believe
that is not the correct way to select whether to invoke either
thread/DS+RAW_READ commands or IOCTL_CDROM_*_AUDIO ones.
Consider this sequence of MCI commands:
cmd hThread comment
play -- start hThread
stop # !0 => SetEvent stopEvent, hThread becomes 0
stop # =0 => DeviceIoControl
resume # =0 => DeviceioControl
play
resume # !0 => DSB+Play, unlike previously
status mode !0 GetStatus yields PLAY, later STOP
it will never detect that a disk was long ejected!
stop
status mode =0 GetStatus performs IoControl instead
and hence reports current and correct state.
It's fine that the code supports 2 modes of operation, the bug is that the
current code confuses itself as to which branch should be taken and produces
results depending on the history of commands rather than the current state (and
HW capabilities), wrongly mixing both code paths, leading to incorrect results.
IMHO a binary decision via hThread is wrong, there are more states to consider:
- DSB + RAW_READ is useable / being used;
- IOCTL_CDROM_PLAY_AUDIO is useable / being used
- don't know yet.
This issue becomes more important now as MacOS support is getting close (see
bug #20323). This issue becomes more important now as MacOS support is getting
close (see bug #20323). It does not implement the IOCTL_CDROM_*_AUDIO and
spits out unneeded err: and fixme: to the console. I mentioned that I'd about
this issue in bug #20323 comment #4 last year.
--
Configure bugmail: http://bugs.winehq.org/userprefs.cgi?tab=email
Do not reply to this email, post in Bugzilla using the
above URL to reply.
------- You are receiving this mail because: -------
You are watching all bug changes.
More information about the wine-bugs
mailing list