Retainer prof: immutable arrays are not retainers, and fix the docs
authorSimon Marlow <marlowsd@gmail.com>
Tue, 30 Oct 2012 14:40:01 +0000 (14:40 +0000)
committerSimon Marlow <marlowsd@gmail.com>
Wed, 31 Oct 2012 11:21:30 +0000 (11:21 +0000)
docs/users_guide/profiling.xml
rts/RetainerProfile.c

index 25db080..5589fa9 100644 (file)
@@ -884,8 +884,8 @@ MAIN            MAIN                    102           0    0.0    0.0   100.0  1
       by defining what we mean by a retainer:</para>
 
       <blockquote>
-       <para>A retainer is either the system stack, or an unevaluated
-       closure (thunk).</para>
+        <para>A retainer is either the system stack, an unevaluated
+        closure (thunk), or an explicitly mutable object.</para>
       </blockquote>
 
       <para>In particular, constructors are <emphasis>not</emphasis>
index 5f9164b..24745ea 100644 (file)
@@ -1013,8 +1013,6 @@ isRetainer( StgClosure *c )
     case MUT_VAR_DIRTY:
     case MUT_ARR_PTRS_CLEAN:
     case MUT_ARR_PTRS_DIRTY:
-    case MUT_ARR_PTRS_FROZEN:
-    case MUT_ARR_PTRS_FROZEN0:
 
        // thunks are retainers.
     case THUNK:
@@ -1071,6 +1069,9 @@ isRetainer( StgClosure *c )
     case ARR_WORDS:
        // STM
     case TREC_CHUNK:
+        // immutable arrays
+    case MUT_ARR_PTRS_FROZEN:
+    case MUT_ARR_PTRS_FROZEN0:
        return rtsFalse;
 
        //