DWORD VmDnsForwarderInit( PVMDNS_FORWARDER_CONTEXT* ppForwarder ) { DWORD dwError = ERROR_SUCCESS; PVMDNS_FORWARDER_CONTEXT pForwarderContext = NULL; BAIL_ON_VMDNS_INVALID_POINTER(ppForwarder, dwError); dwError = VmDnsAllocateMemory( sizeof(VMDNS_FORWARDER_CONTEXT), (PVOID*)&pForwarderContext); BAIL_ON_VMDNS_ERROR(dwError); dwError = VmDnsAllocateRWLock(&pForwarderContext->pLock); BAIL_ON_VMDNS_ERROR(dwError); *ppForwarder = pForwarderContext; cleanup: return dwError; error: if (pForwarderContext) { VmDnsForwarderCleanup(pForwarderContext); } goto cleanup; }
DWORD VmDnsCacheInitialize( PVMDNS_CACHE_CONTEXT *ppContext ) { DWORD dwError = 0; PVMDNS_CACHE_CONTEXT pContext = NULL; dwError = VmDnsAllocateMemory( sizeof(VMDNS_CACHE_CONTEXT), (PVOID*)&pContext); BAIL_ON_VMDNS_ERROR(dwError); dwError = VmDnsZoneListInit(&pContext->pZoneList); BAIL_ON_VMDNS_ERROR(dwError); dwError = VmDnsCacheInitRefreshThread(pContext); BAIL_ON_VMDNS_ERROR(dwError); dwError = VmDnsAllocateRWLock(&pContext->pLock); BAIL_ON_VMDNS_ERROR(dwError); dwError = VmDnsCreateThread( pContext->pRefreshThread, FALSE, VmDnsCacheRefreshThread, pContext); BAIL_ON_VMDNS_ERROR(dwError); *ppContext = pContext; cleanup: return dwError; error: VmDnsCacheCleanup(pContext); goto cleanup; }