From: RĂ©mi Denis-Courmont Date: Sun, 2 Aug 2009 12:01:04 +0000 (+0300) Subject: Win32: privatize vlc_timer layout too X-Git-Tag: 1.1.0-ff~4620 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=c159f79f2a5b00556347d302e9fb8221cfb0d7fe;p=vlc Win32: privatize vlc_timer layout too --- diff --git a/include/vlc_threads.h b/include/vlc_threads.h index 1e4324f1da..eb27c498d8 100644 --- a/include/vlc_threads.h +++ b/include/vlc_threads.h @@ -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 diff --git a/src/misc/w32thread.c b/src/misc/w32thread.c index 5b337e4f70..c461090863 100644 --- a/src/misc/w32thread.c +++ b/src/misc/w32thread.c @@ -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 (); }