From: schnorr Date: Thu, 5 Aug 2010 11:06:13 +0000 (+0000) Subject: detecting if TRACE_start was called too soon (before TRACE_global_init) X-Git-Tag: v3_5~710 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/f9b6de55a6f3f3c53cee2fcb55935cbcb851a4f1 detecting if TRACE_start was called too soon (before TRACE_global_init) git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@8111 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/src/instr/instr_config.c b/src/instr/instr_config.c index 57a9ee9fbc..a7101621ed 100644 --- a/src/instr/instr_config.c +++ b/src/instr/instr_config.c @@ -16,6 +16,13 @@ #define OPT_TRACING_MSG_VOLUME "tracing/msg/volume" #define OPT_TRACING_FILENAME "tracing/filename" +static int trace_configured = 0; + +int _TRACE_configured (void) +{ + return trace_configured; +} + int _TRACE_smpi_enabled (void) { return xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI); @@ -89,6 +96,9 @@ void TRACE_global_init(int *argc, char **argv) "Tracing of MSG communication volume (experimental).", xbt_cfgelm_int, &default_tracing_msg_volume, 0, 1, NULL, NULL); + + /* instrumentation can be considered configured now */ + trace_configured = 1; } #endif diff --git a/src/instr/interface.c b/src/instr/interface.c index 57157ce009..5e2e2193f6 100644 --- a/src/instr/interface.c +++ b/src/instr/interface.c @@ -16,15 +16,25 @@ static xbt_dict_t created_categories; int TRACE_start () { - FILE *file = NULL; + if (!_TRACE_configured()){ + THROW0 (tracing_error, TRACE_ERROR_START, + "TRACE_start should be called after SimGrid initialization functions."); + return 0; + } + if (IS_TRACING) { /* what? trace is already active... ignore.. */ - THROW0 (tracing_error, TRACE_ERROR_START, - "TRACE_start called, but tracing is already active"); + THROW0 (tracing_error, TRACE_ERROR_START, + "TRACE_start called, but tracing is already active."); return 0; } char *filename = _TRACE_filename (); - file = fopen(filename, "w"); + if (!filename){ + THROW0 (tracing_error, TRACE_ERROR_START, + "Trace filename is not initialized."); + return 0; + } + FILE *file = fopen(filename, "w"); if (!file) { THROW1 (tracing_error, TRACE_ERROR_START, "Tracefile %s could not be opened for writing.", filename); diff --git a/src/instr/private.h b/src/instr/private.h index 89b16ee2fe..61c9d38f52 100644 --- a/src/instr/private.h +++ b/src/instr/private.h @@ -130,6 +130,7 @@ int TRACE_surf_gtnets_get_dst (void *action); void TRACE_surf_gtnets_destroy (void *action); /* from instr_config.c */ +int _TRACE_configured (void); int _TRACE_smpi_enabled (void); int _TRACE_platform_enabled (void); int _TRACE_msg_task_enabled (void);