]> git.sesse.net Git - vlc/commitdiff
Win32: support cancellation through Asynchronus Procedure Call
authorRémi Denis-Courmont <rdenis@simphalempin.com>
Sat, 16 Aug 2008 08:42:54 +0000 (11:42 +0300)
committerRémi Denis-Courmont <rdenis@simphalempin.com>
Wed, 27 Aug 2008 19:43:05 +0000 (22:43 +0300)
src/misc/threads.c

index f04cfa51a047454a11822639534131820281d7ef..1f358e2b32517a01580f448c63b2c02eba6df360 100644 (file)
@@ -568,6 +568,15 @@ int vlc_clone (vlc_thread_t *p_handle, void * (*entry) (void *), void *data,
     return ret;
 }
 
+#if defined (WIN32)
+/* APC procedure for thread cancellation */
+static void CALLBACK vlc_cancel_self (ULONG_PTR dummy)
+{
+    (void)dummy;
+    vlc_control_cancel (VLC_DO_CANCEL);
+}
+#endif
+
 /**
  * Marks a thread as cancelled. Next time the target thread reaches a
  * cancellation point (while not having disabled cancellation), it will
@@ -579,6 +588,8 @@ void vlc_cancel (vlc_thread_t thread_id)
 {
 #if defined (LIBVLC_USE_PTHREAD)
     pthread_cancel (thread_id);
+#elif defined (WIN32)
+    QueueUserAPC (vlc_cancel_self, thread_id->handle, 0);
 #endif
 }
 
@@ -864,7 +875,7 @@ void vlc_control_cancel (int cmd, ...)
 {
 #ifdef LIBVLC_USE_PTHREAD
     (void) cmd;
-    abort();
+    assert (0);
 #else
     va_list ap;