Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Platform generation: little modifications to the connectedness check function
[simgrid.git] / src / surf / surf.c
index 203feba..be19fb7 100644 (file)
@@ -9,6 +9,7 @@
 #include "surf_private.h"
 #include "xbt/module.h"
 #include "mc/mc.h"
+#include "simix/smx_host_private.h"
 #include "surf/surf_resource.h"
 #include "xbt/xbt_os_thread.h"
 
@@ -382,6 +383,7 @@ void surf_init(int *argc, char **argv)
   as_router_lib = xbt_lib_new();
   storage_lib = xbt_lib_new();
   storage_type_lib = xbt_lib_new();
+  watched_hosts_lib = xbt_dict_new();
 
   XBT_DEBUG("Add routing levels");
   ROUTING_HOST_LEVEL = xbt_lib_add_level(host_lib,routing_asr_host_free);
@@ -470,6 +472,8 @@ void surf_exit(void)
   xbt_lib_free(&storage_lib);
   xbt_lib_free(&storage_type_lib);
 
+  xbt_dict_free(&watched_hosts_lib);
+
   tmgr_finalize();
   surf_parse_lex_destroy();
   surf_parse_free_callbacks();
@@ -695,3 +699,22 @@ void surf_set_nthreads(int nthreads) {
 
   surf_nthreads = nthreads;
 }
+
+void surf_watched_hosts(void)
+{
+  char *key;
+  void *host;
+  xbt_dict_cursor_t cursor;
+
+  XBT_DEBUG("Check for host SURF_RESOURCE_ON on watched_hosts_lib");
+  xbt_dict_foreach(watched_hosts_lib,cursor,key,host)
+  {
+    if(SIMIX_host_get_state(host) == SURF_RESOURCE_ON){
+      XBT_INFO("Restart processes on host: %s",SIMIX_host_get_name(host));
+      SIMIX_host_autorestart(host);
+      xbt_dict_remove(watched_hosts_lib,key);
+    }
+    else
+      XBT_DEBUG("See SURF_RESOURCE_OFF on host: %s",key);
+  }
+}