X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9bc2f7734295810a24f98d65169f06705e3ea951..a827700e9c5f30942eb18fa38a0d0ebb84c4406d:/src/msg/msg_io.cpp diff --git a/src/msg/msg_io.cpp b/src/msg/msg_io.cpp index aff8c7e884..cb3b97d284 100644 --- a/src/msg/msg_io.cpp +++ b/src/msg/msg_io.cpp @@ -5,9 +5,12 @@ #include "simgrid/s4u/host.hpp" #include "src/msg/msg_private.h" +#include XBT_LOG_NEW_DEFAULT_SUBCATEGORY(msg_io, msg, "Logging specific to MSG (io)"); +SG_BEGIN_DECL() + /** @addtogroup msg_file * (#msg_file_t) and the functions for managing it. * @@ -31,6 +34,24 @@ void __MSG_file_get_info(msg_file_t fd){ xbt_dynar_free_container(&info); } +static int MSG_host_get_file_descriptor_id(msg_host_t host) +{ + simgrid::MsgHostExt* priv = host->extension(); + if (priv->file_descriptor_table == nullptr) { + 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(); + return desc; +} + +static void MSG_host_release_file_descriptor_id(msg_host_t host, int id) +{ + host->extension()->file_descriptor_table->push_back(id); +} + /** \ingroup msg_file * * \brief Set the user data of a #msg_file_t. @@ -196,7 +217,7 @@ msg_file_t MSG_file_open(const char* fullpath, void* data) priv->fullpath = xbt_strdup(fullpath); priv->simdata = xbt_new0(s_simdata_file_t,1); priv->simdata->smx_file = simcall_file_open(fullpath, MSG_host_self()); - priv->desc_id = __MSG_host_get_file_descriptor_id(MSG_host_self()); + priv->desc_id = MSG_host_get_file_descriptor_id(MSG_host_self()); name = bprintf("%s:%s:%d", priv->fullpath, MSG_host_self()->cname(), priv->desc_id); @@ -223,7 +244,7 @@ int MSG_file_close(msg_file_t fd) int res = simcall_file_close(priv->simdata->smx_file, MSG_host_self()); name = bprintf("%s:%s:%d", priv->fullpath, MSG_host_self()->cname(), priv->desc_id); - __MSG_host_release_file_descriptor_id(MSG_host_self(), priv->desc_id); + MSG_host_release_file_descriptor_id(MSG_host_self(), priv->desc_id); xbt_lib_unset(file_lib, name, MSG_FILE_LEVEL, 1); xbt_free(name); return res; @@ -422,12 +443,14 @@ void __MSG_file_destroy(msg_file_priv_t file) { msg_storage_t __MSG_storage_create(smx_storage_t storage) { - const char *name = SIMIX_storage_get_name(storage); - const char *host = SIMIX_storage_get_host(storage); msg_storage_priv_t storage_private = xbt_new0(s_msg_storage_priv_t, 1); - storage_private->hostname = host; - xbt_lib_set(storage_lib,name,MSG_STORAGE_LEVEL,storage_private); - return xbt_lib_get_elm_or_null(storage_lib, name); + + storage_private->name = SIMIX_storage_get_name(storage); + storage_private->hostname = SIMIX_storage_get_host(storage); + storage_private->size = SIMIX_storage_get_size(storage); + + xbt_lib_set(storage_lib, storage_private->name, MSG_STORAGE_LEVEL, storage_private); + return xbt_lib_get_elm_or_null(storage_lib, storage_private->name); } /** @@ -445,7 +468,8 @@ void __MSG_storage_destroy(msg_storage_priv_t storage) { */ const char *MSG_storage_get_name(msg_storage_t storage) { xbt_assert((storage != nullptr), "Invalid parameters"); - return SIMIX_storage_get_name(storage); + msg_storage_priv_t priv = MSG_storage_priv(storage); + return priv->name; } /** \ingroup msg_storage_management @@ -573,7 +597,8 @@ xbt_dict_t MSG_storage_get_content(msg_storage_t storage) */ sg_size_t MSG_storage_get_size(msg_storage_t storage) { - return SIMIX_storage_get_size(storage); + msg_storage_priv_t priv = MSG_storage_priv(storage); + return priv->size; } /** \ingroup msg_storage_management @@ -587,3 +612,5 @@ const char *MSG_storage_get_host(msg_storage_t storage) { msg_storage_priv_t priv = MSG_storage_priv(storage); return priv->hostname; } + +SG_END_DECL()