static apt_bool_t apt_consumer_task_run(apt_task_t *task) { apr_status_t rv; void *msg; apt_bool_t *running; apt_consumer_task_t *consumer_task; consumer_task = apt_task_object_get(task); if(!consumer_task) { return FALSE; } running = apt_task_running_flag_get(task); if(!running) { return FALSE; } while(*running) { apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Wait for Messages [%s]",apt_task_name_get(task)); rv = apr_queue_pop(consumer_task->msg_queue,&msg); if(rv == APR_SUCCESS) { if(msg) { apt_task_msg_t *task_msg = msg; apt_task_msg_process(consumer_task->base,task_msg); } } } return TRUE; }
static apt_bool_t apt_net_client_task_process(apt_net_client_task_t *task) { apt_bool_t status = TRUE; apt_task_msg_t *msg; apr_thread_mutex_lock(task->guard); do { msg = apt_cyclic_queue_pop(task->msg_queue); if(msg) { status = apt_task_msg_process(task->base,msg); } } while(msg); apr_thread_mutex_unlock(task->guard); return status; }
static void mpf_engine_main(mpf_scheduler_t *scheduler, void *obj) { mpf_engine_t *engine = obj; apt_task_msg_t *msg; /* process request queue */ apr_thread_mutex_lock(engine->request_queue_guard); msg = apt_cyclic_queue_pop(engine->request_queue); while(msg) { apr_thread_mutex_unlock(engine->request_queue_guard); apt_task_msg_process(engine->task,msg); apr_thread_mutex_lock(engine->request_queue_guard); msg = apt_cyclic_queue_pop(engine->request_queue); } apr_thread_mutex_unlock(engine->request_queue_guard); /* process factory of media contexts */ mpf_context_factory_process(engine->context_factory); }
static apt_bool_t apt_poller_task_wakeup_process(apt_poller_task_t *task) { apt_bool_t status = TRUE; apt_bool_t running = TRUE; apt_task_msg_t *msg; do { apr_thread_mutex_lock(task->guard); msg = apt_cyclic_queue_pop(task->msg_queue); apr_thread_mutex_unlock(task->guard); if(msg) { status = apt_task_msg_process(task->base,msg); } else { running = FALSE; } } while(running == TRUE); return status; }
static apt_bool_t apt_consumer_task_run(apt_task_t *task) { apr_status_t rv; void *msg; apt_bool_t running = TRUE; apt_consumer_task_t *consumer_task; consumer_task = apt_task_object_get(task); if(!consumer_task) { return FALSE; } while(running) { rv = apr_queue_pop(consumer_task->msg_queue,&msg); if(rv == APR_SUCCESS) { if(msg) { apt_task_msg_t *task_msg = msg; if(apt_task_msg_process(consumer_task->base,task_msg) == FALSE) { running = FALSE; } } } } return TRUE; }
static apt_bool_t apt_consumer_task_run(apt_task_t *task) { apr_status_t rv; void *msg; apt_bool_t *running; apt_consumer_task_t *consumer_task; #if APR_HAS_QUEUE_TIMEOUT apr_interval_time_t timeout; apr_uint32_t queue_timeout; apr_time_t time_now, time_last = 0; #endif const char *task_name; consumer_task = apt_task_object_get(task); if(!consumer_task) { return FALSE; } task_name = apt_task_name_get(consumer_task->base), running = apt_task_running_flag_get(task); if(!running) { return FALSE; } while(*running) { #if APR_HAS_QUEUE_TIMEOUT if(apt_timer_queue_timeout_get(consumer_task->timer_queue,&queue_timeout) == TRUE) { timeout = (apr_interval_time_t)queue_timeout * 1000; time_last = apr_time_now(); apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Wait for Messages [%s] timeout [%u]", task_name, queue_timeout); rv = apr_queue_timedpop(consumer_task->msg_queue,timeout,&msg); } else { timeout = -1; apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Wait for Messages [%s]",task_name); rv = apr_queue_pop(consumer_task->msg_queue,&msg); } #else apt_log(APT_LOG_MARK,APT_PRIO_DEBUG,"Wait for Messages [%s]",task_name); rv = apr_queue_pop(consumer_task->msg_queue,&msg); #endif if(rv == APR_SUCCESS) { if(msg) { apt_task_msg_t *task_msg = msg; apt_task_msg_process(consumer_task->base,task_msg); } } else if(rv != APR_TIMEUP) { apt_log(APT_LOG_MARK,APT_PRIO_WARNING,"Failed to Pop Message [%s] status: %d",task_name,rv); } #if APR_HAS_QUEUE_TIMEOUT if(timeout != -1) { time_now = apr_time_now(); if(time_now > time_last) { apt_timer_queue_advance(consumer_task->timer_queue,(apr_uint32_t)((time_now - time_last)/1000)); } } #endif } return TRUE; }