Alexandre Julliard : winmm: Convert the timer list to a standard Wine list.

Alexandre Julliard julliard at wine.codeweavers.com
Tue Jun 12 06:30:28 CDT 2007


Module: wine
Branch: master
Commit: e8af10e6b055a30ea485e4756d2297c0a8ea3cd7
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e8af10e6b055a30ea485e4756d2297c0a8ea3cd7

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Mon Jun 11 17:35:04 2007 +0200

winmm: Convert the timer list to a standard Wine list.

---

 dlls/winmm/time.c   |   41 +++++++++++++++++------------------------
 dlls/winmm/winemm.h |    1 -
 2 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/dlls/winmm/time.c b/dlls/winmm/time.c
index 211ca50..790e2a2 100644
--- a/dlls/winmm/time.c
+++ b/dlls/winmm/time.c
@@ -45,11 +45,13 @@
 
 #include "winemm.h"
 
+#include "wine/list.h"
 #include "wine/debug.h"
 
 WINE_DEFAULT_DEBUG_CHANNEL(mmtime);
 
 typedef struct tagWINE_TIMERENTRY {
+    struct list                 entry;
     UINT                        wDelay;
     UINT                        wResol;
     LPTIMECALLBACK              lpFunc; /* can be lots of things */
@@ -57,12 +59,11 @@ typedef struct tagWINE_TIMERENTRY {
     UINT16                      wFlags;
     UINT16                      wTimerID;
     DWORD                       dwTriggerTime;
-    struct tagWINE_TIMERENTRY*  lpNext;
 } WINE_TIMERENTRY, *LPWINE_TIMERENTRY;
 
+static struct list timer_list = LIST_INIT(timer_list);
 
 static    HANDLE                TIME_hMMTimer;
-static    LPWINE_TIMERENTRY 	TIME_TimersList;
 static    CRITICAL_SECTION      TIME_cbcrst;
 static    BOOL                  TIME_TimeToDie = TRUE;
 static    int                   TIME_fdWake[2] = { -1, -1 };
@@ -137,7 +138,7 @@ static int TIME_MMSysTimeCallback(void)
 static    int				nSizeLpTimers;
 static    LPWINE_TIMERENTRY		lpTimers;
 
-    LPWINE_TIMERENTRY   timer, *ptimer, *next_ptimer;
+    WINE_TIMERENTRY *timer, *next;
     int			idx;
     DWORD               cur_time;
     int delta_time, ret_time = -1;
@@ -160,9 +161,8 @@ static    LPWINE_TIMERENTRY		lpTimers;
     cur_time = GetTickCount();
 
     EnterCriticalSection(&WINMM_cs);
-    for (ptimer = &TIME_TimersList; *ptimer != NULL; ) {
-        timer = *ptimer;
-        next_ptimer = &timer->lpNext;
+    LIST_FOR_EACH_ENTRY_SAFE( timer, next, &timer_list, WINE_TIMERENTRY, entry )
+    {
         delta_time = timer->dwTriggerTime - cur_time;
         if (delta_time <= 0)
         {
@@ -188,8 +188,7 @@ static    LPWINE_TIMERENTRY		lpTimers;
             /* TIME_ONESHOT is defined as 0 */
             if (!(timer->wFlags & TIME_PERIODIC))
             {
-                /* unlink timer from timers list */
-                *ptimer = *next_ptimer;
+                list_remove( &timer->entry );
                 HeapFree(GetProcessHeap(), 0, timer);
 
                 /* We don't need to trigger oneshots again */
@@ -209,8 +208,6 @@ static    LPWINE_TIMERENTRY		lpTimers;
         {
             if (ret_time == -1 || ret_time > delta_time) ret_time = delta_time;
         }
-
-        ptimer = next_ptimer;
     }
     LeaveCriticalSection(&WINMM_cs);
 
@@ -277,10 +274,9 @@ static DWORD CALLBACK TIME_MMSysTimeThread(LPVOID arg)
 /**************************************************************************
  * 				TIME_MMTimeStart
  */
-void	TIME_MMTimeStart(void)
+static void TIME_MMTimeStart(void)
 {
     if (!TIME_hMMTimer) {
-        TIME_TimersList = NULL;
         if (pipe(TIME_fdWake) < 0)
         {
             TIME_fdWake[0] = TIME_fdWake[1] = -1;
@@ -316,7 +312,6 @@ void	TIME_MMTimeStop(void)
         TIME_hMMTimer = 0;
         TIME_cbcrst.DebugInfo->Spare[0] = 0;
         DeleteCriticalSection(&TIME_cbcrst);
-        TIME_TimersList = NULL;
     }
 }
 
@@ -369,12 +364,10 @@ WORD	TIME_SetEventInternal(UINT wDelay, UINT wResol,
 
     EnterCriticalSection(&WINMM_cs);
 
-    for (lpTimer = TIME_TimersList; lpTimer != NULL; lpTimer = lpTimer->lpNext) {
-	wNewID = max(wNewID, lpTimer->wTimerID);
-    }
+    LIST_FOR_EACH_ENTRY( lpTimer, &timer_list, WINE_TIMERENTRY, entry )
+        wNewID = max(wNewID, lpTimer->wTimerID);
 
-    lpNewTimer->lpNext = TIME_TimersList;
-    TIME_TimersList = lpNewTimer;
+    list_add_head( &timer_list, &lpNewTimer->entry );
     lpNewTimer->wTimerID = wNewID + 1;
 
     LeaveCriticalSection(&WINMM_cs);
@@ -405,16 +398,16 @@ MMRESULT WINAPI timeSetEvent(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc,
  */
 MMRESULT WINAPI timeKillEvent(UINT wID)
 {
-    LPWINE_TIMERENTRY   lpSelf = NULL, *lpTimer;
+    WINE_TIMERENTRY *lpSelf = NULL, *lpTimer;
 
     TRACE("(%u)\n", wID);
     EnterCriticalSection(&WINMM_cs);
     /* remove WINE_TIMERENTRY from list */
-    for (lpTimer = &TIME_TimersList; *lpTimer; lpTimer = &(*lpTimer)->lpNext) {
-	if (wID == (*lpTimer)->wTimerID) {
-            lpSelf = *lpTimer;
-            /* unlink timer of id 'wID' */
-            *lpTimer = (*lpTimer)->lpNext;
+    LIST_FOR_EACH_ENTRY( lpTimer, &timer_list, WINE_TIMERENTRY, entry )
+    {
+	if (wID == lpTimer->wTimerID) {
+            lpSelf = lpTimer;
+            list_remove( &lpTimer->entry );
 	    break;
 	}
     }
diff --git a/dlls/winmm/winemm.h b/dlls/winmm/winemm.h
index ed9e9f3..72de79a 100644
--- a/dlls/winmm/winemm.h
+++ b/dlls/winmm/winemm.h
@@ -241,7 +241,6 @@ LPWINE_MMIO     MMIO_Get(HMMIO h);
 
 WORD            TIME_SetEventInternal(UINT wDelay, UINT wResol, LPTIMECALLBACK lpFunc,
                                       DWORD dwUser, UINT wFlags);
-void    	TIME_MMTimeStart(void);
 void		TIME_MMTimeStop(void);
 
 /* Global variables */




More information about the wine-cvs mailing list