[Bug 16941] New: interrupts cause nested trace output

wine-bugs at winehq.org wine-bugs at winehq.org
Thu Jan 15 11:06:53 CST 2009


http://bugs.winehq.org/show_bug.cgi?id=16941

           Summary: interrupts cause nested trace output
           Product: Wine
           Version: 1.1.12
          Platform: PC
        OS/Version: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: P2
         Component: -unknown
        AssignedTo: wine-bugs at winehq.org
        ReportedBy: hoehle at users.sourceforge.net


The winmm periodic timer interrupt (used e.g. by the dsound PCM player) causes
confusion in wine's debug log. I believe every line in the log should be output
atomically. This is not the case and makes the log harder to analyse.

Please search your traces using the following regexp
.[0-9]{4}:[a-zCR]
to find sections where one thread manages to interrupt another one amid a log
line.

In my case, all such occurrences are caused by one thread, identified as
follows:
0019:trace:mmtime:TIME_MMSysTimeThread Starting main winmm thread

Here's a sample where the main thread's (0009) logline is interrupted by the
timer's thread (0019) trace output:

0009: get_handle_fd(0019:Call KERNEL32.GetTickCount()
0019:Ret  KERNEL32.GetTickCount()
0019:trace:dsound:DSOUND_timer (1,0,0x1fbbb0,0x0,0x0)
0019:[many lines omitted]
 handle=00a4 ) <- This is the remains of the trace output
                  from the interrupted thread (0009)
0009: *fd* 00a4 -> 83

Here's another example, involving a redispatch to thread 0018:

001e0019:Call KERNEL32.GetTickCount() 
0019:Ret  KERNEL32.GetTickCount() ...
0019: [many lines omitted]
: create_key() = 0 { hkey=0020, created=0 }
^^^^  remains from thread 001e
0018: get_new_process_info( info=0038 )
0018: select() = PENDING { timeout=infinite, ...
001e:trace:reg:NtCreateKey <- 0x20

The interruptor's pattern is always the same:
- 2x GetTickCount()
- trace:dsound:DSOUND_timer
- dsound perform mix etc.

Looking at libs/wine/debug.c:default_dbg_vlog() I see no obvious mechanism to
ensure atomic output, while and dlls/ntdll/debugtools.c:NTDLL_dbg_vlog() might
have the machinery given a temporary output buffer and a single call to
write().


-- 
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