
#13497: GHC does not use select()/poll() correctly on non-Linux platforms -------------------------------------+------------------------------------- Reporter: nh2 | Owner: (none) Type: bug | Status: new Priority: normal | Milestone: Component: Runtime System | Version: 8.0.1 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: | Unknown/Multiple Type of failure: None/Unknown | Test Case: Blocked By: | Blocking: Related Tickets: #8684, #12912 | Differential Rev(s): Wiki Page: | -------------------------------------+------------------------------------- Comment (by nh2): Some comments I've found in the code base: {{{ switch (recent_activity) { case ACTIVITY_INACTIVE: if (force_major) { // We are doing a GC because the system has been idle for a // timeslice and we need to check for deadlock. Record the // fact that we've done a GC and turn off the timer signal; // it will get re-enabled if we run any threads after the GC. recent_activity = ACTIVITY_DONE_GC; }}} {{{ switch (recent_activity) { case ACTIVITY_DONE_GC: { // ACTIVITY_DONE_GC means we turned off the timer signal to // conserve power (see #1623). Re-enable it here. }}} So the disabling of the timer signal is a power saving feature. I don't understand though why this is only done after a certain time (`idleGCDelayTime / tickInterval` many ticks) instead of immediately. Is there something we know only after that many ticks? Or is it a performance optimisation to do it after that many ticks instead of immediately? -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/13497#comment:13 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler