Added code to allow us to un-initialize the library when it is unloaded. These changes allow library un-initialization to work for Windows. More code needs to be added to un-initialize the library under Linux.

This commit is contained in:
Juan Carlos Luciani
2007-01-29 10:46:18 +00:00
parent de7dbd7b01
commit b5a6a452e8
6 changed files with 264 additions and 19 deletions

View File

@@ -179,9 +179,7 @@ BOOL APIENTRY DllMain(
case DLL_PROCESS_DETACH:
{
/* Don't uninitialize on windows
tbd
*/
UnInitializeLibrary();
break;
}
}

View File

@@ -45,6 +45,9 @@ typedef struct _NormalizedHostNameCacheEntry
//===[ Global variables ]==================================================
static
BOOLEAN hostNameNormalizationInitialized = FALSE;
// Normalized host name cache list head
static
LIST_ENTRY normalizedHostNameCacheListHead;
@@ -64,6 +67,7 @@ char mechConfigFolder[MAX_PATH + sizeof(mechConfigFolderPartialPath)];
// Path separator
char pathCharString[] = "\\";
//++=======================================================================
CasaStatus
CreateUserMutex(
@@ -585,11 +589,13 @@ InitializeHostNameNormalization(void)
NULL);
if (hNormalizedHostNameCacheMutex != NULL)
{
hostNameNormalizationInitialized = TRUE;
retStatus = CASA_STATUS_SUCCESS;
}
else
{
DbgTrace(0, "-InitializeHostNameNormalization- CreateMutex failed, error = %d\n", GetLastError());
WSACleanup();
}
}
else
@@ -603,6 +609,63 @@ InitializeHostNameNormalization(void)
}
//++=======================================================================
void
UnInitializeHostNameNormalization(void)
//
// Arguments:
//
// Returns:
//
// Abstract:
//
// Notes:
//
// L2
//=======================================================================--
{
LIST_ENTRY *pListEntry;
NormalizedHostNameCacheEntry *pEntry = NULL;
DbgTrace(1, "-UnInitializeHostNameNormalization- Start\n", 0);
// Proceed if initialization succeeded
if (hostNameNormalizationInitialized)
{
// Un-initialize winsock
WSACleanup();
// Free up any normalized host names in our cache
pListEntry = normalizedHostNameCacheListHead.Flink;
while (pListEntry != &normalizedHostNameCacheListHead)
{
// Get pointer to the entry
pEntry = CONTAINING_RECORD(pListEntry, NormalizedHostNameCacheEntry, listEntry);
// Remove the entry from the list
RemoveEntryList(pListEntry);
// Free the entry
if (pEntry->pHostName)
free(pEntry->pHostName);
if (pEntry->pNormalizedHostName)
free(pEntry->pNormalizedHostName);
free(pEntry);
// Try to go to the next entry
pListEntry = normalizedHostNameCacheListHead.Flink;
}
// Forget about being initialized
hostNameNormalizationInitialized = FALSE;
}
DbgTrace(1, "-UnInitializeHostNameNormalization- End", 0);
}
//++=======================================================================
//++=======================================================================
//++=======================================================================

View File

@@ -359,8 +359,8 @@ InternalRpc(
#define RPC_TARGET_FMT_STRING "CasaAuthTokenSvc/Rpc?method=%s"
#ifndef CASA_STATUS_INVALID_SERVER_CERTIFICATE
#define CASA_STATUS_INVALID_SERVER_CERTIFICATE ((CasaStatus)0x00000023)
#endif
#define CASA_STATUS_INVALID_SERVER_CERTIFICATE ((CasaStatus)0x00000023)
#endif
CasaStatus retStatus = CASA_STATUS_SUCCESS;
char *pRpcTarget;
@@ -729,7 +729,7 @@ InternalRpc(
CASA_STATUS_INSUFFICIENT_RESOURCES);
}
DbgTrace(1, "-InternalRpc- End, retStatus = %d\n", retStatus);
DbgTrace(1, "-InternalRpc- End, retStatus = %0X\n", retStatus);
return retStatus;
}
@@ -778,7 +778,7 @@ Rpc(
} while (CasaStatusCode(retStatus) == CASA_STATUS_AUTH_SERVER_UNAVAILABLE
&& retries < MAX_RPC_RETRIES);
DbgTrace(1, "-Rpc- End, retStatus = %d\n", retStatus);
DbgTrace(1, "-Rpc- End, retStatus = %0X\n", retStatus);
return retStatus;
}
@@ -811,6 +811,29 @@ InitializeRpc(void)
}
//++=======================================================================
void
UnInitializeRpc(void)
//
// Arguments:
//
// Returns:
//
// Abstract:
//
// Notes:
//
// L2
//=======================================================================--
{
DbgTrace(1, "-UnInitializeRpc- Start\n", 0);
// Nothing to do for windows
DbgTrace(1, "-UnInitializeRpc- End\n", 0);
}
//++=======================================================================
//++=======================================================================
//++=======================================================================