[vlc-devel] commit: WinCE: do an ugly thread cancellation without using QueueUserAPC ( Geoffroy Couprie )

git version control git at videolan.org
Mon Oct 6 11:13:23 CEST 2008


vlc | branch: master | Geoffroy Couprie <geo.couprie at gmail.com> | Mon Oct  6 11:12:59 2008 +0200| [272308b2004fac7f4474a80764c20fd5ba5f13c7] | committer: Geoffroy Couprie 

WinCE: do an ugly thread cancellation without using QueueUserAPC

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

 src/misc/mtime.c   |    2 +-
 src/misc/threads.c |   17 +++++++++++++++++
 2 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/src/misc/mtime.c b/src/misc/mtime.c
index c9248ae..c5b1bc2 100644
--- a/src/misc/mtime.c
+++ b/src/misc/mtime.c
@@ -53,7 +53,7 @@
 #endif
 
 #if defined( UNDER_CE )
-#   include <windows.h>
+#   define SleepEx(a,b)  Sleep(a)
 #endif
 
 #if defined(HAVE_SYS_TIME_H)
diff --git a/src/misc/threads.c b/src/misc/threads.c
index 19f4ded..e1d6255 100644
--- a/src/misc/threads.c
+++ b/src/misc/threads.c
@@ -49,6 +49,10 @@ static vlc_threadvar_t cancel_key;
 # include <execinfo.h>
 #endif
 
+#ifdef UNDER_CE
+# define WaitForSingleObjectEx(a,b,c) WaitForSingleObject(a,b)
+#endif
+
 /**
  * Print a backtrace to the standard error for debugging purpose.
  */
@@ -689,6 +693,19 @@ void vlc_cancel (vlc_thread_t thread_id)
 {
 #if defined (LIBVLC_USE_PTHREAD_CANCEL)
     pthread_cancel (thread_id);
+#elif defined (UNDER_CE)
+    /* HACK:There is no way to use something
+     * like QueueUserAPC on Windows CE, so I rely
+     * on some crappy arch specific code */
+    CONTEXT context;
+    context.ContextFlags = CONTEXT_CONTROL;
+    GetThreadContext (thread_id->handle, &context);
+    /* Setting the instruction pointer for the canceled thread */
+#if defined(_ARM_) || defined(ARM)
+    context.Pc = (DWORD_PTR) vlc_cancel_self;
+#endif
+    SetThreadContext (thread_id->handle, &context);
+
 #elif defined (WIN32)
     QueueUserAPC (vlc_cancel_self, thread_id->handle, 0);
 #else




More information about the vlc-devel mailing list