packages feed

ngx-export 1.3.0 → 1.4.0

raw patch · 3 files changed

+60/−4 lines, 3 files

Files

Changelog.md view
@@ -1,3 +1,8 @@+### 1.4.0++- Added a number of opaque pointers to Nginx global objects for using them in+  C plugins.+ ### 1.3.0  - Export function *ngxExportInstallSignalHandler* to ignore SIGINT.
NgxExport.hs view
@@ -39,6 +39,10 @@                  ,ngxExportAsyncHandler                  ,ngxExportAsyncHandlerOnReqBody                  ,ngxExportServiceHook+    -- * Opaque pointers to Nginx global objects+                 ,ngxCyclePtr+                 ,ngxUpstreamMainConfPtr+                 ,ngxCachedTimePtr     -- * Re-exported data constructors from /"Foreign.C"/     --   (for marshalling in foreign calls)                  ,Foreign.C.CInt (..)@@ -51,6 +55,8 @@ import           Foreign.Storable import           Foreign.Marshal.Alloc import           Foreign.Marshal.Utils+import           Data.IORef+import           System.IO.Unsafe import           System.IO.Error import           System.Posix.IO import           System.Posix.Types@@ -568,19 +574,25 @@                         then writeFlag8b                         else writeFlag1b >> closeChannel     ) >>= newStablePtr-    where writeBufN n s = void $+    where writeBufN n s =               iterateUntilM (>= n)               (\w -> (w +) <$>                   fdWriteBuf fd (plusPtr s $ fromIntegral w) (n - w)                   `catchIOError`                   (\e -> return $ if isEINTR e                                       then 0-                                      else n+                                      else n + 1                   )-              ) 0+              ) 0 >>= \w -> when (w > n) cleanupOnWriteError           writeFlag1b = B.unsafeUseAsCString asyncIOFlag1b $ writeBufN 1           writeFlag8b = B.unsafeUseAsCString asyncIOFlag8b $ writeBufN 8           closeChannel = closeFd fd `catchIOError` const (return ())+          -- FIXME: cleanupOnWriteError should free contents of p, spd,+          -- and spct. However, leaving this not implemented seems to be safe+          -- because Nginx won't close the event channel or delete the request+          -- object (for request-driven handlers) regardless of the Haskell+          -- handler's duration.+          cleanupOnWriteError = return ()  asyncIOYY :: IOYY -> CString -> CInt ->     CInt -> CInt -> Ptr CUInt -> CUInt -> CUInt ->@@ -769,4 +781,43 @@ ngxExportVersion x (I n) = fromIntegral <$>     foldM (\k (I v) -> pokeElemOff x k v >> return (k + 1)) 0         (take n $ versionBranch version)++-- | Returns an opaque pointer to the Nginx cycle object+-- for using it in C plugins.+ngxCyclePtr :: IO (Ptr ())+ngxCyclePtr = readIORef ngxCyclePtrStore++-- | Returns an opaque pointer to the Nginx upstream main configuration+-- for using it in C plugins.+ngxUpstreamMainConfPtr :: IO (Ptr ())+ngxUpstreamMainConfPtr = readIORef ngxUpstreamMainConfPtrStore++-- | Returns an opaque pointer to the Nginx cached time object+-- for using it in C plugins.+ngxCachedTimePtr :: IO (Ptr ())+ngxCachedTimePtr = readIORef ngxCachedTimePtrStore++foreign export ccall ngxExportSetCyclePtr :: Ptr () -> IO ()+ngxExportSetCyclePtr :: Ptr () -> IO ()+ngxExportSetCyclePtr = writeIORef ngxCyclePtrStore++foreign export ccall ngxExportSetUpstreamMainConfPtr :: Ptr () -> IO ()+ngxExportSetUpstreamMainConfPtr :: Ptr () -> IO ()+ngxExportSetUpstreamMainConfPtr = writeIORef ngxUpstreamMainConfPtrStore++foreign export ccall ngxExportSetCachedTimePtr :: Ptr () -> IO ()+ngxExportSetCachedTimePtr :: Ptr () -> IO ()+ngxExportSetCachedTimePtr = writeIORef ngxCachedTimePtrStore++ngxCyclePtrStore :: IORef (Ptr ())+ngxCyclePtrStore = unsafePerformIO $ newIORef nullPtr+{-# NOINLINE ngxCyclePtrStore #-}++ngxUpstreamMainConfPtrStore :: IORef (Ptr ())+ngxUpstreamMainConfPtrStore = unsafePerformIO $ newIORef nullPtr+{-# NOINLINE ngxUpstreamMainConfPtrStore #-}++ngxCachedTimePtrStore :: IORef (Ptr ())+ngxCachedTimePtrStore = unsafePerformIO $ newIORef nullPtr+{-# NOINLINE ngxCachedTimePtrStore #-} 
ngx-export.cabal view
@@ -1,5 +1,5 @@ name:                       ngx-export-version:                    1.3.0+version:                    1.4.0 synopsis:                   Helper module for Nginx haskell module description:                Helper module for         <http://github.com/lyokha/nginx-haskell-module Nginx haskell module>