projects
/
ghc-hetmet.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Fixes for building the libraries with cabal on Windows
[ghc-hetmet.git]
/
rts
/
Schedule.c
diff --git
a/rts/Schedule.c
b/rts/Schedule.c
index
a7a0f33
..
3d87003
100644
(file)
--- a/
rts/Schedule.c
+++ b/
rts/Schedule.c
@@
-643,7
+643,7
@@
run_thread:
t->saved_errno = errno;
#if mingw32_HOST_OS
// Similarly for Windows error code
t->saved_errno = errno;
#if mingw32_HOST_OS
// Similarly for Windows error code
- SetLastError(t->saved_winerror);
+ t->saved_winerror = GetLastError();
#endif
#if defined(THREADED_RTS)
#endif
#if defined(THREADED_RTS)
@@
-862,7
+862,8
@@
schedulePushWork(Capability *cap USED_IF_THREADS,
static void
scheduleStartSignalHandlers(Capability *cap)
{
static void
scheduleStartSignalHandlers(Capability *cap)
{
- if (signals_pending()) { // safe outside the lock
+ if (RtsFlags.MiscFlags.install_signal_handlers && signals_pending()) {
+ // safe outside the lock
startSignalHandlers(cap);
}
}
startSignalHandlers(cap);
}
}
@@
-985,7
+986,7
@@
scheduleDetectDeadlock (Capability *cap, Task *task)
* for signals to arrive rather then bombing out with a
* deadlock.
*/
* for signals to arrive rather then bombing out with a
* deadlock.
*/
- if ( anyUserHandlers() ) {
+ if ( RtsFlags.MiscFlags.install_signal_handlers && anyUserHandlers() ) {
debugTrace(DEBUG_sched,
"still deadlocked, waiting for signals...");
debugTrace(DEBUG_sched,
"still deadlocked, waiting for signals...");
@@
-2110,7
+2111,7
@@
scheduleDoGC (Capability *cap, Task *task USED_IF_THREADS, rtsBool force_major)
* Singleton fork(). Do not copy any running threads.
* ------------------------------------------------------------------------- */
* Singleton fork(). Do not copy any running threads.
* ------------------------------------------------------------------------- */
-StgInt
+pid_t
forkProcess(HsStablePtr *entry
#ifndef FORKPROCESS_PRIMOP_SUPPORTED
STG_UNUSED
forkProcess(HsStablePtr *entry
#ifndef FORKPROCESS_PRIMOP_SUPPORTED
STG_UNUSED
@@
-2195,6
+2196,10
@@
forkProcess(HsStablePtr *entry
cap->returning_tasks_tl = NULL;
#endif
cap->returning_tasks_tl = NULL;
#endif
+ // On Unix, all timers are reset in the child, so we need to start
+ // the timer again.
+ startTimer();
+
cap = rts_evalStableIO(cap, entry, NULL); // run the action
rts_checkSchedStatus("forkProcess",cap);
cap = rts_evalStableIO(cap, entry, NULL); // run the action
rts_checkSchedStatus("forkProcess",cap);
@@
-2704,7
+2709,9
@@
GetRoots( evac_fn evac )
#if defined(RTS_USER_SIGNALS)
// mark the signal handlers (signals should be already blocked)
#if defined(RTS_USER_SIGNALS)
// mark the signal handlers (signals should be already blocked)
- markSignalHandlers(evac);
+ if (RtsFlags.MiscFlags.install_signal_handlers) {
+ markSignalHandlers(evac);
+ }
#endif
}
#endif
}