#include "Stats.h" /* initStats */
#include "STM.h" /* initSTM */
#include "Signals.h"
+#include "RtsSignals.h"
#include "Timer.h" /* startTimer, stopTimer */
#include "Weak.h"
#include "Ticky.h"
startupAsyncIO();
#endif
- initSTM();
-
#ifdef RTS_GTK_FRONTPANEL
if (RtsFlags.GcFlags.frontpanel) {
initFrontPanel();
hs_add_root(void (*init_root)(void))
{
bdescr *bd;
-#ifdef SMP
- Capability cap;
-#else
-#define cap MainCapability
-#endif
nat init_sp;
+ Capability *cap = &MainCapability;
if (hs_init_count <= 0) {
barf("hs_add_root() must be called after hs_init()");
/* The initialisation stack grows downward, with sp pointing
to the last occupied word */
init_sp = INIT_STACK_BLOCKS*BLOCK_SIZE_W;
- bd = allocGroup(INIT_STACK_BLOCKS);
+ bd = allocGroup_lock(INIT_STACK_BLOCKS);
init_stack = (F_ *)bd->start;
init_stack[--init_sp] = (F_)stg_init_finish;
if (init_root != NULL) {
init_stack[--init_sp] = (F_)init_root;
}
- cap.r.rSp = (P_)(init_stack + init_sp);
- StgRun((StgFunPtr)stg_init, &cap.r);
+ cap->r.rSp = (P_)(init_stack + init_sp);
+ StgRun((StgFunPtr)stg_init, &cap->r);
- freeGroup(bd);
+ freeGroup_lock(bd);
#if defined(PROFILING) || defined(DEBUG)
// This must be done after module initialisation.