GQueue *queue;
guint timer;
guint idle_checker;
+ candidate_process_context_t *running_cpc;
} sequencer;
struct app_launch_arg {
cpc = (candidate_process_context_t *)g_queue_pop_head(
__sequencer.queue);
if (!cpc) {
- LOGE("Critical error!");
+ _E("Critical error!");
__sequencer.timer = 0;
return G_SOURCE_REMOVE;;
}
cpc->timer = 0;
}
+ if (cpc->pid != CANDIDATE_NONE) {
+ _W("The slot(%d) is already running. pid(%d)",
+ cpc->type, cpc->pid);
+ return G_SOURCE_CONTINUE;
+ }
+
_get_cpu_idle(&total, &idle);
cpc->cpu_idle_time = idle;
cpc->cpu_total_time = total;
__sequencer.idle_checker = g_timeout_add(CPU_CHECKER_TIMEOUT,
__handle_idle_checker, cpc);
+ __sequencer.running_cpc = cpc;
_D("[__SEQUENCER__] Add idle checker. Type(%d)", cpc->type);
static bool __sequencer_slot_is_running(candidate_process_context_t *cpc)
{
- GSource *source;
- guint source_id;
-
- source = g_main_context_find_source_by_funcs_user_data(NULL,
- (GSourceFuncs *)__handle_idle_checker, (gpointer)cpc);
- if (source) {
- source_id = g_source_get_id(source);
- if (source_id != 0 && source_id == __sequencer.idle_checker)
- return true;
- }
+ if (__sequencer.running_cpc == cpc)
+ return true;
return false;
}
if (!data) {
_E("Critical error!");
__sequencer.idle_checker = 0;
+ __sequencer.running_cpc = NULL;
return G_SOURCE_REMOVE;
}
if (!cpc->app_exists) {
_W("The application is not installed. Type(%d)", cpc->type);
__sequencer.idle_checker = 0;
+ __sequencer.running_cpc = NULL;
return G_SOURCE_REMOVE;
}
if (cpc->state != CANDIDATE_PROCESS_STATE_RUNNING) {
_W("Slot state is not running. Type(%d)", cpc->type);
__sequencer.idle_checker = 0;
+ __sequencer.running_cpc = NULL;
return G_SOURCE_REMOVE;
}
__prepare_candidate_process(cpc->type, cpc->loader_id);
cpc->touched = true;
__sequencer.idle_checker = 0;
+ __sequencer.running_cpc = NULL;
return G_SOURCE_REMOVE;
}