[vlc-devel] commit: Win32: support cancellation through Asynchronus Procedure Call ( Rémi Denis-Courmont )

git version control git at videolan.org
Wed Aug 27 22:57:28 CEST 2008


vlc | branch: master | Rémi Denis-Courmont <rdenis at simphalempin.com> | Sat Aug 16 11:42:54 2008 +0300| [f442fe0d4a6f4d4204e0e185bed3523027f07636] | committer: Rémi Denis-Courmont 

Win32: support cancellation through Asynchronus Procedure Call

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=f442fe0d4a6f4d4204e0e185bed3523027f07636
---

 src/misc/threads.c |   13 ++++++++++++-
 1 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/src/misc/threads.c b/src/misc/threads.c
index f04cfa5..1f358e2 100644
--- a/src/misc/threads.c
+++ b/src/misc/threads.c
@@ -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;
 




More information about the vlc-devel mailing list