+#if defined(GRAN)
+ DEBUG_STRING("Marking Events (GRAN): ");
+ MRoot = (P_) EventHd;
+ found = rtsFalse;
+ do {
+ if (MRoot != NULL) {
+ /* inlined version of MarkNextEvent */
+ switch (EVENT_TYPE( ((eventq) MRoot) )) {
+ case CONTINUETHREAD:
+ case STARTTHREAD:
+ case RESUMETHREAD:
+ case MOVETHREAD:
+ EVENT_GC_INFO( ((eventq) MRoot) ) = 0;
+ Mark = (P_) EVENT_TSO( ((eventq) MRoot) );
+ MStack = (P_) _PRMarking_MarkNextEvent_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ found = rtsTrue;
+ break;
+ case MOVESPARK:
+ EVENT_GC_INFO( ((eventq) MRoot) ) = 0;
+ Mark = (P_) SPARK_NODE(EVENT_SPARK( ((eventq) MRoot) ));
+ MStack = (P_) _PRMarking_MarkNextEvent_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ found = rtsTrue;
+ break;
+ case FETCHNODE:
+ EVENT_GC_INFO( ((eventq) MRoot) ) = 0;
+ Mark = (P_) EVENT_TSO( ((eventq) MRoot) );
+ MStack = (P_) _PRMarking_MarkNextEvent_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ found = rtsTrue;
+ break;
+ case FETCHREPLY:
+ EVENT_GC_INFO( ((eventq) MRoot) ) = 0;
+ Mark = (P_) EVENT_TSO( ((eventq) MRoot) );
+ MStack = (P_) _PRMarking_MarkNextEvent_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ found = rtsTrue;
+ break;
+ case GLOBALBLOCK:
+ EVENT_GC_INFO( ((eventq) MRoot) ) = 0;
+ Mark = (P_) EVENT_TSO( ((eventq) MRoot) );
+ MStack = (P_) _PRMarking_MarkNextEvent_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ found = rtsTrue;
+ break;
+ case UNBLOCKTHREAD:
+ Mark = (P_) EVENT_TSO( ((eventq) MRoot) );
+ MStack = (P_) _PRMarking_MarkNextEvent_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ found = rtsTrue;
+ break;
+ case FINDWORK:
+ MRoot = (P_) EVENT_NEXT( ((eventq) MRoot) );
+ found = rtsFalse;
+ break;
+ default:
+ fprintf(stderr,"Unknown event type %d (event @ %#x) in SMmarking_NextEvent\n",
+ EVENT_TYPE( ((eventq) MRoot) ), MRoot);
+ EXIT(EXIT_FAILURE);
+ }
+ }
+ } while (!found && MRoot != NULL);
+
+ DEBUG_STRING("Marking Sparks (GRAN):");
+ /* ToDo: Check this code */
+ for(proc = 0; proc < RTSflags.GranFlags.proc; ++proc) {
+ for(pool = 0; pool < SPARK_POOLS; pool++) {
+ MRoot = (P_) PendingSparksHd[proc][pool];
+ if (MRoot != NULL) {
+ Mark = (P_) SPARK_NODE( ((sparkq) MRoot) );
+ MStack = (P_) _PRMarking_MarkNextSpark_closure;
+ miniInterpret((StgFunPtr)_startMarkWorld);
+ }
+ } /* forall pool .. */
+ } /* forall proc ... */
+#endif /* GRAN */
+
+#if defined(CONCURRENT) && !defined(GRAN)