[project @ 1998-12-02 13:17:09 by simonm]
[ghc-hetmet.git] / ghc / lib / posix / PosixIO.lhs
index d7354f5..ff60aa8 100644 (file)
@@ -31,10 +31,12 @@ module PosixIO (
 
 import GlaExts
 import PrelIOBase
-import PrelHandle (readHandle, writeHandle, newHandle, getBMode__, getHandleFd )
+import PrelHandle (newHandle, getBMode__, getHandleFd, 
+                  freeFileObject, freeStdFileObject )
 import IO
 import Addr
 import Foreign
+import Weak    ( addForeignFinaliser )
 import CString ( freeze, allocChars, packStringIO, unpackNBytesBAIO )
 
 import PosixUtil
@@ -109,11 +111,11 @@ fdToHandle fd@(FD# fd#) = do
           (or as a result of) program termination.
         -}
 #ifndef __PARALLEL_HASKELL__
-        fo <- 
-          (if fd == stdInput || fd == stdOutput || fd == stdError then
-              makeForeignObj fo (``&freeStdFile''::Addr)
-           else
-             makeForeignObj fo (``&freeFileObject''::Addr))
+        fo <- makeForeignObj fo
+        if fd == stdInput || fd == stdOutput || fd == stdError then
+             addForeignFinaliser fo (freeStdFileObject fo)
+         else
+             addForeignFinaliser fo (freeFileObject fo)
 #endif
         (bm, bf_size)  <- getBMode__ fo
          mkBuffer__ fo bf_size