X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/504b4d20dd2db9ea1eaa9c4b390b2a412d7c9779..5d038603f775914afc8c6f35eff53f3682802f5b:/src/msg/host.c diff --git a/src/msg/host.c b/src/msg/host.c index 2b933f9ee0..f5cbf871e1 100644 --- a/src/msg/host.c +++ b/src/msg/host.c @@ -1,8 +1,5 @@ -/* $Id$ */ - -/* Copyright (c) 2002-2007 Arnaud Legrand. */ -/* Copyright (c) 2007 Bruno Donassolo. */ -/* All rights reserved. */ +/* Copyright (c) 2004, 2005, 2006, 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -10,6 +7,7 @@ #include "msg/private.h" #include "xbt/sysdep.h" #include "xbt/log.h" +#include "mailbox.h" /** \defgroup m_host_management Management functions of Hosts * \brief This section describes the host structure of MSG @@ -35,6 +33,8 @@ m_host_t __MSG_host_create(smx_host_t workstation, void *data) m_host_t host = xbt_new0(s_m_host_t, 1); int i; + char alias[MAX_ALIAS_NAME + 1] = { 0 }; /* buffer used to build the key of the mailbox */ + name = SIMIX_host_get_name(workstation); /* Host structure */ host->name = xbt_strdup(name); @@ -43,13 +43,18 @@ m_host_t __MSG_host_create(smx_host_t workstation, void *data) simdata->smx_host = workstation; - simdata->mbox = xbt_new0(xbt_fifo_t, msg_global->max_channel); - for (i = 0; i < msg_global->max_channel; i++) - simdata->mbox[i] = xbt_fifo_new(); + if (msg_global->max_channel > 0) + simdata->mailboxes = xbt_new0(msg_mailbox_t, msg_global->max_channel); + + for (i = 0; i < msg_global->max_channel; i++) { + sprintf(alias, "%s:%d", name, i); - simdata->sleeping = xbt_new0(smx_cond_t, msg_global->max_channel); - simdata->mutex = SIMIX_mutex_init(); - SIMIX_host_set_data(workstation, host); + /* the key of the mailbox (in this case) is build from the name of the host and the channel number */ + simdata->mailboxes[i] = MSG_mailbox_new(alias); + memset(alias, 0, MAX_ALIAS_NAME + 1); + } + + SIMIX_req_host_set_data(workstation, host); /* Update global variables */ xbt_fifo_unshift(msg_global->host, host); @@ -102,7 +107,7 @@ const char *MSG_host_get_name(m_host_t host) { xbt_assert0((host != NULL) - && (host->simdata != NULL), "Invalid parameters"); + && (host->simdata != NULL), "Invalid parameters"); /* Return data */ return (host->name); @@ -126,6 +131,7 @@ void __MSG_host_destroy(m_host_t host) { simdata_host_t simdata = NULL; int i = 0; + char alias[MAX_ALIAS_NAME + 1] = { 0 }; /* buffer used to build the key of the mailbox */ xbt_assert0((host != NULL), "Invalid parameters"); @@ -133,18 +139,22 @@ void __MSG_host_destroy(m_host_t host) /* SIMIX host will be cleaned when MSG_clean calls SIMIX_clean */ simdata = (host)->simdata; - for (i = 0; i < msg_global->max_channel; i++) - xbt_fifo_free(simdata->mbox[i]); - free(simdata->mbox); - free(simdata->sleeping); - SIMIX_mutex_destroy(simdata->mutex); + for (i = 0; i < msg_global->max_channel; i++) { + sprintf(alias, "%s:%d", host->name, i); + MSG_mailbox_free((void *) (simdata->mailboxes[i])); + memset(alias, 0, MAX_ALIAS_NAME + 1); + } + + if (msg_global->max_channel > 0) + free(simdata->mailboxes); + free(simdata); /* Clean host structure */ free(host->name); free(host); - return; + } /** \ingroup m_host_management @@ -183,17 +193,17 @@ double MSG_get_host_speed(m_host_t h) { xbt_assert0((h != NULL), "Invalid parameters"); - return (SIMIX_host_get_speed(h->simdata->smx_host)); + return (SIMIX_req_host_get_speed(h->simdata->smx_host)); } /** \ingroup m_host_management - * \brief Returns the value of a certain host property + * \brief Returns the value of a given host property * * \param host a host * \param name a property name - * \return value of a property + * \return value of a property (or NULL if property not set) */ -const char* MSG_host_get_property_value(m_host_t host, char* name) +const char *MSG_host_get_property_value(m_host_t host, const char *name) { return xbt_dict_get_or_null(MSG_host_get_properties(host), name); } @@ -206,9 +216,9 @@ const char* MSG_host_get_property_value(m_host_t host, char* name) */ xbt_dict_t MSG_host_get_properties(m_host_t host) { - xbt_assert0((host != NULL), "Invalid parameters"); + xbt_assert0((host != NULL), "Invalid parameters (host is NULL)"); - return (SIMIX_host_get_properties(host->simdata->smx_host)); + return (SIMIX_req_host_get_properties(host->simdata->smx_host)); } @@ -219,6 +229,6 @@ xbt_dict_t MSG_host_get_properties(m_host_t host) */ int MSG_host_is_avail(m_host_t h) { - xbt_assert0((h != NULL), "Invalid parameters"); - return (SIMIX_host_get_state(h->simdata->smx_host)); + xbt_assert0((h != NULL), "Invalid parameters (host is NULL)"); + return (SIMIX_req_host_get_state(h->simdata->smx_host)); }