BOOL ChangeTimerQueueTimer(HANDLE TimerQueue, HANDLE Timer, ULONG DueTime, ULONG Period) { struct timespec CurrentTime; WINPR_TIMER_QUEUE* timerQueue; WINPR_TIMER_QUEUE_TIMER* timer; if (!TimerQueue || !Timer) return FALSE; timespec_gettimeofday(&CurrentTime); timerQueue = (WINPR_TIMER_QUEUE*) TimerQueue; timer = (WINPR_TIMER_QUEUE_TIMER*) Timer; pthread_mutex_lock(&(timerQueue->cond_mutex)); RemoveTimerQueueTimer(&(timerQueue->activeHead), timer); RemoveTimerQueueTimer(&(timerQueue->inactiveHead), timer); timer->DueTime = DueTime; timer->Period = Period; timer->next = NULL; timespec_copy(&(timer->StartTime), &CurrentTime); timespec_add_ms(&(timer->StartTime), DueTime); timespec_copy(&(timer->ExpirationTime), &(timer->StartTime)); InsertTimerQueueTimer(&(timerQueue->activeHead), timer); pthread_cond_signal(&(timerQueue->cond)); pthread_mutex_unlock(&(timerQueue->cond_mutex)); return TRUE; }
static void* TimerQueueThread(void* arg) { int status; struct timespec timeout; WINPR_TIMER_QUEUE* timerQueue = (WINPR_TIMER_QUEUE*) arg; while (1) { pthread_mutex_lock(&(timerQueue->cond_mutex)); timespec_gettimeofday(&timeout); if (!timerQueue->activeHead) { timespec_add_ms(&timeout, 50); } else { if (timespec_compare(&timeout, &(timerQueue->activeHead->ExpirationTime)) < 0) { timespec_copy(&timeout, &(timerQueue->activeHead->ExpirationTime)); } } status = pthread_cond_timedwait(&(timerQueue->cond), &(timerQueue->cond_mutex), &timeout); FireExpiredTimerQueueTimers(timerQueue); pthread_mutex_unlock(&(timerQueue->cond_mutex)); if (timerQueue->bCancelled) break; } return NULL; }
RequestParamsInternal(const RequestParamsInternal & param_private): _ssl_check(param_private._ssl_check), _redirection(param_private._redirection), _ca_path(param_private._ca_path), _cli_cert(param_private._cli_cert), _idlogpass(param_private._idlogpass), _callb(param_private._callb), _callb_userdata(param_private._callb_userdata), _call_loginpswwd(param_private._call_loginpswwd), _call_loginpswwd_userdata(param_private._call_loginpswwd_userdata), ops_timeout(), connexion_timeout(), agent_string(param_private.agent_string), _proto(param_private._proto), _session_flag(param_private._session_flag){ timespec_copy(&(connexion_timeout), &(param_private.connexion_timeout)); timespec_copy(&(ops_timeout), &(param_private.ops_timeout)); }
BOOL CreateTimerQueueTimer(PHANDLE phNewTimer, HANDLE TimerQueue, WAITORTIMERCALLBACK Callback, PVOID Parameter, DWORD DueTime, DWORD Period, ULONG Flags) { struct timespec CurrentTime; WINPR_TIMER_QUEUE* timerQueue; WINPR_TIMER_QUEUE_TIMER* timer; if (!TimerQueue) return FALSE; timespec_gettimeofday(&CurrentTime); timerQueue = (WINPR_TIMER_QUEUE*) TimerQueue; timer = (WINPR_TIMER_QUEUE_TIMER*) malloc(sizeof(WINPR_TIMER_QUEUE_TIMER)); if (!timer) return FALSE; WINPR_HANDLE_SET_TYPE(timer, HANDLE_TYPE_TIMER_QUEUE_TIMER); *((UINT_PTR*) phNewTimer) = (UINT_PTR)(HANDLE) timer; timespec_copy(&(timer->StartTime), &CurrentTime); timespec_add_ms(&(timer->StartTime), DueTime); timespec_copy(&(timer->ExpirationTime), &(timer->StartTime)); timer->Flags = Flags; timer->DueTime = DueTime; timer->Period = Period; timer->Callback = Callback; timer->Parameter = Parameter; timer->timerQueue = (WINPR_TIMER_QUEUE*) TimerQueue; timer->FireCount = 0; timer->next = NULL; pthread_mutex_lock(&(timerQueue->cond_mutex)); InsertTimerQueueTimer(&(timerQueue->activeHead), timer); pthread_cond_signal(&(timerQueue->cond)); pthread_mutex_unlock(&(timerQueue->cond_mutex)); return TRUE; }
void RequestParams::setOperationTimeout(struct timespec *ops_timeout1){ timespec_copy(&(d_ptr->ops_timeout), ops_timeout1); }
void RequestParams::setConnectionTimeout(struct timespec *conn_timeout1){ timespec_copy(&(d_ptr->connexion_timeout),conn_timeout1); }