X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/6b89334bd957e8d02b2fd66f3fd6650957e99387..3c072dea92bbf0e4df46b1d8d56cd62e68883b33:/src/simix/smx_process.c diff --git a/src/simix/smx_process.c b/src/simix/smx_process.c index 30c76db052..14025ba156 100644 --- a/src/simix/smx_process.c +++ b/src/simix/smx_process.c @@ -170,12 +170,22 @@ void SIMIX_process_kill(smx_process_t process) if (process->mutex) xbt_swag_remove(process, process->mutex->sleeping); - if (process->cond) + if (process->cond) { xbt_swag_remove(process, process->cond->sleeping); - if (process->waiting_action) { - SIMIX_unregister_action_to_condition(process->waiting_action, process->cond); - SIMIX_action_destroy(process->waiting_action); + if (process->waiting_action) { + SIMIX_unregister_action_to_condition(process->waiting_action, process->cond); + SIMIX_action_destroy(process->waiting_action); + } + } + + if (process->sem) { + xbt_swag_remove(process, process->sem->sleeping); + + if (process->waiting_action) { + SIMIX_unregister_action_to_semaphore(process->waiting_action, process->sem); + SIMIX_action_destroy(process->waiting_action); + } } } } @@ -187,7 +197,7 @@ void SIMIX_process_kill(smx_process_t process) * \param process SIMIX process * \return A void pointer to the user data */ -void *SIMIX_process_get_data(smx_process_t process) +XBT_INLINE void *SIMIX_process_get_data(smx_process_t process) { xbt_assert0((process != NULL), "Invalid parameters"); return (process->data); @@ -200,7 +210,7 @@ void *SIMIX_process_get_data(smx_process_t process) * \param process SIMIX process * \param data User data */ -void SIMIX_process_set_data(smx_process_t process, void *data) +XBT_INLINE void SIMIX_process_set_data(smx_process_t process, void *data) { xbt_assert0((process != NULL), "Invalid parameters"); @@ -215,7 +225,7 @@ void SIMIX_process_set_data(smx_process_t process, void *data) * \param process SIMIX process * \return SIMIX host */ -smx_host_t SIMIX_process_get_host(smx_process_t process) +XBT_INLINE smx_host_t SIMIX_process_get_host(smx_process_t process) { xbt_assert0((process != NULL), "Invalid parameters"); return (process->smx_host); @@ -228,7 +238,7 @@ smx_host_t SIMIX_process_get_host(smx_process_t process) * \param process SIMIX process * \return The process name */ -const char *SIMIX_process_get_name(smx_process_t process) +XBT_INLINE const char *SIMIX_process_get_name(smx_process_t process) { xbt_assert0((process != NULL), "Invalid parameters"); return (process->name); @@ -241,7 +251,7 @@ const char *SIMIX_process_get_name(smx_process_t process) * \param process SIMIX process * \param name The new process name */ -void SIMIX_process_set_name(smx_process_t process, char *name) +XBT_INLINE void SIMIX_process_set_name(smx_process_t process, char *name) { xbt_assert0((process != NULL), "Invalid parameters"); process->name = name; @@ -252,7 +262,7 @@ void SIMIX_process_set_name(smx_process_t process, char *name) * * This functions returns the properties associated with this process */ -xbt_dict_t SIMIX_process_get_properties(smx_process_t process) +XBT_INLINE xbt_dict_t SIMIX_process_get_properties(smx_process_t process) { return process->properties; } @@ -263,7 +273,7 @@ xbt_dict_t SIMIX_process_get_properties(smx_process_t process) * This functions returns the currently running #smx_process_t. * \return The SIMIX process */ -smx_process_t SIMIX_process_self(void) +XBT_INLINE smx_process_t SIMIX_process_self(void) { return simix_global ? simix_global->current_process : NULL; } @@ -382,7 +392,7 @@ void SIMIX_process_change_host(smx_process_t process, char *source, * \param process SIMIX process * \return 1, if the process is suspended, else 0. */ -int SIMIX_process_is_suspended(smx_process_t process) +XBT_INLINE int SIMIX_process_is_suspended(smx_process_t process) { xbt_assert0((process != NULL), "Invalid parameters"); @@ -394,7 +404,7 @@ int SIMIX_process_is_suspended(smx_process_t process) * * Maestro internal process is not counted, only user code processes are */ -int SIMIX_process_count() +XBT_INLINE int SIMIX_process_count() { return xbt_swag_size(simix_global->process_list); } @@ -412,7 +422,7 @@ void SIMIX_process_yield(void) DEBUG1("Yield process '%s'", simix_global->current_process->name); xbt_assert0((simix_global->current_process != simix_global->maestro_process), - "You are not supposed to run this function here!"); + "You are not supposed to run this function in maestro context!"); SIMIX_context_suspend(simix_global->current_process->context); @@ -432,6 +442,7 @@ void SIMIX_process_schedule(smx_process_t new_process) /* schedule the context */ SIMIX_context_resume(old_process->context, new_process->context); + DEBUG1("Resumed from scheduling context: '%s'", new_process->name); /* restore the current process to the previously saved process */ simix_global->current_process = old_process;