[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