#include "RtsUtils.h"
#include "RtsFlags.h"
#include "OSThreads.h"
-#include "Storage.h" /* initStorage, exitStorage */
#include "Schedule.h" /* initScheduler */
#include "Stats.h" /* initStats */
#include "STM.h" /* initSTM */
#include "ThreadLabels.h"
#include "BlockAlloc.h"
#include "Trace.h"
+#include "RtsTypeable.h"
+#include "Stable.h"
+#include "Hpc.h"
#if defined(RTS_GTK_FRONTPANEL)
#include "FrontPanel.h"
/* initialise the stable pointer table */
initStablePtrTable();
+ /* initialise the shared Typeable store */
+ initTypeableStore();
+
#if defined(DEBUG)
/* initialise thread label table (tso->char*) */
initThreadLabelTable();
#endif
/* start the virtual timer 'subsystem'. */
- startTimer(TICK_MILLISECS);
+ startTimer();
/* Initialise the stats department */
initStats();
freeGroup_lock(bd);
+ startupHpc();
+
#if defined(PROFILING) || defined(DEBUG)
// This must be done after module initialisation.
// ToDo: make this work in the presence of multiple hs_add_root()s.
/* stop timing the shutdown, we're about to print stats */
stat_endExit();
+ /* shutdown the hpc support (if needed) */
+ exitHpc();
+
// clean up things from the storage manager's point of view.
// also outputs the stats (+RTS -s) info.
exitStorage();
+ /* free shared Typeable store */
+ exitTypeableStore();
+
/* initialise the stable pointer table */
exitStablePtrTable();
static int exit_started=rtsFalse;
#endif
+void (*exitFn)(int) = 0;
+
void
stg_exit(int n)
{
IF_PAR_DEBUG(verbose, debugBelch("==-- stg_exit %d on [%x]...", n, mytid));
shutdownParallelSystem(n);
#endif
+ if (exitFn)
+ (*exitFn)(n);
exit(n);
}