--- mstools/samples/ddeml/ddeprog/proghelp.c 2018/08/09 18:21:29 1.1 +++ mstools/samples/ddeml/ddeprog/proghelp.c 2018/08/09 18:23:26 1.1.1.2 @@ -12,7 +12,6 @@ typedef struct { HCONV hConv; DWORD idInst; - int cTransactionsInProgress; } THREADINFO; DWORD TlsIndex; @@ -30,14 +29,6 @@ HDDEDATA hData, DWORD dwData1, DWORD dwData2) { - THREADINFO *pti; - - switch (wType) { - case XTYP_XACT_COMPLETE: - pti = TlsGetValue(TlsIndex); - pti->cTransactionsInProgress--; - break; - } return(0); } @@ -58,9 +49,10 @@ IN PCONTEXT pctx OPTIONAL) UNREFERENCED_PARAMETER(pctx); switch (Reason) { - case DLL_THREAD_ATTACH: case DLL_PROCESS_ATTACH: TlsIndex = TlsAlloc(); + + case DLL_THREAD_ATTACH: pti = (THREADINFO *)LocalAlloc(LPTR, sizeof(THREADINFO)); if (!pti) { return(FALSE); @@ -72,7 +64,9 @@ IN PCONTEXT pctx OPTIONAL) case DLL_PROCESS_DETACH: pti = TlsGetValue(TlsIndex); LocalFree(pti); - TlsFree(TlsIndex); + if (Reason == DLL_PROCESS_DETACH) { + TlsFree(TlsIndex); + } break; } return TRUE; @@ -107,10 +101,7 @@ BOOL ConnectToProgman() /* * This API should be called when operations with progman are complete. * We shutdown DDEML here as well so we don't have to deal with it - * at DLL detatch time. FALSE is returned if there are any transactions - * still in progress. This lets the calling application know that it - * must wait awhile longer for progman to complete its processing and - * then try disconnecting again later. + * at DLL detatch time. */ BOOL DisconnectFromProgman() { @@ -118,10 +109,6 @@ BOOL DisconnectFromProgman() pti = TlsGetValue(TlsIndex); - if (pti->cTransactionsInProgress) { - return(FALSE); - } - if (!pti->idInst) { return(TRUE); } @@ -132,6 +119,7 @@ BOOL DisconnectFromProgman() } DdeUninitialize(pti->idInst); + pti->idInst = 0; return(TRUE); } @@ -158,7 +146,6 @@ LPCSTR pszExec) pti->hConv, 0, 0, XTYP_EXECUTE, TIMEOUT_ASYNC, &dwResult)) { return(FALSE); } - pti->cTransactionsInProgress++; return(TRUE); }