From d856f4bd6806492b443db55bd92257d4636a6894 Mon Sep 17 00:00:00 2001 From: Takahiro Hirofuchi Date: Thu, 28 Feb 2013 14:25:00 +0100 Subject: [PATCH 1/1] Correctly destroy the MSG_host object of a VM --- include/msg/msg.h | 3 ++- src/bindings/lua/lua_host.c | 2 +- src/msg/msg_global.c | 2 +- src/msg/msg_host.c | 19 ++++++++++++++----- src/msg/msg_private.h | 2 +- src/msg/msg_vm.c | 2 ++ 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/include/msg/msg.h b/include/msg/msg.h index a739ece795..6584b8806c 100644 --- a/include/msg/msg.h +++ b/include/msg/msg.h @@ -95,7 +95,8 @@ XBT_PUBLIC(int) MSG_get_host_msgload(msg_host_t host); /* int MSG_get_msgload(void); This function lacks specification; discard it */ XBT_PUBLIC(double) MSG_get_host_speed(msg_host_t h); XBT_PUBLIC(int) MSG_host_is_avail(msg_host_t h); -XBT_PUBLIC(void) __MSG_host_destroy(msg_host_priv_t host); +XBT_PUBLIC(void) __MSG_host_priv_free(msg_host_priv_t priv); +XBT_PUBLIC(void) __MSG_host_destroy(msg_host_t host); /*property handlers*/ XBT_PUBLIC(xbt_dict_t) MSG_host_get_properties(msg_host_t host); diff --git a/src/bindings/lua/lua_host.c b/src/bindings/lua/lua_host.c index a862a2ae86..46d9086b0d 100644 --- a/src/bindings/lua/lua_host.c +++ b/src/bindings/lua/lua_host.c @@ -184,7 +184,7 @@ static int l_host_sleep(lua_State *L) static int l_host_destroy(lua_State *L) { msg_host_t ht = sglua_check_host(L, 1); - __MSG_host_destroy(MSG_host_priv(ht)); + __MSG_host_priv_free(MSG_host_priv(ht)); return 0; } diff --git a/src/msg/msg_global.c b/src/msg/msg_global.c index f28d3e67dd..7290f944f8 100644 --- a/src/msg/msg_global.c +++ b/src/msg/msg_global.c @@ -68,7 +68,7 @@ void MSG_init_nocheck(int *argc, char **argv) { #endif XBT_DEBUG("ADD MSG LEVELS"); - MSG_HOST_LEVEL = xbt_lib_add_level(host_lib, (void_f_pvoid_t) __MSG_host_destroy); + MSG_HOST_LEVEL = xbt_lib_add_level(host_lib, (void_f_pvoid_t) __MSG_host_priv_free); atexit(MSG_exit); } diff --git a/src/msg/msg_host.c b/src/msg/msg_host.c index 5a0de0d55a..52b25ae743 100644 --- a/src/msg/msg_host.c +++ b/src/msg/msg_host.c @@ -112,21 +112,30 @@ msg_host_t MSG_host_self(void) } /* - * \brief Destroys a host (internal call only) + * \brief Frees private data of a host (internal call only) */ -void __MSG_host_destroy(msg_host_priv_t host) { - +void __MSG_host_priv_free(msg_host_priv_t priv) +{ #ifdef MSG_USE_DEPRECATED if (msg_global->max_channel > 0) - free(host->mailboxes); + free(priv->mailboxes); #endif + free(priv); +} + +/* + * \brief Destroys a host (internal call only) + */ +void __MSG_host_destroy(msg_host_t host) +{ + const char *name = MSG_host_get_name(host); /* TODO: * What happens if VMs still remain on this host? * Revisit here after the surf layer gets stable. **/ - free(host); + xbt_lib_unset(host_lib, name, MSG_HOST_LEVEL, 1); } /** \ingroup m_host_management diff --git a/src/msg/msg_private.h b/src/msg/msg_private.h index a83c36c687..e80ea650f8 100644 --- a/src/msg/msg_private.h +++ b/src/msg/msg_private.h @@ -120,7 +120,7 @@ XBT_PUBLIC_DATA(MSG_Global_t) msg_global; #endif msg_host_t __MSG_host_create(smx_host_t workstation); -void __MSG_host_destroy(msg_host_priv_t host); +void __MSG_host_destroy(msg_host_t host); void MSG_process_cleanup_from_SIMIX(smx_process_t smx_proc); void MSG_process_create_from_SIMIX(smx_process_t *process, const char *name, diff --git a/src/msg/msg_vm.c b/src/msg/msg_vm.c index 33ece79472..77c2da7d00 100644 --- a/src/msg/msg_vm.c +++ b/src/msg/msg_vm.c @@ -378,6 +378,8 @@ void MSG_vm_destroy(msg_vm_t vm) /* Then, destroy the VM object */ simcall_vm_destroy(vm); + __MSG_host_destroy(vm); + #ifdef HAVE_TRACING TRACE_msg_vm_end(vm); #endif -- 2.20.1