From a6e8418a71b14ef85ee7134be654689b17765f03 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Wed, 25 May 2011 10:00:29 +0100 Subject: prog_argv and rts_argv now contain *copies* of the args passed to setupRtsFlags(), rather than sharing the memory. Previously if the caller of hs_init() passed in dynamically-allocated memory and then freed it, random crashes could happen later (#5177). --- rts/RtsStartup.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'rts/RtsStartup.c') diff --git a/rts/RtsStartup.c b/rts/RtsStartup.c index 236d07a9e0..952e806345 100644 --- a/rts/RtsStartup.c +++ b/rts/RtsStartup.c @@ -297,9 +297,6 @@ hs_exit_(rtsBool wait_foreign) checkFPUStack(); #endif - // Free the full argv storage - freeFullProgArgv(); - #if defined(THREADED_RTS) ioManagerDie(); #endif @@ -402,6 +399,8 @@ hs_exit_(rtsBool wait_foreign) // heap memory (e.g. by being passed a ByteArray#). freeStorage(wait_foreign); + // Free the various argvs + freeRtsArgs(); } // The real hs_exit(): -- cgit v1.2.1