While people are thinking about mmtimer I've got a question, or more a problem.
Sometimes, mainly when escape from Bink videos (or they run to the end) the linked list in time.c is getting corrupt. (this happens about 1 in 5 times)
i.e.
TIME_MMSysTimeCallback() .... EnterCriticalSection(&iData->cs); for (ptimer = &TIME_TimersList; *ptimer != NULL; ) { /* silly test */ if((int)*ptimer < 1000){ FIXME("ptimer out of expected range, timers list is probably corrupt %p \n", *ptimer); break; }
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
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.
Send instant messages to your online friends http://uk.messenger.yahoo.com