/* Free the exception allocated at creation time */
if (process->exception)
free(process->exception);
+ if (process->properties)
+ xbt_dict_free(&process->properties);
free(process->name);
process->name = NULL;
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);
+ }
}
}
}
* \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);
* \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");
* \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);
* \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);
* \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;
*
* 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;
}
* 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;
}
* \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");
*
* 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);
}
/* 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;