//------------------------------------------------------------------------------
static void* eventProcessThread(void* pArg_p)
{
    struct timespec curTime;
    struct timespec timeout;

    UNUSED_PARAMETER(pArg_p);

    while (!instance_l.fStopProcessThread)
    {
        clock_gettime(CLOCK_REALTIME, &curTime);
        timeout.tv_sec = 0;
        timeout.tv_nsec = 50000 * 1000;
        TIMESPECADD(&timeout, &curTime);

        if (sem_timedwait(instance_l.semUserData, &timeout) == 0)
        {
            if (eventucal_getEventCountCircbuf(kEventQueueUInt) > 0)
                eventucal_processEventCircbuf(kEventQueueUInt);
        }
    }

    instance_l.fStopProcessThread = FALSE;

    return NULL;
}
//------------------------------------------------------------------------------
tOplkError timesyncucal_waitSyncEvent(ULONG timeout_p)
{
    int                 semRet;
    struct timespec     currentTime;
    struct timespec     semTimeout;

    if (timeout_p != 0)
    {
        if (timeout_p >= 1000000)
        {
            semTimeout.tv_sec = (timeout_p / 1000000);
            semTimeout.tv_nsec = (timeout_p % 1000000) * 1000;
        }
        else
        {
            semTimeout.tv_sec = 0;
            semTimeout.tv_nsec = timeout_p * 1000;
        }
        clock_gettime(CLOCK_REALTIME, &currentTime);
        TIMESPECADD(&semTimeout, &currentTime);
        semRet = sem_timedwait(instance_l.syncSem, &semTimeout);
    }
    else
    {
        semRet = sem_wait(instance_l.syncSem);
    }

    if (semRet == 0)
        return kErrorOk;
    else
        return kErrorGeneralError;
}
//------------------------------------------------------------------------------
static void * eventThread(void *arg)
{
    struct timespec         curTime, timeout;
    tEventkCalInstance*     pInstance = (tEventkCalInstance*)arg;

    while (!pInstance->fStopThread)
    {
        clock_gettime(CLOCK_REALTIME, &curTime);
        timeout.tv_sec = 0;
        timeout.tv_nsec = 50000 * 1000;
        TIMESPECADD(&timeout, &curTime);

        if (sem_timedwait(pInstance->semKernelData, &timeout) == 0)
        {
            /* first handle kernel internal events --> higher priority! */
            if (eventkcal_getEventCountCircbuf(kEventQueueKInt) > 0)
            {
                eventkcal_processEventCircbuf(kEventQueueKInt);
            }
            else
            {
                if (eventkcal_getEventCountCircbuf(kEventQueueU2K) > 0)
                {
                    eventkcal_processEventCircbuf(kEventQueueU2K);
                }
            }
        }
    }

    pInstance->fStopThread = FALSE;
    return 0;
}