X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/546debf4b5f37e488ae0b959e95b3058b5bba96a..6ee7e9c2e455536ab817ae0136acfbb53822eecd:/src/simix/smx_context_thread.c diff --git a/src/simix/smx_context_thread.c b/src/simix/smx_context_thread.c index e1fdeccd66..cc9de82775 100644 --- a/src/simix/smx_context_thread.c +++ b/src/simix/smx_context_thread.c @@ -42,6 +42,7 @@ static void *smx_ctx_thread_wrapper(void *param); void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory) { smx_ctx_base_factory_init(factory); + XBT_VERB("Activating thread context factory"); (*factory)->create_context = smx_ctx_thread_factory_create_context; /* Do not overload that method (*factory)->finalize */ @@ -49,7 +50,7 @@ void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory) (*factory)->stop = smx_ctx_thread_stop; (*factory)->suspend = smx_ctx_thread_suspend; - if(_surf_parallel_contexts) + if (SIMIX_context_is_parallel()) (*factory)->runall = smx_ctx_thread_runall_parallel; else (*factory)->runall = smx_ctx_thread_runall_serial; @@ -145,11 +146,13 @@ static void smx_ctx_thread_suspend(smx_context_t context) 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) @@ -160,10 +163,10 @@ 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)