/* -----------------------------------------------------------------------------
- * $Id: Schedule.h,v 1.40 2003/10/01 10:49:09 wolfgang Exp $
+ * $Id: Schedule.h,v 1.43 2003/12/12 16:35:21 simonmar Exp $
*
* (c) The GHC Team 1998-1999
*
*/
void wakeBlockedWorkerThread(void); /* In Select.c */
+/* resetWorkerWakeupPipeAfterFork()
+ *
+ * Notify Select.c that a fork() has occured
+ *
+ * Called from STG : NO
+ * Locks assumed : don't care, but must be called right after fork()
+ */
+void resetWorkerWakeupPipeAfterFork(void); /* In Select.c */
/* GetRoots(evac_fn f)
*
StgBool rtsSupportsBoundThreads(void);
StgBool isThreadBound(StgTSO *tso);
-StgInt forkProcess(StgTSO *tso);
+StgInt forkProcess(HsStablePtr *entry);
extern SchedulerStatus rts_mainLazyIO(HaskellObj p, /*out*/HaskellObj *ret);
/* Pop the first thread off the runnable queue.
*/
-#define POP_RUN_QUEUE() \
- ({ StgTSO *t = run_queue_hd; \
- if (t != END_TSO_QUEUE) { \
- run_queue_hd = t->link; \
- t->link = END_TSO_QUEUE; \
+#define POP_RUN_QUEUE(pt) \
+ do { StgTSO *__tmp_t = run_queue_hd; \
+ if (__tmp_t != END_TSO_QUEUE) { \
+ run_queue_hd = __tmp_t->link; \
+ __tmp_t->link = END_TSO_QUEUE; \
if (run_queue_hd == END_TSO_QUEUE) { \
run_queue_tl = END_TSO_QUEUE; \
} \
} \
- t; \
- })
+ pt = __tmp_t; \
+ } while(0)
/* Add a thread to the end of the blocked queue.
*/
startSchedulerTaskIfNecessary(void);
#endif
+#ifdef DEBUG
+extern void sched_belch(char *s, ...);
+#endif
+
#endif /* __SCHEDULE_H__ */