[Git][ghc/ghc][master] Session: Memoize stderrSupportsAnsiColors
Marge Bot
gitlab at gitlab.haskell.org
Thu Apr 2 05:48:50 UTC 2020
Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
88f38b03 by Ben Gamari at 2020-04-02T01:48:42-04:00
Session: Memoize stderrSupportsAnsiColors
Not only is this a reasonable efficiency measure but it avoids making
reentrant calls into ncurses, which is not thread-safe. See #17922.
- - - - -
2 changed files:
- compiler/GHC/Driver/Session.hs
- compiler/main/SysTools/Terminal.hs
Changes:
=====================================
compiler/GHC/Driver/Session.hs
=====================================
@@ -1253,7 +1253,6 @@ initDynFlags dflags = do
`catchIOError` \_ -> return False
ghcNoUnicodeEnv <- lookupEnv "GHC_NO_UNICODE"
let useUnicode' = isNothing ghcNoUnicodeEnv && canUseUnicode
- canUseColor <- stderrSupportsAnsiColors
maybeGhcColorsEnv <- lookupEnv "GHC_COLORS"
maybeGhcColoursEnv <- lookupEnv "GHC_COLOURS"
let adjustCols (Just env) = Col.parseScheme env
@@ -1270,7 +1269,7 @@ initDynFlags dflags = do
nextWrapperNum = wrapperNum,
useUnicode = useUnicode',
useColor = useColor',
- canUseColor = canUseColor,
+ canUseColor = stderrSupportsAnsiColors,
colScheme = colScheme',
rtldInfo = refRtldInfo,
rtccInfo = refRtccInfo
=====================================
compiler/main/SysTools/Terminal.hs
=====================================
@@ -18,6 +18,8 @@ import qualified Graphics.Win32 as Win32
import qualified System.Win32 as Win32
#endif
+import System.IO.Unsafe
+
#if defined(mingw32_HOST_OS) && !defined(WINAPI)
# if defined(i386_HOST_ARCH)
# define WINAPI stdcall
@@ -28,9 +30,15 @@ import qualified System.Win32 as Win32
# endif
#endif
+-- | Does the controlling terminal support ANSI color sequences?
+-- This memoized to avoid thread-safety issues in ncurses (see #17922).
+stderrSupportsAnsiColors :: Bool
+stderrSupportsAnsiColors = unsafePerformIO stderrSupportsAnsiColors'
+{-# NOINLINE stderrSupportsAnsiColors #-}
+
-- | Check if ANSI escape sequences can be used to control color in stderr.
-stderrSupportsAnsiColors :: IO Bool
-stderrSupportsAnsiColors = do
+stderrSupportsAnsiColors' :: IO Bool
+stderrSupportsAnsiColors' = do
#if defined(MIN_VERSION_terminfo)
stderr_available <- queryTerminal stdError
if stderr_available then
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/88f38b03025386f0f1e8f5861eed67d80495168a
--
View it on GitLab: https://gitlab.haskell.org/ghc/ghc/-/commit/88f38b03025386f0f1e8f5861eed67d80495168a
You're receiving this email because of your account on gitlab.haskell.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-commits/attachments/20200402/f411c295/attachment-0001.html>
More information about the ghc-commits
mailing list