コード例 #1
0
DWORD
UmnSrvStartPollerThread(
    VOID
    )
{
    DWORD dwError = 0;
    BOOLEAN bDestroyOnError = FALSE;

    if (gbPollerThreadRunning)
    {
        dwError = EEXIST;
        BAIL_ON_UMN_ERROR(dwError);
    }

    bDestroyOnError = TRUE;

    dwError = pthread_cond_init(
                    &gSignalPoller,
                    NULL);
    BAIL_ON_UMN_ERROR(dwError);
    gbSignalPollerCreated = TRUE;
                    
    dwError = pthread_mutex_init(
                    &gSignalPollerMutex,
                    NULL);
    BAIL_ON_UMN_ERROR(dwError);
    gbSignalPollerMutexCreated = TRUE;

    gbPollerThreadShouldExit = FALSE;

    dwError = pthread_create(
                    &gPollerThread,
                    NULL,
                    UmnSrvPollerThreadRoutine,
                    NULL);
    BAIL_ON_UMN_ERROR(dwError);
    gbPollerThreadRunning = TRUE;

cleanup:
    return dwError;

error:
    if (bDestroyOnError)
    {
        UmnSrvStopPollerThread();
    }
    goto cleanup;
}
コード例 #2
0
NTSTATUS
SvcmStop(
    PLW_SVCM_INSTANCE pInstance
)
{
    UMN_LOG_VERBOSE("Shutting down threads");

    UmnSrvStopPollerThread();

    UmnSrvFreeConfig(gpAPIConfig);
    LW_ASSERT(pthread_rwlock_destroy(&gUmnConfigLock) == 0);

    UMN_LOG_INFO("Usermonitor Service exiting...");

    return 0;
}