- DEBUG1("Suspend context '%s'", process->name);
- xbt_os_sem_release(((smx_ctx_thread_t) process->context)->end);
- xbt_os_sem_acquire(((smx_ctx_thread_t) process->context)->begin);
+ smx_process_t process;
+ while((process = xbt_swag_extract(processes))){
+ /* if the context has no thread associated, create one for it (first run) */
+ if(!(((smx_ctx_thread_t)process->context)->thread)){
+ ((smx_ctx_thread_t)process->context)->thread =
+ xbt_os_thread_create(NULL, smx_ctx_thread_wrapper, process->context, process);
+ xbt_os_sem_acquire(((smx_ctx_thread_t)process->context)->end);
+ }
+ xbt_os_sem_release(((smx_ctx_thread_t) (process->context))->begin);
+ xbt_os_sem_acquire(((smx_ctx_thread_t) (process->context))->end);
+ }
+}
+
+static void smx_ctx_thread_runall_parallel(xbt_swag_t processes){
+ smx_process_t process, p_next;
+ xbt_swag_foreach_safe(process, p_next, processes){
+ /* if the context has no thread associated, create one for it (first run) */
+ if(!(((smx_ctx_thread_t)process->context)->thread)){
+ ((smx_ctx_thread_t)process->context)->thread =
+ xbt_os_thread_create(NULL, smx_ctx_thread_wrapper, process->context, process);
+ xbt_os_sem_acquire(((smx_ctx_thread_t)process->context)->end);
+ }
+ xbt_os_sem_release(((smx_ctx_thread_t) (process->context))->begin);
+ }
+
+ while((process = xbt_swag_extract(processes))){
+ xbt_os_sem_acquire(((smx_ctx_thread_t) (process->context))->end);
+ }