]> git.sesse.net Git - vlc/commitdiff
Win32: privatize vlc_timer layout too
authorRémi Denis-Courmont <remi@remlab.net>
Sun, 2 Aug 2009 12:01:04 +0000 (15:01 +0300)
committerRémi Denis-Courmont <remi@remlab.net>
Sun, 2 Aug 2009 12:01:04 +0000 (15:01 +0300)
include/vlc_threads.h
src/misc/w32thread.c

index 1e4324f1da3de9b958cbf389383720bf5d63f293..eb27c498d8e04702f3383b8d91fac473cf9e1a6f 100644 (file)
@@ -134,14 +134,7 @@ typedef struct
 } vlc_rwlock_t;
 
 typedef DWORD   vlc_threadvar_t;
-typedef struct vlc_timer_t vlc_timer_t;
-struct vlc_timer_t
-{
-    HANDLE handle;
-    void (*func) (void *);
-    void *data;
-};
-
+typedef struct vlc_timer *vlc_timer_t;
 #endif
 
 #if defined( WIN32 ) && !defined ETIMEDOUT
index 5b337e4f705b813276e2a8baaf436e236af093ed..c461090863dca307b762b3a3b868b074e8524ea3 100644 (file)
@@ -601,35 +601,52 @@ void vlc_control_cancel (int cmd, ...)
 
 
 /*** Timers ***/
+struct vlc_timer
+{
+    HANDLE handle;
+    void (*func) (void *);
+    void *data;
+};
+
 static void CALLBACK vlc_timer_do (void *val, BOOLEAN timeout)
 {
-    vlc_timer_t *id = val;
+    struct vlc_timer *timer = val;
 
     assert (timeout);
-    id->func (id->data);
+    timer->func (timer->data);
 }
 
 int vlc_timer_create (vlc_timer_t *id, void (*func) (void *), void *data)
 {
-    id->func = func;
-    id->data = data;
-    id->handle = INVALID_HANDLE_VALUE;
+    struct vlc_timer *timer = malloc (sizeof (*timer));
+
+    if (timer == NULL)
+        return ENOMEM;
+    timer->func = func;
+    timer->data = data;
+    timer->handle = INVALID_HANDLE_VALUE;
+    *id = timer;
     return 0;
 }
 
 void vlc_timer_destroy (vlc_timer_t *id)
 {
-    if (id->handle != INVALID_HANDLE_VALUE)
-        DeleteTimerQueueTimer (NULL, id->handle, INVALID_HANDLE_VALUE);
+    struct vlc_timer *timer = *id;
+
+    if (timer->handle != INVALID_HANDLE_VALUE)
+        DeleteTimerQueueTimer (NULL, timer->handle, INVALID_HANDLE_VALUE);
+    free (timer);
 }
 
 void vlc_timer_schedule (vlc_timer_t *id, bool absolute,
                          mtime_t value, mtime_t interval)
 {
-    if (id->handle != INVALID_HANDLE_VALUE)
+    struct vlc_timer *timer = *id;
+
+    if (timer->handle != INVALID_HANDLE_VALUE)
     {
-        DeleteTimerQueueTimer (NULL, id->handle, NULL);
-        id->handle = INVALID_HANDLE_VALUE;
+        DeleteTimerQueueTimer (NULL, timer->handle, NULL);
+        timer->handle = INVALID_HANDLE_VALUE;
     }
     if (value == 0)
         return; /* Disarm */
@@ -638,8 +655,8 @@ void vlc_timer_schedule (vlc_timer_t *id, bool absolute,
         value -= mdate ();
     value = (value + 999) / 1000;
     interval = (interval + 999) / 1000;
-    if (!CreateTimerQueueTimer (&id->handle, NULL, vlc_timer_do, id, value,
-                                interval, WT_EXECUTEDEFAULT))
+    if (!CreateTimerQueueTimer (&timer->handle, NULL, vlc_timer_do, timer,
+                                value, interval, WT_EXECUTEDEFAULT))
         abort ();
 }