Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Fix mem leack and factorize code.
authornavarro <navarro@caraja.(none)>
Mon, 5 Mar 2012 11:57:38 +0000 (12:57 +0100)
committernavarro <navarro@caraja.(none)>
Mon, 5 Mar 2012 11:57:57 +0000 (12:57 +0100)
src/include/surf/surf.h
src/surf/surf_routing.c
src/surf/workstation.c

index e3a6d1b..53d6600 100644 (file)
@@ -357,7 +357,7 @@ typedef struct s_storage_type {
 } s_storage_type_t, *storage_type_t;
 
 typedef struct s_mount {
 } s_storage_type_t, *storage_type_t;
 
 typedef struct s_mount {
-  char *id;
+  void *id;
   char *name;
 } s_mount_t, *mount_t;
 
   char *name;
 } s_mount_t, *mount_t;
 
index 8cb67c0..5270da8 100644 (file)
@@ -788,29 +788,26 @@ static void routing_parse_mstorage(sg_platf_mstorage_cbarg_t mstorage)
 static void mount_free(void *p)
 {
   mount_t mnt = p;
 static void mount_free(void *p)
 {
   mount_t mnt = p;
-  xbt_free(mnt->id);
   xbt_free(mnt->name);
 }
 
 static void routing_parse_mount(sg_platf_mount_cbarg_t mount)
 {
   xbt_free(mnt->name);
 }
 
 static void routing_parse_mount(sg_platf_mount_cbarg_t mount)
 {
-
   // Verification of an existing storage
   void* storage = xbt_lib_get_or_null(storage_lib, mount->id,ROUTING_STORAGE_LEVEL);
   xbt_assert(storage,"Disk id \"%s\" does not exists", mount->id);
 
   XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->id, mount->name);
 
   // Verification of an existing storage
   void* storage = xbt_lib_get_or_null(storage_lib, mount->id,ROUTING_STORAGE_LEVEL);
   xbt_assert(storage,"Disk id \"%s\" does not exists", mount->id);
 
   XBT_DEBUG("ROUTING Mount '%s' on '%s'",mount->id, mount->name);
 
-  mount_t mnt = xbt_new0(s_mount_t, 1);
-  mnt->id = xbt_strdup(mount->id);
-  mnt->name = xbt_strdup(mount->name);
+  s_mount_t mnt;
+  mnt.id = surf_storage_resource_by_name(mount->id);
+  mnt.name = xbt_strdup(mount->name);
 
   if(!mount_list){
     XBT_DEBUG("Create a Mount list for %s",A_surfxml_host_id);
     mount_list = xbt_dynar_new(sizeof(s_mount_t), mount_free);
   }
   xbt_dynar_push(mount_list,&mnt);
 
   if(!mount_list){
     XBT_DEBUG("Create a Mount list for %s",A_surfxml_host_id);
     mount_list = xbt_dynar_new(sizeof(s_mount_t), mount_free);
   }
   xbt_dynar_push(mount_list,&mnt);
-
 }
 
 static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
 }
 
 static void routing_parse_cluster(sg_platf_cluster_cbarg_t cluster)
index 946df08..3b33462 100644 (file)
@@ -277,23 +277,29 @@ static xbt_dict_t ws_get_properties(const void *ws)
   return surf_resource_properties(((workstation_CLM03_t) ws)->cpu);
 }
 
   return surf_resource_properties(((workstation_CLM03_t) ws)->cpu);
 }
 
-static surf_action_t ws_action_open(void *workstation, const char* storage, const char* path, const char* mode)
+static storage_t find_storage_on_mount_list(void *workstation,const char* storage)
 {
   storage_t st = NULL;
 {
   storage_t st = NULL;
-  mount_t mnt = NULL;
+  s_mount_t mnt;
   unsigned int cursor;
   xbt_dynar_t storage_list = ((workstation_CLM03_t) workstation)->storage;
 
   XBT_DEBUG("Search for storage name '%s' on '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
   xbt_dynar_foreach(storage_list,cursor,mnt)
   {
   unsigned int cursor;
   xbt_dynar_t storage_list = ((workstation_CLM03_t) workstation)->storage;
 
   XBT_DEBUG("Search for storage name '%s' on '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
   xbt_dynar_foreach(storage_list,cursor,mnt)
   {
-     XBT_DEBUG("See '%s'",mnt->name);
-     if(!strcmp(storage,mnt->name)){
-       st = surf_storage_resource_by_name(mnt->id);
-       break;
-     }
+    XBT_DEBUG("See '%s'",mnt.name);
+    if(!strcmp(storage,mnt.name)){
+      st = mnt.id;
+      break;
+    }
   }
   }
-  if(!st) xbt_die("Don't find mount '%s' for '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
+  if(!st) xbt_die("Can't find mount '%s' for '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
+  return st;
+}
+
+static surf_action_t ws_action_open(void *workstation, const char* storage, const char* path, const char* mode)
+{
+  storage_t st = find_storage_on_mount_list(workstation, storage);
   XBT_DEBUG("OPEN on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.open(st, path, mode);
   XBT_DEBUG("OPEN on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.open(st, path, mode);
@@ -301,21 +307,7 @@ static surf_action_t ws_action_open(void *workstation, const char* storage, cons
 
 static surf_action_t ws_action_close(void *workstation, const char* storage, surf_file_t fp)
 {
 
 static surf_action_t ws_action_close(void *workstation, const char* storage, surf_file_t fp)
 {
-  storage_t st = NULL;
-  mount_t mnt = NULL;
-  unsigned int cursor;
-  xbt_dynar_t storage_list = ((workstation_CLM03_t) workstation)->storage;
-
-  XBT_DEBUG("Search for storage name '%s' on '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
-  xbt_dynar_foreach(storage_list,cursor,mnt)
-  {
-    XBT_DEBUG("See '%s'",mnt->name);
-    if(!strcmp(storage,mnt->name)){
-      st = surf_storage_resource_by_name(mnt->id);
-      break;
-    }
-  }
-  if(!st) xbt_die("Don't find mount '%s' for '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
+  storage_t st = find_storage_on_mount_list(workstation, storage);
   XBT_DEBUG("CLOSE on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.close(st, fp);
   XBT_DEBUG("CLOSE on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.close(st, fp);
@@ -323,21 +315,7 @@ static surf_action_t ws_action_close(void *workstation, const char* storage, sur
 
 static surf_action_t ws_action_read(void *workstation, const char* storage, void* ptr, size_t size, size_t nmemb, surf_file_t stream)
 {
 
 static surf_action_t ws_action_read(void *workstation, const char* storage, void* ptr, size_t size, size_t nmemb, surf_file_t stream)
 {
-  storage_t st = NULL;
-  mount_t mnt = NULL;
-  unsigned int cursor;
-  xbt_dynar_t storage_list = ((workstation_CLM03_t) workstation)->storage;
-
-  XBT_DEBUG("Search for storage name '%s' on '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
-  xbt_dynar_foreach(storage_list,cursor,mnt)
-  {
-    XBT_DEBUG("See '%s'",mnt->name);
-    if(!strcmp(storage,mnt->name)){
-      st = surf_storage_resource_by_name(mnt->id);
-      break;
-    }
-  }
-  if(!st) xbt_die("Don't find mount '%s' for '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
+  storage_t st = find_storage_on_mount_list(workstation, storage);
   XBT_DEBUG("READ on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.read(st, ptr, size, nmemb, stream);
   XBT_DEBUG("READ on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.read(st, ptr, size, nmemb, stream);
@@ -345,21 +323,7 @@ static surf_action_t ws_action_read(void *workstation, const char* storage, void
 
 static surf_action_t ws_action_write(void *workstation, const char* storage, const void* ptr, size_t size, size_t nmemb, surf_file_t stream)
 {
 
 static surf_action_t ws_action_write(void *workstation, const char* storage, const void* ptr, size_t size, size_t nmemb, surf_file_t stream)
 {
-  storage_t st = NULL;
-  mount_t mnt = NULL;
-  unsigned int cursor;
-  xbt_dynar_t storage_list = ((workstation_CLM03_t) workstation)->storage;
-
-  XBT_DEBUG("Search for storage name '%s' on '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
-  xbt_dynar_foreach(storage_list,cursor,mnt)
-  {
-    XBT_DEBUG("See '%s'",mnt->name);
-    if(!strcmp(storage,mnt->name)){
-      st = surf_storage_resource_by_name(mnt->id);
-      break;
-    }
-  }
-  if(!st) xbt_die("Don't find mount '%s' for '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
+  storage_t st = find_storage_on_mount_list(workstation, storage);
   XBT_DEBUG("WRITE on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.write(st,  ptr, size, nmemb, stream);
   XBT_DEBUG("WRITE on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.write(st,  ptr, size, nmemb, stream);
@@ -367,21 +331,7 @@ static surf_action_t ws_action_write(void *workstation, const char* storage, con
 
 static surf_action_t ws_action_stat(void *workstation, const char* storage, int fd, void* buf)
 {
 
 static surf_action_t ws_action_stat(void *workstation, const char* storage, int fd, void* buf)
 {
-  storage_t st = NULL;
-  mount_t mnt = NULL;
-  unsigned int cursor;
-  xbt_dynar_t storage_list = ((workstation_CLM03_t) workstation)->storage;
-
-  XBT_DEBUG("Search for storage name '%s' on '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
-  xbt_dynar_foreach(storage_list,cursor,mnt)
-  {
-    XBT_DEBUG("See '%s'",mnt->name);
-    if(!strcmp(storage,mnt->name)){
-      st = surf_storage_resource_by_name(mnt->id);
-      break;
-    }
-  }
-  if(!st) xbt_die("Don't find mount '%s' for '%s'",storage,((workstation_CLM03_t) workstation)->generic_resource.name);
+  storage_t st = find_storage_on_mount_list(workstation, storage);
   XBT_DEBUG("STAT on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.stat(st,  fd, buf);
   XBT_DEBUG("STAT on disk '%s'",st->generic_resource.name);
   surf_model_t model = st->generic_resource.model;
   return model->extension.storage.stat(st,  fd, buf);