packages feed

base 4.18.2.1 → 4.18.3.0

raw patch · 4 files changed

+20/−9 lines, 4 filesnew-uploaderPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

GHC/Conc/Sync.hs view
@@ -1,4 +1,3 @@-{-# LANGUAGE CPP #-} {-# LANGUAGE MagicHash #-} {-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE RankNTypes #-}@@ -392,13 +391,14 @@ getNumProcessors = fmap fromIntegral c_getNumberOfProcessors  foreign import ccall unsafe "getNumberOfProcessors"-  c_getNumberOfProcessors :: IO CUInt+  c_getNumberOfProcessors :: IO Word32  -- | Returns the number of sparks currently in the local spark pool numSparks :: IO Int numSparks = IO $ \s -> case numSparks# s of (# s', n #) -> (# s', I# n #) -foreign import ccall "&enabled_capabilities" enabled_capabilities :: Ptr CInt+foreign import ccall "&enabled_capabilities"+  enabled_capabilities :: Ptr Word32  childHandler :: SomeException -> IO () childHandler err = catch (real_handler err) childHandler
GHC/Event/KQueue.hsc view
@@ -44,8 +44,8 @@ import GHC.Real (quotRem, fromIntegral) import GHC.Show (Show(show)) import GHC.Event.Internal (Timeout(..))-import System.Posix.Internals (c_close)-import System.Posix.Types (Fd(..))+import System.Posix.Internals (c_close, c_getpid)+import System.Posix.Types (Fd(..), CPid) import qualified GHC.Event.Array as A  #if defined(netbsd_HOST_OS)@@ -73,19 +73,26 @@ data KQueue = KQueue {       kqueueFd     :: {-# UNPACK #-} !KQueueFd     , kqueueEvents :: {-# UNPACK #-} !(A.Array Event)+    , kqueuePid    :: {-# UNPACK #-} !CPid -- ^ pid, used to detect forks     }  new :: IO E.Backend new = do   kqfd <- kqueue   events <- A.new 64-  let !be = E.backend poll modifyFd modifyFdOnce delete (KQueue kqfd events)+  pid <- c_getpid+  let !be = E.backend poll modifyFd modifyFdOnce delete (KQueue kqfd events pid)   return be  delete :: KQueue -> IO () delete kq = do-  _ <- c_close . fromKQueueFd . kqueueFd $ kq-  return ()+  -- detect forks: the queue isn't inherited by a child process created with+  -- fork. Hence we mustn't try to close the old fd or we might close a random+  -- one (e.g. the one used by timerfd, cf #24672).+  pid <- c_getpid+  when (pid == kqueuePid kq) $ do+    _ <- c_close . fromKQueueFd . kqueueFd $ kq+    return ()  modifyFd :: KQueue -> Fd -> E.Event -> E.Event -> IO Bool modifyFd kq fd oevt nevt = do
base.cabal view
@@ -1,6 +1,6 @@ cabal-version:  3.0 name:           base-version:        4.18.2.1+version:        4.18.3.0 -- NOTE: Don't forget to update ./changelog.md  license:        BSD-3-Clause
changelog.md view
@@ -1,5 +1,9 @@ # Changelog for [`base` package](http://hackage.haskell.org/package/base) +## 4.18.3.0 *January 2025*+  * Shipped with GHC 9.6.7.+  * Fix interaction between `fork` and the `kqueue`-based IO manager ([#24672](https://gitlab.haskell.org/ghc/ghc/-/issues/24672)).+ ## 4.18.2.1 *April 2024*   * Various documentation improvements