#include "OSThreads.h"
#include "Capability.h"
+#include "EventLog.h"
/* initScheduler(), exitScheduler()
* Called from STG : no
* Called from STG : yes
* Locks assumed : none
*/
-#if defined(GRAN)
-void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node);
-#elif defined(PAR)
-void awakenBlockedQueue(StgBlockingQueueElement *q, StgClosure *node);
-#else
void awakenBlockedQueue (Capability *cap, StgTSO *tso);
-#endif
/* wakeUpRts()
*
* Called from STG : NO
* Locks assumed : none
*/
-void workerStart(Task *task);
-
-#if defined(GRAN)
-void awaken_blocked_queue(StgBlockingQueueElement *q, StgClosure *node);
-void unlink_from_bq(StgTSO* tso, StgClosure* node);
-void initThread(StgTSO *tso, nat stack_size, StgInt pri);
-#elif defined(PAR)
-nat run_queue_len(void);
-void awaken_blocked_queue(StgBlockingQueueElement *q, StgClosure *node);
-void initThread(StgTSO *tso, nat stack_size);
-#else
+#if defined(THREADED_RTS)
+void OSThreadProcAttr workerStart(Task *task);
+#endif
+
char *info_type(StgClosure *closure); // dummy
char *info_type_by_ip(StgInfoTable *ip); // dummy
void awaken_blocked_queue(StgTSO *q);
void initThread(StgTSO *tso, nat stack_size);
-#endif
-
-/* Context switch flag.
- * Locks required : none (conflicts are harmless)
- */
-extern int RTS_VAR(context_switch);
/* The state of the scheduler. This is used to control the sequence
* of events during shutdown, and when the runtime is interrupted
#define SCHED_INTERRUPTING 1 /* ^C detected, before threads are deleted */
#define SCHED_SHUTTING_DOWN 2 /* final shutdown */
-extern rtsBool RTS_VAR(sched_state);
+extern volatile StgWord RTS_VAR(sched_state);
/*
* flag that tracks whether we have done any execution in this time slice.
* INACTIVE to DONE_GC happens under sched_mutex. No lock required
* to set it to ACTIVITY_YES.
*/
-extern nat recent_activity;
+extern volatile StgWord recent_activity;
/* Thread queues.
* Locks required : sched_mutex
*
* In GranSim we have one run/blocked_queue per PE.
*/
-#if defined(GRAN)
-// run_queue_hds defined in GranSim.h
-#else
extern StgTSO *RTS_VAR(blackhole_queue);
#if !defined(THREADED_RTS)
extern StgTSO *RTS_VAR(blocked_queue_hd), *RTS_VAR(blocked_queue_tl);
extern StgTSO *RTS_VAR(sleeping_queue);
#endif
-#endif
/* Set to rtsTrue if there are threads on the blackhole_queue, and
* it is possible that one or more of them may be available to run.
*/
extern rtsBool blackholes_need_checking;
+extern rtsBool heap_overflow;
+
#if defined(THREADED_RTS)
extern Mutex RTS_VAR(sched_mutex);
#endif
#ifdef DEBUG
void print_bq (StgClosure *node);
#endif
-#if defined(PAR)
-void print_bqe (StgBlockingQueueElement *bqe);
-#endif
/* -----------------------------------------------------------------------------
* Some convenient macros/inline functions...
setTSOLink(cap, cap->run_queue_tl, tso);
}
cap->run_queue_tl = tso;
+ postEvent (cap, EVENT_THREAD_RUNNABLE, tso->id, 0);
}
-/* Push a thread on the beginning of the run queue. Used for
- * newly awakened threads, so they get run as soon as possible.
+/* Push a thread on the beginning of the run queue.
* ASSUMES: cap->running_task is the current task.
*/
INLINE_HEADER void