Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
only activate tests with raw contextes on platform where they are implemented
[simgrid.git] / src / simix / smx_process.c
index 168a00f..3296198 100644 (file)
@@ -136,7 +136,7 @@ void SIMIX_process_create(smx_process_t *process,
   else {
     *process = xbt_new0(s_smx_process_t, 1);
 
-    xbt_assert0(((code != NULL) && (host != NULL)), "Invalid parameters");
+    xbt_assert(((code != NULL) && (host != NULL)), "Invalid parameters");
 
     /* Process data */
     (*process)->pid = simix_process_maxpid++;
@@ -234,16 +234,17 @@ void SIMIX_process_killall(smx_process_t issuer)
 }
 
 void SIMIX_process_change_host(smx_process_t process,
-    const char *source, const char *dest)
+                              smx_host_t dest)
 {
-  smx_host_t h1 = NULL;
-  smx_host_t h2 = NULL;
-  xbt_assert0((process != NULL), "Invalid parameters");
-  h1 = SIMIX_host_get_by_name(source);
-  h2 = SIMIX_host_get_by_name(dest);
-  process->smx_host = h2;
-  xbt_swag_remove(process, h1->process_list);
-  xbt_swag_insert(process, h2->process_list);
+  xbt_assert((process != NULL), "Invalid parameters");
+  xbt_swag_remove(process, process->smx_host->process_list);
+  process->smx_host = dest;
+  xbt_swag_insert(process, dest->process_list);
+}
+
+void SIMIX_pre_process_change_host(smx_process_t process, smx_host_t dest)
+{
+  process->new_host = dest;
 }
 
 void SIMIX_pre_process_suspend(smx_req_t req)
@@ -291,7 +292,7 @@ void SIMIX_process_suspend(smx_process_t process, smx_process_t issuer)
 
 void SIMIX_process_resume(smx_process_t process, smx_process_t issuer)
 {
-  xbt_assert0((process != NULL), "Invalid parameters");
+  xbt_assert((process != NULL), "Invalid parameters");
 
   process->suspended = 0;
 
@@ -423,7 +424,7 @@ smx_action_t SIMIX_process_sleep(smx_process_t process, double duration)
   /* check if the host is active */
   if (surf_workstation_model->extension.
       workstation.get_state(host->host) != SURF_RESOURCE_ON) {
-    THROW1(host_error, 0, "Host %s failed, you cannot call this function",
+    THROWF(host_error, 0, "Host %s failed, you cannot call this function",
            host->name);
   }
 
@@ -518,6 +519,11 @@ void SIMIX_process_yield(void)
     self->doexception = 0;
     RETHROW;
   }
+  
+  if (self->new_host) {
+    SIMIX_process_change_host(self, self->new_host);
+    self->new_host = NULL;
+  }
 }
 
 /* callback: context fetching */