more mmtimer questions

Jeremy White jwhite at codeweavers.com
Fri Feb 11 23:09:24 CST 2005


Oliver Stieber wrote:
> I've had a look through the code and can't spot any
> problems with managing the linked list which would
> point to problems with TIME_TimersList but when the
> crash occurs ptimer != &TIME_TimersList

I looked as well, and couldn't see anything obvious.

The only 'flaw' I saw was that we used the WINMM_IData->cs,
when, for logical separation, it seems we should have
our own cs.  But I can't imagine any way in which
that flaw would create the condition you describe.

Some sub process causing heap corruption would
explain this.

> 
> 
> Also if the we're using a = &TIME_TimersList,
> a=&(*a)->lpNext  and then referencing *a in critical
> sections doesn't anything that modifies
> TIME_TimersList or ... lpNext also have to be in a
> critical section? e.g. TIME_MMTimeStart and
> TIME_MMTimeStop.
> 
> If so should the code be change to copy the values in
> TIME_TimersList and  ..->lpNext  instead of
> referencing them or should it be changed to make sure
> TIME_MMTimeStart and TIME_MMTimeStop etc.. use
> critical sections.

For correctness, I agree that the clearing of TIME_TimersList should better be
protected by a crit section; I admire your thoroughness on that.
I also don't understand why time.c shouldn't have it's own crit sec for the TimersList.

But a case where that could credibly become an issue is hard to imagine.  You
have to have 1 thread termintating the MM Timer while another thread
is simultaneously killing or setting an event.  Further, the event loops
inside the set and term event loops are pretty tight; it's
hard to imagine having just the right magic timing conditions and
then also having a context switch occur during the short tight
loops.

I guess that's a long way of saying that yes, I think you have
identified a flaw in the code, but that I can't imagine any way it's
could cause the problem you're seeing.

Cheers,

Jer



More information about the wine-devel mailing list