diff --git a/inline-r.cabal b/inline-r.cabal
--- a/inline-r.cabal
+++ b/inline-r.cabal
@@ -1,5 +1,5 @@
 name:                inline-r
-version:             0.10.1
+version:             0.10.2
 license:             BSD3
 license-file:        LICENSE
 copyright:           Copyright (c) 2013-2015 Amgen, Inc.
@@ -100,7 +100,7 @@
       inline-c >=0.5.6.1 && <0.6
   else
     build-depends:
-      inline-c >=0.6 && <0.8
+      inline-c >=0.6 && <0.9
   hs-source-dirs:      src
   includes:            cbits/missing_r.h
   c-sources:           cbits/missing_r.c
diff --git a/src/Data/Vector/SEXP.hs b/src/Data/Vector/SEXP.hs
--- a/src/Data/Vector/SEXP.hs
+++ b/src/Data/Vector/SEXP.hs
@@ -279,6 +279,7 @@
 import qualified Data.ByteString.Unsafe as B
 
 import Control.Applicative hiding (empty)
+import Control.Exception (mask_)
 #if MIN_VERSION_vector(0,11,0)
 import qualified Data.Vector.Fusion.Bundle.Monadic as Bundle
 import           Data.Vector.Fusion.Bundle.Monadic (sSize, sElems)
@@ -330,7 +331,7 @@
 -- | Create a 'ForeignSEXP' from 'SEXP'.
 foreignSEXP :: PrimMonad m => SEXP s ty -> m (ForeignSEXP ty)
 foreignSEXP sx@(SEXP ptr) =
-    unsafePrimToPrim $ do
+    unsafePrimToPrim $ mask_ $ do
       R.preserveObject sx
       ForeignSEXP <$> GHC.newConcForeignPtr (castPtr ptr) (R.releaseObject sx)
 
@@ -1753,6 +1754,6 @@
 phony f = reify (AcquireIO acquireIO) $ \p ->  f p
   where
     acquireIO :: SEXP V ty -> IO (SEXP g ty)
-    acquireIO x = do
+    acquireIO x = mask_ $ do
       R.preserveObject x
       return $ R.unsafeRelease x
diff --git a/src/Language/R/GC.hs b/src/Language/R/GC.hs
--- a/src/Language/R/GC.hs
+++ b/src/Language/R/GC.hs
@@ -24,6 +24,7 @@
 
 import Control.Memory.Region
 import Control.Monad.R.Class
+import Control.Exception
 import Foreign.R (SomeSEXP(..))
 import qualified Foreign.R as R
 import System.Mem.Weak (addFinalizer)
@@ -38,7 +39,7 @@
 -- deallocate the value sooner - it would still be semantically correct to never
 -- deallocate it at all.
 automatic :: MonadR m => R.SEXP s a -> m (R.SEXP G a)
-automatic s = io $ do
+automatic s = io $ mask_ $ do
     R.preserveObject s'
     s' `addFinalizer` (R.releaseObject (R.unsafeRelease s'))
     return s'
@@ -47,7 +48,7 @@
 
 -- | 'automatic' for 'SomeSEXP'.
 automaticSome :: MonadR m => R.SomeSEXP s -> m (R.SomeSEXP G)
-automaticSome (SomeSEXP s) = io  $ do
+automaticSome (SomeSEXP s) = io  $ mask_ $ do
     R.preserveObject s'
     s' `addFinalizer` (R.releaseObject s')
     return $ SomeSEXP s'
