diff options
author | Simon Marlow <simonmar@microsoft.com> | 2006-05-24 12:28:39 +0000 |
---|---|---|
committer | Simon Marlow <simonmar@microsoft.com> | 2006-05-24 12:28:39 +0000 |
commit | 7a1f8fbdbab99465793c50bd9fb376c950e7e9d7 (patch) | |
tree | 04e40cc95c37d452ed26ca9909b1ff97abe8aeac /rts/Prelude.h | |
parent | 3065ea2499deee8d4152eaf0804cc92c7217a2ba (diff) | |
download | haskell-7a1f8fbdbab99465793c50bd9fb376c950e7e9d7.tar.gz |
Better control of the IO manager thread; improvements to deadlock checking
In the threaded RTS on *nix platforms:
- we now start the IO manager thread eagerly at startup time
(previously was started on demand).
- we now ask the IO manager thread to stop at shutdown
- In Timer.c:handle_tick, if it looks like we might be in a
deadlock, instead of calling prodOneCapability() which was known to be
wrong, we now send a byte down the IO manager's pipe to wake it up.
This also avoids a case of double-acquisition of a mutex, which
happened if prodOneCapability() was called while the current thread
was holding a mutex.
Diffstat (limited to 'rts/Prelude.h')
-rw-r--r-- | rts/Prelude.h | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/rts/Prelude.h b/rts/Prelude.h index c209b2b800..35d62b2310 100644 --- a/rts/Prelude.h +++ b/rts/Prelude.h @@ -42,6 +42,10 @@ PRELUDE_CLOSURE(GHCziIOBase_BlockedIndefinitely_closure); PRELUDE_CLOSURE(GHCziIOBase_NonTermination_closure); PRELUDE_CLOSURE(GHCziIOBase_NestedAtomically_closure); +#if !defined(mingw32_HOST_OS) +PRELUDE_CLOSURE(GHCziConc_ensureIOManagerIsRunning_closure); +#endif + PRELUDE_INFO(GHCziBase_Czh_static_info); PRELUDE_INFO(GHCziBase_Izh_static_info); PRELUDE_INFO(GHCziFloat_Fzh_static_info); |