@@ -730,10 +730,9 @@ getTypename :: Connection -> PQ.Oid -> IO ByteString
730getTypename conn@Connection{..} oid =
730getTypename conn@Connection{..} oid =
731 case oid2builtin oid of
731 case oid2builtin oid of
732 Just builtin -> return $! builtin2typname builtin
732 Just builtin -> return $! builtin2typname builtin
733− Nothing -> do
733+ Nothing -> modifyMVar connectionObjects $ \oidmap -> do
734− oidmap <- takeMVar connectionObjects
735 case IntMap.lookup (oid2int oid) oidmap of
734 case IntMap.lookup (oid2int oid) oidmap of
736− Just name -> putMVar connectionObjects oidmap >> return name
735+ Just name -> return (oidmap, name)
737 Nothing -> do
736 Nothing -> do
738 names <- query conn "SELECT typname FROM pg_type WHERE oid=?"
737 names <- query conn "SELECT typname FROM pg_type WHERE oid=?"
739 (Only oid)
738 (Only oid)
@@ -747,7 +746,4 @@ getTypename conn@Connection{..} oid =
747 _ -> fail "typename query returned more than one result"
746 _ -> fail "typename query returned more than one result"
748 -- oid is a primary key, so the query should
747 -- oid is a primary key, so the query should
749 -- never return more than one result
748 -- never return more than one result
750− putMVar connectionObjects (IntMap.insert (oid2int oid) name oidmap)
749+ return (IntMap.insert (oid2int oid) name oidmap, name)
753− putMVar connectionObjects oidmap