Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
manage more cleanly the SIMIX_STORAGE_LEVEL
authorsuter <frederic.suter@cc.in2p3.fr>
Wed, 9 Oct 2013 07:49:07 +0000 (09:49 +0200)
committersuter <frederic.suter@cc.in2p3.fr>
Wed, 9 Oct 2013 08:07:09 +0000 (10:07 +0200)
src/simix/smx_global.c
src/simix/smx_io.c
src/simix/smx_io_private.h

index d91c628..981891b 100644 (file)
@@ -109,6 +109,7 @@ void SIMIX_global_init(int *argc, char **argv)
   }
 
   SIMIX_HOST_LEVEL = xbt_lib_add_level(host_lib,SIMIX_host_destroy);
   }
 
   SIMIX_HOST_LEVEL = xbt_lib_add_level(host_lib,SIMIX_host_destroy);
+  SIMIX_STORAGE_LEVEL = xbt_lib_add_level(storage_lib, SIMIX_storage_destroy);
 
   if (sg_cfg_get_boolean("clean_atexit"))
     atexit(SIMIX_clean);
 
   if (sg_cfg_get_boolean("clean_atexit"))
     atexit(SIMIX_clean);
index d8477ae..07a354c 100644 (file)
@@ -33,6 +33,22 @@ smx_storage_t SIMIX_storage_create(const char *name, void *storage, void *data)
   return xbt_lib_get_or_null(storage_lib, name, SIMIX_STORAGE_LEVEL);
 }
 
   return xbt_lib_get_or_null(storage_lib, name, SIMIX_STORAGE_LEVEL);
 }
 
+/**
+ * \brief Internal function to destroy a SIMIX storage.
+ *
+ * \param s the host to destroy (a smx_storage_t)
+ */
+void SIMIX_storage_destroy(void *s)
+{
+  smx_storage_priv_t storage = (smx_storage_priv_t) s;
+
+  xbt_assert((storage != NULL), "Invalid parameters");
+  if (storage->data)
+    free(storage->data);
+
+  /* Clean storage structure */
+  free(storage);
+}
 
 void* SIMIX_pre_file_get_data(smx_simcall_t simcall,smx_file_t fd){
   return SIMIX_file_get_data(fd);
 
 void* SIMIX_pre_file_get_data(smx_simcall_t simcall,smx_file_t fd){
   return SIMIX_file_get_data(fd);
index 3cc0356..a3fea00 100644 (file)
@@ -21,6 +21,7 @@ static inline smx_storage_priv_t SIMIX_storage_priv(smx_storage_t storage){
 }
 
 smx_storage_t SIMIX_storage_create(const char *name, void *storage, void *data);
 }
 
 smx_storage_t SIMIX_storage_create(const char *name, void *storage, void *data);
+void SIMIX_storage_destroy(void *s);
 void* SIMIX_pre_file_get_data(smx_simcall_t simcall,smx_file_t fd);
 void SIMIX_pre_file_set_data(smx_simcall_t simcall, smx_file_t fd, void *data);
 void SIMIX_pre_file_read(smx_simcall_t simcall, smx_file_t fd, sg_storage_size_t size);
 void* SIMIX_pre_file_get_data(smx_simcall_t simcall,smx_file_t fd);
 void SIMIX_pre_file_set_data(smx_simcall_t simcall, smx_file_t fd, void *data);
 void SIMIX_pre_file_read(smx_simcall_t simcall, smx_file_t fd, sg_storage_size_t size);