X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1af4ffdbe3a94ec673728673636f5a36d2b0a539..42899c56484678345296504a65de123846148658:/src/gras/Virtu/sg_process.c diff --git a/src/gras/Virtu/sg_process.c b/src/gras/Virtu/sg_process.c index 8c32f14149..ea013670d4 100644 --- a/src/gras/Virtu/sg_process.c +++ b/src/gras/Virtu/sg_process.c @@ -13,13 +13,14 @@ #include "gras/Msg/msg_interface.h" /* For some checks at simulation end */ #include "gras/Transport/transport_interface.h" /* For some checks at simulation end */ -XBT_LOG_EXTERNAL_CATEGORY(process); -XBT_LOG_DEFAULT_CATEGORY(process); +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(gras_virtu_process); + + void gras_process_init() { gras_hostdata_t *hd=(gras_hostdata_t *)MSG_host_get_data(MSG_host_self()); - gras_procdata_t *pd=xbt_new(gras_procdata_t,1); + gras_procdata_t *pd=xbt_new0(gras_procdata_t,1); gras_trp_procdata_t trp_pd; gras_sg_portrec_t prmeas,pr; int i; @@ -32,12 +33,15 @@ gras_process_init() { if (!hd) { /* First process on this host */ hd=xbt_new(gras_hostdata_t,1); + hd->refcount = 1; hd->ports = xbt_dynar_new(sizeof(gras_sg_portrec_t),NULL); memset(hd->proc, 0, sizeof(hd->proc[0]) * XBT_MAX_CHANNEL); if (MSG_host_set_data(MSG_host_self(),(void*)hd) != MSG_OK) THROW0(system_error,0,"Error in MSG_host_set_data()"); + } else { + hd->refcount++; } /* take a free channel for this process */ @@ -82,6 +86,8 @@ gras_process_init() { void gras_process_exit() { gras_hostdata_t *hd=(gras_hostdata_t *)MSG_host_get_data(MSG_host_self()); + gras_procdata_t *pd=(gras_procdata_t*)MSG_process_get_data(MSG_process_self()); + gras_msg_procdata_t msg_pd=(gras_msg_procdata_t)gras_libdata_by_name("gras_msg"); gras_trp_procdata_t trp_pd=(gras_trp_procdata_t)gras_libdata_by_name("gras_trp"); int myPID=MSG_process_self_PID(); @@ -106,6 +112,13 @@ gras_process_exit() { xbt_dynar_cursor_rm(hd->ports, &cpt); } } + + if ( ! --(hd->refcount)) { + xbt_dynar_free(&hd->ports); + free(hd); + } + gras_procdata_exit(); + free(pd); } /* ************************************************************************** @@ -120,7 +133,17 @@ gras_procdata_t *gras_procdata_get(void) { return pd; } +void * +gras_libdata_by_name_from_remote(const char *name, m_process_t p) { + gras_procdata_t *pd= + (gras_procdata_t *)MSG_process_get_data(p); + xbt_assert2(pd,"process '%s' on '%s' didn't run gras_process_init! (ie, gras_init)", + MSG_process_get_name(p),MSG_host_get_name(MSG_process_get_host(p))); + + return gras_libdata_by_name_from_procdata(name, pd); +} + const char* xbt_procname(void) { const char *res = NULL; m_process_t process = MSG_process_self(); @@ -132,10 +155,10 @@ const char* xbt_procname(void) { return ""; } -int gras_os_getpid(void) { +long int gras_os_getpid(void) { m_process_t process = MSG_process_self(); if ((process != NULL) && (process->simdata)) - return MSG_process_get_PID(MSG_process_self()); + return (long int)MSG_process_get_PID(MSG_process_self()); else - return 0; + return (long int)0; }