codeweavers' DDE patch

Dmitry Timoshkov dmitry at baikal.ru
Sat May 24 09:53:19 CDT 2003


First of all, Eric, thank you very much for reviewing these patches,
it's very important to do the right thing in such a fragile area as DDE.

"Eric Pouech" <pouech-eric at wanadoo.fr> wrote:

> 1/
> diff -u wine/dlls/user/dde/server.c:1.11 wine/dlls/user/dde/server.c:1.12
> --- wine/dlls/user/dde/server.c:1.11 Sat May 24 10:42:52 2003
> +++ wine/dlls/user/dde/server.c Sat May 24 10:42:52 2003
> @@ -101,7 +101,7 @@
>   if (DdeCmpStringHandles(hszItem, pLink->hszItem) == 0)
>   {
>       hDdeData = WDML_InvokeCallback(pInstance, XTYP_ADVREQ, 
> pLink->uFmt, pLink->hConv,
> -    hszTopic, hszItem, 0, count--, 0);
> +    hszTopic, hszItem, 0, 0, 0);
> 
>       if (hDdeData == (HDDEDATA)CBR_BLOCK)
>       {
> why did you remove the count-- reference as dwData1 ?

Probably I was fooled by my tests in which I couldn't reproduce a not zero
dwData1. I just retested, actually that part can be reverted, it doesn't effect
the application I'm worrying about.

> 2/
> Index: wine/dlls/user/dde/server.c
> diff -u wine/dlls/user/dde/server.c:1.11 wine/dlls/user/dde/server.c:1.12
> --- wine/dlls/user/dde/server.c:1.11 Sat May 24 10:42:52 2003
> +++ wine/dlls/user/dde/server.c Sat May 24 10:42:52 2003
> @@ -570,7 +581,7 @@
>   break;
>       default:
>           {
> -     HGLOBAL hMem = WDML_DataHandle2Global(hDdeData, FALSE, FALSE, 
> FALSE, FALSE);
> +     HGLOBAL hMem = WDML_DataHandle2Global(hDdeData, TRUE, TRUE, FALSE, 
> FALSE);
>       if (!PostMessageA(pConv->hwndClient, WM_DDE_DATA, 
> (WPARAM)pConv->hwndServer,
>         ReuseDDElParam(pXAct->lParam, WM_DDE_REQUEST, WM_DDE_DATA,
>        (UINT)hMem, (UINT)pXAct->atom)))
> 
> which did you change fResponse (or fAckReq) and fRelease to TRUE ?
> since the server side isn't ready to handle the ack messages the client 
> will in such cases, I'm not sure it's worth it. Moreover, it will 
> complexify the memory management and create more leaks than already exist.

It's fResponse and fRelease which were changed.

Since we handle WM_DDE_REQUEST here, we must set fResponse to TRUE according
to MSDN. And I retested again under both win2k and Wine, and fRelease change
can be reverted. Setting it to FALSE doesn't effect my applications.

Is the attached patch acceptable for you?

-- 
Dmitry.
-------------- next part --------------
--- cvs/hq/wine/dlls/user/dde/server.c	Tue May 20 14:07:31 2003
+++ wine/dlls/user/dde/server.c	Sat May 24 23:30:52 2003
@@ -101,7 +101,7 @@ BOOL WINAPI DdePostAdvise(DWORD idInst, 
 	if (DdeCmpStringHandles(hszItem, pLink->hszItem) == 0)
 	{
 	    hDdeData = WDML_InvokeCallback(pInstance, XTYP_ADVREQ, pLink->uFmt, pLink->hConv,
-					   hszTopic, hszItem, 0, 0, 0);
+					   hszTopic, hszItem, 0, count--, 0);
 
 	    if (hDdeData == (HDDEDATA)CBR_BLOCK)
 	    {
@@ -581,7 +581,7 @@ static	WDML_QUEUE_STATE WDML_ServerHandl
 	break;
     default:
         {
-	    HGLOBAL	hMem = WDML_DataHandle2Global(hDdeData, TRUE, TRUE, FALSE, FALSE);
+	    HGLOBAL	hMem = WDML_DataHandle2Global(hDdeData, TRUE, FALSE, FALSE, FALSE);
 	    if (!PostMessageA(pConv->hwndClient, WM_DDE_DATA, (WPARAM)pConv->hwndServer,
 			      ReuseDDElParam(pXAct->lParam, WM_DDE_REQUEST, WM_DDE_DATA,
 					     (UINT)hMem, (UINT)pXAct->atom)))


More information about the wine-devel mailing list