[m-dev.] diff: move the initialisation of MR_mmc_options in MR_trace_event_external()

Fergus Henderson fjh at cs.mu.OZ.AU
Sat May 22 10:14:42 AEST 1999

On 21-May-1999, Erwan Jahier <Erwan.Jahier at irisa.fr> wrote:
> Estimated hours taken: 0.1
> Initialise the variable MR_mmc_options only if an interactive query request is
> made; it is useless to pay the price of a call to MR_TRACE_CALL_MERCURY() for
> the other kinds of requests.
> trace/mercury_trace_external.c:
> 	Move the call to 
> 	MR_TRACE_CALL_MERCURY(ML_DI_init_mercury_string(&MR_mmc_options))
> 	from the body of MR_trace_event_external() to the cases of an 
> 	interactive query is made. 

That is a bug.  If you initialize MR_mmc_options every time, then
the MR_REQUEST_MMC_OPTIONS request, which lets the external debugger
set MR_mmc_options, will not work anymore.

Probably mmc_options should not be initialized at each call to
MR_trace_event_external(), for similar reasons.  Instead, its value
should be persistent.  One way to achieve that would be

	static bool MR_mmc_options_initialized = FALSE;
	if (!MR_mmc_options_initialized) {
		... initialization goes here ...
		MR_mmc_options_initialized = TRUE;

Another way would be to initialize it in MR_trace_init_external()
(this would of course require making it a global static variable
rather than a local static variable).  However, this approach
might cause order-of-initialization problems, because you are
calling Mercury code to to the initialization, and the Mercury
memory areas might not have been set up yet at the time that
MR_trace_init_external() is called, or the Mercury code might
have been compiled with debugging enabled and might then call
MR_trace() before MR_trace_init_external() has finished.
Therefore I recommend the former approach.

Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
WWW: <http://www.cs.mu.oz.au/~fjh>  |  of excellence is a lethal habit"
PGP: finger fjh at        |     -- the last words of T. S. Garp.
mercury-developers mailing list
Post messages to:       mercury-developers at cs.mu.oz.au
Administrative Queries: owner-mercury-developers at cs.mu.oz.au
Subscriptions:          mercury-developers-request at cs.mu.oz.au

More information about the developers mailing list