Allow UserYield16 to be called from 32-bit thread.

diff --git a/windows/queue.c b/windows/queue.c
index a8ef93f..125b18b 100644
--- a/windows/queue.c
+++ b/windows/queue.c
@@ -1487,25 +1487,28 @@
  */
 void WINAPI UserYield16(void)
 {
-    TDB *pCurTask = (TDB *)GlobalLock16( GetCurrentTask() );
-    MESSAGEQUEUE *queue = (MESSAGEQUEUE *)QUEUE_Lock( pCurTask->hQueue );
-
-    if ( !THREAD_IsWin16( THREAD_Current() ) )
-    {
-        FIXME(task, "called for Win32 thread (%04x)!\n", THREAD_Current()->teb_sel);
-        QUEUE_Unlock( queue );
-        return;
-    }
+    MESSAGEQUEUE *queue;
 
     /* Handle sent messages */
+    queue = (MESSAGEQUEUE *)QUEUE_Lock( GetFastQueue16() );
+
     while (queue && (queue->wakeBits & QS_SENDMESSAGE))
         QUEUE_ReceiveMessage( queue );
 
     QUEUE_Unlock( queue );
     
-    OldYield16();
+    /* Yield */
+    if ( THREAD_IsWin16( THREAD_Current() ) )
+        OldYield16();
+    else
+    {
+        SYSLEVEL_LeaveWin16Lock();
+        SYSLEVEL_EnterWin16Lock();
+    }
 
-    queue = (MESSAGEQUEUE *)QUEUE_Lock( pCurTask->hQueue );
+    /* Handle sent messages again */
+    queue = (MESSAGEQUEUE *)QUEUE_Lock( GetFastQueue16() );
+
     while (queue && (queue->wakeBits & QS_SENDMESSAGE))
         QUEUE_ReceiveMessage( queue );