return ;
}
+void wait_for_all_to_end(t_vec *child_pids)
+{
+ size_t i;
+ pid_t pid;
+
+ i = child_pids->size;
+ while (i > 0)
+ {
+ --i;
+ pid = *(pid_t *)ft_vec_access(child_pids, i);
+ waitpid(pid, NULL, 0);
+ if (g_last_signal)
+ {
+ killall(child_pids, g_last_signal);
+ return ;
+ }
+ ft_vec_forget(child_pids, i);
+ }
+ ft_vec_free(child_pids, NULL);
+}
+
void wait_for_return(t_execution_env *env)
{
pid_t last_pid;
if (WIFEXITED(status))
env->ret_val = WEXITSTATUS(status);
}
- ft_vec_free(&env->child_pids, NULL);
+ wait_for_all_to_end(&env->child_pids);
return ;
}