From 2fc309624b798a84ea0e7a29fca6b24a34fd69d9 Mon Sep 17 00:00:00 2001 From: Richard Barry Date: Sun, 21 Nov 2010 11:34:12 +0000 Subject: [PATCH] Added vPortCheckCorrectThreadIsRunning() function to the Win32 port layer to trap when Windows is not running the correct thread and try and catch it. --- Source/portable/MSVC-MingW/port.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/Source/portable/MSVC-MingW/port.c b/Source/portable/MSVC-MingW/port.c index 35f3c95c93..f89b2d0818 100644 --- a/Source/portable/MSVC-MingW/port.c +++ b/Source/portable/MSVC-MingW/port.c @@ -532,4 +532,19 @@ long lMutexNeedsReleasing; ReleaseMutex( pvInterruptEventMutex ); } } +/*-----------------------------------------------------------*/ + +void vPortCheckCorrectThreadIsRunning( void ) +{ +xThreadState *pxThreadState = ( xThreadState * ) *( ( unsigned long * ) pxCurrentTCB ); + + /* When switching threads, Windows does not always seem to run the selected + thread immediately. This function can be called to check if the thread + that is currently running is the thread that is responsible for executing + the task selected by the real time scheduler. */ + if( GetCurrentThread() != pxThreadState->pvThread ) + { + SwitchToThread(); + } +}