Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
AAAAh. let's try to fix the fix of a fix. Correctly if possible
[simgrid.git] / src / simix / smx_process.c
index 30c76db..0e92bfc 100644 (file)
@@ -41,6 +41,8 @@ void SIMIX_process_empty_trash(void)
     /* 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;
@@ -170,12 +172,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 +199,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 +212,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 +227,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 +240,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 +253,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 +264,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 +275,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 +394,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 +406,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 +424,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 +444,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;