More graceful behaviour in presence of unknown heap objects
authorJoachim Breitner <mail@joachim-breitner.de>
Wed, 5 Sep 2012 08:25:19 +0000 (08:25 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Wed, 5 Sep 2012 08:25:19 +0000 (08:25 +0000)
cbits/HeapView.c
src/GHC/HeapView.hs

index 884ba81..f1bf5bf 100644 (file)
@@ -249,7 +249,7 @@ StgMutArrPtrs *gtc_heap_view_closurePtrs(Capability *cap, StgClosure *closure) {
             break;
 
         default:
-            fprintf(stderr,"closurePtrs: Cannot handle type %s yet\n", gtc_heap_view_closure_type_names[info->type]);
+            //fprintf(stderr,"closurePtrs: Cannot handle type %s yet\n", gtc_heap_view_closure_type_names[info->type]);
             break;
     }
 
index 374194f..2d114e2 100644 (file)
@@ -334,6 +334,9 @@ data Closure =
         info         :: StgInfoTable 
         , hvalues    :: [Box]
         , rawWords   :: [Word]
+    } |
+    UnsupportedClosure {
+        info         :: StgInfoTable 
     }
  deriving (Show)
 
@@ -354,6 +357,7 @@ allPtrs (MVarClosure {..}) = [queueHead,queueTail,value]
 allPtrs (FunClosure {..}) = ptrArgs
 allPtrs (BlockingQueueClosure {..}) = [link, blackHole, owner, queue]
 allPtrs (OtherClosure {..}) = hvalues
+allPtrs (UnsupportedClosure {..}) = []
 
 
 
@@ -533,12 +537,14 @@ getClosureData x = do
             return $ MVarClosure itbl (ptrs !! 0) (ptrs !! 1) (ptrs !! 2)
 
         BLOCKING_QUEUE ->
-          return $ OtherClosure itbl ptrs wds
+            return $ OtherClosure itbl ptrs wds
         --    return $ BlockingQueueClosure itbl
         --        (ptrs !! 0) (ptrs !! 1) (ptrs !! 2) (ptrs !! 3)
 
         --  return $ OtherClosure itbl ptrs wds
-        closure -> error $ "getClosureData: Cannot handle closure type " ++ show closure
+        --
+        _ ->
+            return $ UnsupportedClosure itbl
 
 -- | Like 'getClosureData', but taking a 'Box', so it is easier to work with.
 getBoxedClosureData :: Box -> IO Closure