user: Use DDE critical section exclusively for instance list protection.
diff --git a/dlls/user/dde_server.c b/dlls/user/dde_server.c
index 5f0f5ee..545b80e 100644
--- a/dlls/user/dde_server.c
+++ b/dlls/user/dde_server.c
@@ -69,17 +69,13 @@
 
     TRACE("(%d,%p,%p)\n", idInst, hszTopic, hszItem);
 
-    EnterCriticalSection(&WDML_CritSect);
-
     pInstance = WDML_GetInstance(idInst);
 
     if (pInstance == NULL || pInstance->links == NULL)
-    {
-	goto theError;
-    }
+        return FALSE;
 
     atom = WDML_MakeAtomFromHsz(hszItem);
-    if (!atom) goto theError;
+    if (!atom) return FALSE;
 
     /* first compute the number of links which will trigger a message */
     count = 0;
@@ -145,10 +141,9 @@
 	    }
 	}
     }
-    LeaveCriticalSection(&WDML_CritSect);
     return TRUE;
+
  theError:
-    LeaveCriticalSection(&WDML_CritSect);
     if (atom) GlobalDeleteAtom(atom);
     return FALSE;
 }
@@ -179,8 +174,6 @@
 
     TRACE("(%d,%p,%p,%x)\n", idInst, hsz1, hsz2, afCmd);
 
-    EnterCriticalSection(&WDML_CritSect);
-
     /*  First check instance
      */
     pInstance = WDML_GetInstance(idInst);
@@ -188,7 +181,7 @@
     {
 	TRACE("Instance not found as initialised\n");
 	/*  Nothing has been initialised - exit now ! can return TRUE since effect is the same */
-	goto theError;
+        return NULL;
     }
 
     if (hsz2 != 0L)
@@ -197,7 +190,7 @@
 	 */
 	pInstance->lastError = DMLERR_INVALIDPARAMETER;
 	WARN("Reserved parameter no-zero !!\n");
-	goto theError;
+        return NULL;
     }
     if (hsz1 == 0 && !(afCmd & DNS_UNREGISTER))
     {
@@ -206,7 +199,7 @@
 	 */
 	TRACE("General unregister unexpected flags\n");
 	pInstance->lastError = DMLERR_INVALIDPARAMETER;
-	goto theError;
+        return NULL;
     }
 
     switch (afCmd & (DNS_REGISTER | DNS_UNREGISTER))
@@ -217,7 +210,7 @@
 	{
 	    ERR("Trying to register already registered service!\n");
 	    pInstance->lastError = DMLERR_DLL_USAGE;
-	    goto theError;
+            return NULL;
 	}
 
 	TRACE("Adding service name\n");
@@ -244,11 +237,9 @@
 
 	RegisterClassExW(&wndclass);
 
-	LeaveCriticalSection(&WDML_CritSect);
 	hwndServer = CreateWindowW(szServerNameClass, NULL,
 				   WS_POPUP, 0, 0, 0, 0,
 				   0, 0, 0, 0);
-	EnterCriticalSection(&WDML_CritSect);
 
 	SetWindowLongPtrW(hwndServer, GWL_WDML_INSTANCE, (ULONG_PTR)pInstance);
 	SetWindowLongPtrW(hwndServer, GWL_WDML_SERVER, (ULONG_PTR)pServer);
@@ -285,19 +276,14 @@
 	    /*  trying to filter where no service names !!
 	     */
 	    pInstance->lastError = DMLERR_DLL_USAGE;
-	    goto theError;
+            return NULL;
 	}
 	else
 	{
 	    pServer->filterOn = (afCmd & DNS_FILTERON) != 0;
 	}
     }
-    LeaveCriticalSection(&WDML_CritSect);
     return (HDDEDATA)TRUE;
-
- theError:
-    LeaveCriticalSection(&WDML_CritSect);
-    return FALSE;
 }
 
 /******************************************************************
@@ -998,13 +984,11 @@
 
     if (iMsg == WM_DESTROY)
     {
-	EnterCriticalSection(&WDML_CritSect);
 	pConv = WDML_GetConvFromWnd(hwndServer);
 	if (pConv && !(pConv->wStatus & ST_TERMINATED))
 	{
 	    WDML_ServerHandleTerminate(pConv, NULL);
 	}
-	LeaveCriticalSection(&WDML_CritSect);
     }
     if (iMsg < WM_DDE_FIRST || iMsg > WM_DDE_LAST)
     {
@@ -1012,25 +996,23 @@
                                              DefWindowProcA(hwndServer, iMsg, wParam, lParam);
     }
 
-    EnterCriticalSection(&WDML_CritSect);
-
     pInstance = WDML_GetInstanceFromWnd(hwndServer);
     pConv = WDML_GetConvFromWnd(hwndServer);
 
     if (!pConv)
     {
 	ERR("Got a message (%x) on a not known conversation, dropping request\n", iMsg);
-	goto theError;
+        return 0;
     }
     if (pConv->hwndClient != WIN_GetFullHandle( (HWND)wParam ) || pConv->hwndServer != hwndServer)
     {
 	ERR("mismatch between C/S windows and converstation\n");
-	goto theError;
+        return 0;
     }
     if (pConv->instance != pInstance || pConv->instance == NULL)
     {
 	ERR("mismatch in instances\n");
-	goto theError;
+        return 0;
     }
 
     switch (iMsg)
@@ -1083,7 +1065,6 @@
 	    WDML_FreeTransaction(pInstance, pXAct, TRUE);
 	}
     }
- theError:
-    LeaveCriticalSection(&WDML_CritSect);
+
     return 0;
 }