#ifndef SM_STORAGE_H
#define SM_STORAGE_H
+#include "Capability.h"
+
+BEGIN_RTS_PRIVATE
+
/* -----------------------------------------------------------------------------
Initialisation / De-initialisation
-------------------------------------------------------------------------- */
Storage manager state
-------------------------------------------------------------------------- */
-extern bdescr * pinned_object_block;
-
-extern nat alloc_blocks;
-extern nat alloc_blocks_lim;
-
INLINE_HEADER rtsBool
-doYouWantToGC( void )
+doYouWantToGC( Capability *cap )
{
- return (alloc_blocks >= alloc_blocks_lim);
+ return (cap->r.rCurrentNursery->link == NULL ||
+ cap->r.rNursery->n_large_blocks >= alloc_blocks_lim);
}
/* for splitting blocks groups in two */
}
/* -----------------------------------------------------------------------------
- This is the write barrier for MUT_VARs, a.k.a. IORefs. A
- MUT_VAR_CLEAN object is not on the mutable list; a MUT_VAR_DIRTY
- is. When written to, a MUT_VAR_CLEAN turns into a MUT_VAR_DIRTY
- and is put on the mutable list.
- -------------------------------------------------------------------------- */
-
-void dirty_MUT_VAR(StgRegTable *reg, StgClosure *p);
-
-/* -----------------------------------------------------------------------------
- Similarly, the write barrier for MVARs
+ The write barrier for MVARs
-------------------------------------------------------------------------- */
void dirty_MVAR(StgRegTable *reg, StgClosure *p);
Nursery manipulation
-------------------------------------------------------------------------- */
+extern step *nurseries;
+
void resetNurseries ( void );
void resizeNurseries ( nat blocks );
void resizeNurseriesFixed ( nat blocks );
extern StgClosure * caf_list;
extern StgClosure * revertible_caf_list;
+END_RTS_PRIVATE
+
#endif /* SM_STORAGE_H */