return 0;
}
-static void remove_csw_element_from_waiting_list(struct proc_info* pi, guint64 state)
+static int remove_change_state_wait_element_from_waiting_list(struct proc_info* proc_info, guint64 state)
{
GList *iterator = transition_context.waitings;
+ if (!proc_info)
+ return -EINVAL;
+
while (iterator != NULL) {
- struct change_state_wait *csw = (struct change_state_wait *)iterator->data;
- if (csw->pi->pid == pi->pid && csw->state == state) {
+ struct change_state_wait *change_state_wait = (struct change_state_wait *)iterator->data;
+ if (change_state_wait->pi->pid == proc_info->pid && change_state_wait->state == state) {
transition_context.waitings = g_list_remove_link(transition_context.waitings, iterator);
free(g_steal_pointer(&iterator->data));
g_list_free(iterator);
- return;
+ break;
}
iterator = g_list_next(iterator);
}
+ return 0;
}
void remove_change_state_wait(pid_t pid, guint64 state)
{
struct proc_info *pi = NULL;
GList *l = NULL;
+ int ret = 0;
l = g_list_find_custom(proc_list, &pid, find_pi_by_pid);
if (!l)
_D("pid=%d(%s) removed csw for %#"PRIx64, pi->pid, pi->comm, state);
pi->state_bitmap &= ~state;
- remove_csw_element_from_waiting_list(pi, state);
+ ret = remove_change_state_wait_element_from_waiting_list(pi, state);
+ if (ret < 0) {
+ _E("Failed to remove change state wait element from waiting list");
+ return;
+ }
+
if (pi->state_bitmap == 0) {
proc_list = g_list_remove_link(proc_list, l);
free(g_steal_pointer(&l->data));