projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Better control of the IO manager thread; improvements to deadlock checking
[ghc-hetmet.git]
/
rts
/
Timer.c
diff --git
a/rts/Timer.c
b/rts/Timer.c
index
0bfea2d
..
4b13be4
100644
(file)
--- a/
rts/Timer.c
+++ b/
rts/Timer.c
@@
-21,6
+21,7
@@
#include "Timer.h"
#include "Ticker.h"
#include "Capability.h"
#include "Timer.h"
#include "Ticker.h"
#include "Capability.h"
+#include "RtsSignals.h"
/* ticks left before next pre-emptive context switch */
static int ticks_to_ctxt_switch = 0;
/* ticks left before next pre-emptive context switch */
static int ticks_to_ctxt_switch = 0;
@@
-71,12
+72,19
@@
handle_tick(int unused STG_UNUSED)
blackholes_need_checking = rtsTrue;
/* hack: re-use the blackholes_need_checking flag */
blackholes_need_checking = rtsTrue;
/* hack: re-use the blackholes_need_checking flag */
+#if !defined(mingw32_HOST_OS)
+ // This forces the IO Manager thread to wakeup, which will
+ // in turn ensure that some OS thread wakes up and runs the
+ // scheduler loop, which will cause a GC and deadlock check.
+ ioManagerWakeup();
+#else
/* ToDo: this doesn't work. Can't invoke
* pthread_cond_signal from a signal handler.
* Furthermore, we can't prod a capability that we
* might be holding. What can we do?
*/
prodOneCapability();
/* ToDo: this doesn't work. Can't invoke
* pthread_cond_signal from a signal handler.
* Furthermore, we can't prod a capability that we
* might be holding. What can we do?
*/
prodOneCapability();
+#endif
}
break;
default:
}
break;
default: