git.iko.soy/typeable/postgresql-simple
on master help sign in
Use modifyMVar for exception safety
commit7c72da40c5f619375ac4bfa42ee5fa2a25089a10 authorLeon P Smith <leon@melding-monads.com> dateThu 29 Dec 2011, 12:43 (15 years ago) parent4451159
1 file changed+3−7
src/Database/PostgreSQL/Simple.hs+3−7
src/Database/PostgreSQL/Simple.hs+3−7
@@ -730,10 +730,9 @@ getTypename :: Connection -> PQ.Oid -> IO ByteString
730730getTypename conn@Connection{..} oid =
731731 case oid2builtin oid of
732732 Just builtin -> return $! builtin2typname builtin
733− Nothing -> do
734− oidmap <- takeMVar connectionObjects
733+ Nothing -> modifyMVar connectionObjects $ \oidmap -> do
735734 case IntMap.lookup (oid2int oid) oidmap of
736− Just name -> putMVar connectionObjects oidmap >> return name
735+ Just name -> return (oidmap, name)
737736 Nothing -> do
738737 names <- query conn "SELECT typname FROM pg_type WHERE oid=?"
739738 (Only oid)
@@ -747,7 +746,4 @@ getTypename conn@Connection{..} oid =
747746 _ -> fail "typename query returned more than one result"
748747 -- oid is a primary key, so the query should
749748 -- never return more than one result
750− putMVar connectionObjects (IntMap.insert (oid2int oid) name oidmap)
751− return name
752− `onException` do
753− putMVar connectionObjects oidmap
749+ return (IntMap.insert (oid2int oid) name oidmap, name)