From a8403d48fa7a418c322f4503f5ba441f4f85f99b Mon Sep 17 00:00:00 2001 From: krangelov Date: Thu, 12 Aug 2021 14:16:19 +0200 Subject: [PATCH] the unmarshaller should not be disposed twice in case of error --- src/runtime/haskell/PGF2.hsc | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/runtime/haskell/PGF2.hsc b/src/runtime/haskell/PGF2.hsc index 3d3eff72b..8fd42f2fb 100644 --- a/src/runtime/haskell/PGF2.hsc +++ b/src/runtime/haskell/PGF2.hsc @@ -70,11 +70,9 @@ readPGF fpath = then do fptr <- newForeignPtr pgf_free_fptr c_pgf return (PGF fptr Map.empty) else if ex_type == (#const PGF_EXN_SYSTEM_ERROR) - then do freeUnmarshaller u - errno <- (#peek PgfExn, code) c_exn + then do errno <- (#peek PgfExn, code) c_exn ioError (errnoToIOError "readPGF" (Errno errno) Nothing (Just fpath)) - else do freeUnmarshaller u - c_msg <- (#peek PgfExn, msg) c_exn + else do c_msg <- (#peek PgfExn, msg) c_exn msg <- peekCString c_msg free c_msg throwIO (PGFError msg) @@ -96,11 +94,9 @@ bootNGF pgf_path ngf_path = then do fptr <- newForeignPtr pgf_free_fptr c_pgf return (PGF fptr Map.empty) else if ex_type == (#const PGF_EXN_SYSTEM_ERROR) - then do freeUnmarshaller u - errno <- (#peek PgfExn, code) c_exn + then do errno <- (#peek PgfExn, code) c_exn ioError (errnoToIOError "bootNGF" (Errno errno) Nothing (Just pgf_path)) - else do freeUnmarshaller u - c_msg <- (#peek PgfExn, msg) c_exn + else do c_msg <- (#peek PgfExn, msg) c_exn msg <- peekCString c_msg free c_msg throwIO (PGFError msg) @@ -121,11 +117,9 @@ readNGF fpath = then do fptr <- newForeignPtr pgf_free_fptr c_pgf return (PGF fptr Map.empty) else if ex_type == (#const PGF_EXN_SYSTEM_ERROR) - then do freeUnmarshaller u - errno <- (#peek PgfExn, code) c_exn + then do errno <- (#peek PgfExn, code) c_exn ioError (errnoToIOError "readPGF" (Errno errno) Nothing (Just fpath)) - else do freeUnmarshaller u - c_msg <- (#peek PgfExn, msg) c_exn + else do c_msg <- (#peek PgfExn, msg) c_exn msg <- peekCString c_msg free c_msg throwIO (PGFError msg)