X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dd5aeddb0d5ff5b51db070c80a61728933b8746a..97f3e4bd3bb6719e536f7eacaaafe6d03ac5ac43:/src/msg/msg_host.cpp diff --git a/src/msg/msg_host.cpp b/src/msg/msg_host.cpp index 856b7f8434..d351e15f68 100644 --- a/src/msg/msg_host.cpp +++ b/src/msg/msg_host.cpp @@ -29,13 +29,12 @@ msg_host_t __MSG_host_create(sg_host_t host) // FIXME: don't return our paramete { msg_host_priv_t priv = xbt_new0(s_msg_host_priv_t, 1); - priv->dp_objs = xbt_dict_new(); + priv->dp_objs = nullptr; priv->dp_enabled = 0; priv->dp_updated_by_deleted_tasks = 0; priv->is_migrating = 0; - priv->file_descriptor_table = new std::vector(sg_storage_max_file_descriptors); - std::iota (priv->file_descriptor_table->rbegin(), priv->file_descriptor_table->rend(), 0); // Fill with ..., 1, 0. + priv->file_descriptor_table = nullptr; sg_host_msg_set(host,priv); @@ -115,11 +114,12 @@ void __MSG_host_priv_free(msg_host_priv_t priv) { if (priv == nullptr) return; - unsigned int size = xbt_dict_size(priv->dp_objs); + unsigned int size = priv->dp_objs ? xbt_dict_size(priv->dp_objs) : 0; if (size > 0) XBT_WARN("dp_objs: %u pending task?", size); xbt_dict_free(&priv->dp_objs); - delete priv->file_descriptor_table; + if(priv->file_descriptor_table) + delete priv->file_descriptor_table; free(priv); } @@ -318,6 +318,10 @@ xbt_dict_t MSG_host_get_storage_content(msg_host_t host) int __MSG_host_get_file_descriptor_id(msg_host_t host){ msg_host_priv_t priv = sg_host_msg(host); + if(!priv->file_descriptor_table){ + priv->file_descriptor_table = new std::vector(sg_storage_max_file_descriptors); + std::iota (priv->file_descriptor_table->rbegin(), priv->file_descriptor_table->rend(), 0); // Fill with ..., 1, 0. + } xbt_assert(!priv->file_descriptor_table->empty(), "Too much files are opened! Some have to be closed."); int desc = priv->file_descriptor_table->back(); priv->file_descriptor_table->pop_back();