static void statem_ctx_runall(xbt_dynar_t processes) {
smx_context_t old_context;
smx_process_t process;
+ unsigned int cursor;
INFO0("Run all");
- while (xbt_dynar_length(processes)){
- process = xbt_dynar_pop_as(processes,smx_process_t);
+ xbt_dynar_foreach(processes, cursor, process) {
statem_context_t ctx = (statem_context_t)SIMIX_process_get_context(process);
old_context = smx_current_context;
smx_current_context = SIMIX_process_get_context(process);
ctx->syscall_id==0?NULL:SIMIX_request_get_result(ctx->syscall_id));
smx_current_context = old_context;
}
+ xbt_dynar_reset(processes);
}
static void smx_ctx_raw_runall(xbt_dynar_t processes)
{
smx_process_t process;
+ unsigned int cursor;
- while (xbt_dynar_length(processes)){
- process = xbt_dynar_pop_as(processes,smx_process_t);
+ xbt_dynar_foreach(processes, cursor, process) {
smx_ctx_raw_resume(process->context);
}
+ xbt_dynar_reset(processes);
}
static void smx_ctx_raw_resume_parallel(smx_context_t context)
{
smx_process_t process;
smx_context_t old_context;
- while (xbt_dynar_length(processes)){
- process = xbt_dynar_pop_as(processes,smx_process_t);
+ unsigned int cursor;
+
+ xbt_dynar_foreach(processes, cursor, process) {
old_context = smx_current_context;
smx_current_context = process->context;
smx_ctx_ruby_resume(smx_current_context);
smx_current_context = old_context;
- }
+ }
+ xbt_dynar_reset(processes);
}
void smx_ctx_sysv_runall(xbt_dynar_t processes)
{
smx_process_t process;
-
- while (xbt_dynar_length(processes)){
- process = xbt_dynar_pop_as(processes,smx_process_t);
+ unsigned int cursor;
+
+ xbt_dynar_foreach(processes, cursor, process) {
smx_ctx_sysv_resume(process->context);
}
+ xbt_dynar_reset(processes);
}
void smx_ctx_sysv_resume_parallel(smx_process_t process)
static void smx_ctx_thread_runall_serial(xbt_dynar_t processes)
{
smx_process_t process;
- while (xbt_dynar_length(processes)){
- process = xbt_dynar_pop_as(processes,smx_process_t);
+ unsigned int cursor;
+
+ xbt_dynar_foreach(processes, cursor, process) {
xbt_os_sem_release(((smx_ctx_thread_t) process->context)->begin);
xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->end);
}
+ xbt_dynar_reset(processes);
}
static void smx_ctx_thread_runall_parallel(xbt_dynar_t processes)
xbt_dynar_foreach(processes, index, process)
xbt_os_sem_release(((smx_ctx_thread_t) process->context)->begin);
- while(xbt_dynar_length(processes)){
- process = xbt_dynar_pop_as(processes,smx_process_t);
+ xbt_dynar_foreach(processes, index, process) {
xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->end);
}
+ xbt_dynar_reset(processes);
}
static smx_context_t smx_ctx_thread_self(void)