diff options
Diffstat (limited to 'hsm-gpio/Hsm/GPIO.hs')
-rw-r--r-- | hsm-gpio/Hsm/GPIO.hs | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/hsm-gpio/Hsm/GPIO.hs b/hsm-gpio/Hsm/GPIO.hs index 7cc2c36..0e4e2e5 100644 --- a/hsm-gpio/Hsm/GPIO.hs +++ b/hsm-gpio/Hsm/GPIO.hs @@ -21,6 +21,7 @@ import Effectful.Dispatch.Static , getStaticRep , unsafeEff_ ) +import Effectful.Exception (bracket) import Effectful.Resource (Resource, allocateEff, releaseEff) import Foreign.C.String (withCString) import Foreign.C.Types (CSize (CSize), CUInt) @@ -92,12 +93,12 @@ runGPIO consumer action = do (lineSettingsKey, lineSettings) <- lineSettingsBracket (lineConfigKey, lineConfig) <- lineConfigBracket lineSettings (requestConfigKey, requestConfig) <- requestConfigBracket - (_, lineRequest) <- lineRequestBracket chip requestConfig lineConfig - releaseEff requestConfigKey - releaseEff lineConfigKey - releaseEff lineSettingsKey - releaseEff chipKey - evalStaticRep (GPIO lineRequest) action + lineRequestBracket chip requestConfig lineConfig $ \lineRequest -> do + releaseEff requestConfigKey + releaseEff lineConfigKey + releaseEff lineSettingsKey + releaseEff chipKey + evalStaticRep (GPIO lineRequest) action where chipBracket = allocateEff chipAlloc chipDealloc where @@ -148,7 +149,7 @@ runGPIO consumer action = do requestConfigDealloc requestConfig = do logMsg Info "Freeing request config" liftIO $ requestConfigFree requestConfig - lineRequestBracket chip requestConfig lineConfig = allocateEff lineRequestAlloc lineRequestDealloc + lineRequestBracket chip requestConfig lineConfig = bracket lineRequestAlloc lineRequestDealloc where lineRequestAlloc = do logMsg Info "Allocating line request" |