예제 #1
0
NTSTATUS
SrvElementsShutdown(
    VOID
    )
{
    NTSTATUS ntStatus = STATUS_SUCCESS;

    ntStatus = SrvTimerIndicateStop(&gSrvElements.timer);
    BAIL_ON_NT_STATUS(ntStatus);

    SrvTimerFreeContents(&gSrvElements.timer);

    if (gSrvElements.pHintsBuffer != NULL)
    {
        SrvFreeMemory(gSrvElements.pHintsBuffer);
        gSrvElements.pHintsBuffer = NULL;
        gSrvElements.ulHintsLength = 0;
    }

    if (gSrvElements.pStatsLock)
    {
        pthread_rwlock_destroy(&gSrvElements.statsLock);
        gSrvElements.pStatsLock = NULL;
    }

    SrvElementsResourcesShutdown();

error:

    return ntStatus;
}
예제 #2
0
NTSTATUS
SrvElementsShutdown(
    VOID
    )
{
    NTSTATUS ntStatus = STATUS_SUCCESS;

    ntStatus = SrvTimerIndicateStop(&gSrvElements.timer);
    BAIL_ON_NT_STATUS(ntStatus);

    SrvTimerFreeContents(&gSrvElements.timer);

    if (gSrvElements.pHintsBuffer != NULL)
    {
        SrvFreeMemory(gSrvElements.pHintsBuffer);
        gSrvElements.pHintsBuffer = NULL;
        gSrvElements.ulHintsLength = 0;
    }

    if (gSrvElements.pStatsLock)
    {
        pthread_rwlock_destroy(&gSrvElements.statsLock);
        gSrvElements.pStatsLock = NULL;
    }

    SrvElementsResourcesShutdown();

    SrvElementsConfigShutdown();

    if (gSrvElements.pMutex)
    {
        pthread_mutex_destroy(&gSrvElements.mutex);
        gSrvElements.pMutex = NULL;
    }

    if (gSrvElements.pAsyncCloseFileTracker)
    {
        SrvAsyncCloseFileTrackerWaitPending(gSrvElements.pAsyncCloseFileTracker);
        SrvAsyncCloseFileTrackerFree(gSrvElements.pAsyncCloseFileTracker);
        gSrvElements.pAsyncCloseFileTracker = NULL;
    }

error:

    return ntStatus;
}