
#10639: Tight (non-allocating) loop freezes the scheduler -------------------------------------+------------------------------------- Reporter: gizmo.mk0 | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.10.1 Resolution: | Keywords: Operating System: Windows | Architecture: x86_64 Type of failure: Incorrect result | (amd64) at runtime | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Changes (by simonpj): * cc: slyfox (removed) Comment: My guess is this. With optimisation the `runForever (return ())` turns into a tight loop that does not allocate. Once that loop gets control of the CPU, it never gives it up. Without optimisation, the loop does allocation. This is really a long-standing bug, just a rather rare one. Usually we check whether a thread's time quantum has expired when checking for heap- allocation overflow. If there is no allocation we don't check. I'm pretty sure this is it, so I'll change the title of the ticket. It should be documented though. Would someone feel able to add a bullet to the [https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/bugs.html bugs section] of the user manual? Fixing it properly is tricky, because we don't want to add zillions of checks, and identifying all the risky points is hard. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10639#comment:3 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler