X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d13b1659a0c2551ee41b287a269e391bb2d7bc8a..d7d25ee1e33a01d3655723cbe4c8e0a77ea60712:/src/simix/smx_process.c?ds=sidebyside diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index 21a4ef8eb9..02e70b43f3 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -54,6 +54,8 @@ void SIMIX_process_cleanup(smx_process_t process) if (process->kill_timer != NULL) SIMIX_timer_remove(process->kill_timer); + xbt_os_mutex_acquire(simix_global->mutex); + /* cancel non-blocking communications */ smx_synchro_t synchro; while ((synchro = xbt_fifo_pop(process->comms))) { @@ -97,6 +99,8 @@ void SIMIX_process_cleanup(smx_process_t process) xbt_swag_remove(process, SIMIX_host_priv(process->smx_host)->process_list); xbt_swag_insert(process, simix_global->process_to_destroy); process->context->iwannadie = 0; + + xbt_os_mutex_release(simix_global->mutex); } /** @@ -352,6 +356,7 @@ void SIMIX_process_kill(smx_process_t process, smx_process_t issuer) { case SIMIX_SYNC_COMMUNICATE: xbt_fifo_remove(process->comms, process->waiting_synchro); SIMIX_comm_cancel(process->waiting_synchro); + xbt_fifo_remove(process->waiting_synchro->simcalls, &process->simcall); SIMIX_comm_destroy(process->waiting_synchro); break; @@ -373,6 +378,8 @@ void SIMIX_process_kill(smx_process_t process, smx_process_t issuer) { break; } + + process->waiting_synchro = NULL; } if(!xbt_dynar_member(simix_global->process_to_run, &(process)) && process != issuer) { XBT_DEBUG("Inserting %s in the to_run list", process->name);