X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/b1acf7fe2f1886e9adcb4313f53548c9995a906c..4fc610b42e6253c348b6fcc85f41f41bf13a19ea:/src/xbt/module.c diff --git a/src/xbt/module.c b/src/xbt/module.c index 5391c310b0..0c90ca5c3b 100644 --- a/src/xbt/module.c +++ b/src/xbt/module.c @@ -8,37 +8,50 @@ /* 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. */ -#include "gras_private.h" +#include "xbt/sysdep.h" +#include "xbt/log.h" +#include "xbt/error.h" +#include "xbt/dynar.h" +#include "xbt/config.h" -GRAS_LOG_NEW_DEFAULT_SUBCATEGORY(module,GRAS); +#include "gras/process.h" /* FIXME: bad loop */ -extern void gras_log_exit(void); +#include "xbt/module.h" /* this module */ -struct gras_module_ { - gras_dynar_t *deps; - gras_cfg_t *cfg; +#include "xbt_modinter.h" /* prototype of other module's init/exit in XBT */ +#include "gras_modinter.h" /* same in GRAS */ + +XBT_LOG_NEW_DEFAULT_SUBCATEGORY(module,xbt, "module handling"); + +static int xbt_running_process = 0; + +struct xbt_module_ { + xbt_dynar_t *deps; + xbt_cfg_t *cfg; int ref; - gras_module_new_fct_t new; - gras_module_finalize_fct_t finalize; + xbt_module_new_fct_t new; + xbt_module_finalize_fct_t finalize; }; void -gras_init(int *argc, char **argv) { - gras_init_defaultlog(argc, argv, NULL); +xbt_init(int *argc, char **argv) { + static int first_run = 1; + if(first_run) + xbt_init_defaultlog(argc, argv, NULL); + first_run = 0; } /** - * gras_init_defaultlog: + * xbt_init_defaultlog: * @argc: * @argv: * * Initialize the gras mecanisms. */ void -gras_init_defaultlog(int *argc,char **argv, const char *defaultlog) { +xbt_init_defaultlog(int *argc,char **argv, const char *defaultlog) { int i,j; char *opt; - gras_error_t errcode; int found=0; INFO0("Initialize GRAS"); @@ -49,7 +62,8 @@ gras_init_defaultlog(int *argc,char **argv, const char *defaultlog) { found = 1; opt=strchr(argv[i],'='); opt++; - TRYFAIL(gras_log_control_set(opt)); + xbt_log_control_set(opt); + DEBUG1("Did apply '%s' as log setting",opt); /*remove this from argv*/ for (j=i+1; j<*argc; j++) { argv[j-1] = argv[j]; @@ -57,28 +71,35 @@ gras_init_defaultlog(int *argc,char **argv, const char *defaultlog) { argv[j-1] = NULL; (*argc)--; i--; /* compensate effect of next loop incrementation */ - WARN1("argc %d",*argc); } } if (!found && defaultlog) { - TRYFAIL(gras_log_control_set(defaultlog)); + xbt_log_control_set(defaultlog); } + gras_process_init(); /* calls procdata_init, which calls dynar_new */ /** init other submodules */ - gras_msg_init(); - gras_trp_init(); - gras_datadesc_init(); + if (xbt_running_process++ == 0) { + gras_msg_init(); + gras_trp_init(); + gras_datadesc_init(); + } } /** - * gras_exit: + * xbt_exit: * * Finalize the gras mecanisms. */ void -gras_exit(){ - gras_msg_exit(); - gras_trp_exit(); - gras_datadesc_exit(); - gras_log_exit(); +xbt_exit(){ + INFO0("Exiting GRAS"); + gras_process_exit(); + if (--xbt_running_process == 0) { + gras_msg_exit(); + gras_trp_exit(); + gras_datadesc_exit(); + } + xbt_log_exit(); + DEBUG0("Exited GRAS"); }