@@ -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)