Made access to the wnd struct thread-safe.

diff --git a/windows/queue.c b/windows/queue.c
index 63e756d..5ed0024 100644
--- a/windows/queue.c
+++ b/windows/queue.c
@@ -924,6 +924,7 @@
                                        smsg->lParam );
 
         queue->GetMessageExtraInfoVal = extraInfo;  /* Restore extra info */
+        WIN_ReleaseWndPtr(wndPtr);
 	TRACE(sendmsg,"result =  %08x\n", (unsigned)result );
     }
     else WARN(sendmsg, "\trcm: bad hWnd\n");
@@ -1090,13 +1091,17 @@
 	 if( (wndPtr = WIN_FindWndPtr( hwnd )) ) 
            {
                hQueue = wndPtr->hmemTaskQ;
+               WIN_ReleaseWndPtr(wndPtr);
            }
     }
 
     if( (hwnd = GetSysModalWindow16()) )
     {
       if( (wndPtr = WIN_FindWndPtr( hwnd )) )
+        {
             hQueue = wndPtr->hmemTaskQ;
+            WIN_ReleaseWndPtr(wndPtr);
+        }
     }
 
     if (hQueue)
@@ -1309,10 +1314,13 @@
  */
 HTASK16 WINAPI GetWindowTask16( HWND16 hwnd )
 {
+    HTASK16 retvalue;
     WND *wndPtr = WIN_FindWndPtr( hwnd );
 
     if (!wndPtr) return 0;
-    return QUEUE_GetQueueTask( wndPtr->hmemTaskQ );
+    retvalue = QUEUE_GetQueueTask( wndPtr->hmemTaskQ );
+    WIN_ReleaseWndPtr(wndPtr);
+    return retvalue;
 }
 
 /***********************************************************************
@@ -1321,12 +1329,14 @@
 DWORD WINAPI GetWindowThreadProcessId( HWND hwnd, LPDWORD process )
 {
     HTASK16 htask;
+    DWORD retvalue;
     TDB	*tdb;
 
     WND *wndPtr = WIN_FindWndPtr( hwnd );
 
     if (!wndPtr) return 0;
     htask=QUEUE_GetQueueTask( wndPtr->hmemTaskQ );
+    WIN_ReleaseWndPtr(wndPtr);
     tdb = (TDB*)GlobalLock16(htask);
     if (!tdb || !tdb->thdb) return 0;
     if (process) *process = (DWORD)tdb->thdb->process->server_pid;