summaryrefslogtreecommitdiff
path: root/rts
diff options
context:
space:
mode:
Diffstat (limited to 'rts')
-rw-r--r--rts/IOManager.h15
-rw-r--r--rts/Schedule.c14
-rw-r--r--rts/Schedule.h16
3 files changed, 29 insertions, 16 deletions
diff --git a/rts/IOManager.h b/rts/IOManager.h
index 515cfc2f85..72bfac1fb0 100644
--- a/rts/IOManager.h
+++ b/rts/IOManager.h
@@ -155,5 +155,20 @@ void insertIntoSleepingQueue(StgTSO *tso, LowResTime target);
#define USED_IF_THREADS_AND_NOT_MINGW32 STG_UNUSED
#endif
+/* -----------------------------------------------------------------------------
+ * INLINE functions... private from here on down.
+ *
+ * Some of these hooks are performance sensitive so parts of them are
+ * implemented here so they can be inlined.
+ * -----------------------------------------------------------------------------
+ */
+
+/* TODO: rename and replace these macros by inline functions
+ * these have been moved here from Scheduler.h
+ */
+#if !defined(THREADED_RTS)
+#define EMPTY_BLOCKED_QUEUE(cap) (emptyQueue(cap->iomgr->blocked_queue_hd))
+#define EMPTY_SLEEPING_QUEUE(cap) (emptyQueue(cap->iomgr->sleeping_queue))
+#endif
#include "EndPrivate.h"
diff --git a/rts/Schedule.c b/rts/Schedule.c
index 67e2ff4ee8..5d3789c31d 100644
--- a/rts/Schedule.c
+++ b/rts/Schedule.c
@@ -143,6 +143,7 @@ static void startWorkerTasks (uint32_t from USED_IF_THREADS,
#endif
static void scheduleStartSignalHandlers (Capability *cap);
static void scheduleCheckBlockedThreads (Capability *cap);
+static bool emptyThreadQueues(Capability *cap);
static void scheduleProcessInbox(Capability **cap);
static void scheduleDetectDeadlock (Capability **pcap, Task *task);
static void schedulePushWork(Capability *cap, Task *task);
@@ -167,6 +168,7 @@ static void deleteAllThreads (void);
static void deleteThread_(StgTSO *tso);
#endif
+
/* ---------------------------------------------------------------------------
Main scheduling loop.
@@ -916,6 +918,18 @@ scheduleCheckBlockedThreads(Capability *cap USED_IF_NOT_THREADS)
#endif
}
+static bool
+emptyThreadQueues(Capability *cap)
+{
+ return emptyRunQueue(cap)
+#if !defined(THREADED_RTS)
+ // TODO replace this by a test that deferrs to the active I/O manager
+ && EMPTY_BLOCKED_QUEUE(cap) && EMPTY_SLEEPING_QUEUE(cap)
+#endif
+ ;
+}
+
+
/* ----------------------------------------------------------------------------
* Detect deadlock conditions and attempt to resolve them.
* ------------------------------------------------------------------------- */
diff --git a/rts/Schedule.h b/rts/Schedule.h
index 64f9f7d166..b0898b9a4c 100644
--- a/rts/Schedule.h
+++ b/rts/Schedule.h
@@ -174,22 +174,6 @@ truncateRunQueue(Capability *cap)
cap->n_run_queue = 0;
}
-#if !defined(THREADED_RTS)
-#define EMPTY_BLOCKED_QUEUE(cap) (emptyQueue(cap->iomgr->blocked_queue_hd))
-#define EMPTY_SLEEPING_QUEUE(cap) (emptyQueue(cap->iomgr->sleeping_queue))
-#endif
-
-INLINE_HEADER bool
-emptyThreadQueues(Capability *cap)
-{
- return emptyRunQueue(cap)
-#if !defined(THREADED_RTS)
- // TODO replace this by a test that deferrs to the active I/O manager
- && EMPTY_BLOCKED_QUEUE(cap) && EMPTY_SLEEPING_QUEUE(cap)
-#endif
- ;
-}
-
#endif /* !IN_STG_CODE */
#include "EndPrivate.h"