[sgen] Make `mono_gc_scan_for_specific_ref()` also scan thread stacks.
authorMark Probst <mark.probst@gmail.com>
Tue, 28 Apr 2015 00:48:35 +0000 (17:48 -0700)
committerMark Probst <mark.probst@gmail.com>
Wed, 29 Apr 2015 21:54:08 +0000 (14:54 -0700)
mono/metadata/sgen-debug.c

index 8aa24a301ee199ffb3648e4c80c5708a4d53f167..2240a1fb92c6949b227c874b95987f6e40670030 100644 (file)
@@ -510,7 +510,7 @@ find_pinning_ref_from_thread (char *obj, size_t size)
 
        FOREACH_THREAD (info) {
                char **start = (char**)info->client_info.stack_start;
-               if (info->client_info.skip)
+               if (info->client_info.skip || info->client_info.gc_disabled)
                        continue;
                while (start < (char**)info->client_info.stack_end) {
                        if (*start >= obj && *start < endobj)
@@ -857,6 +857,9 @@ mono_gc_scan_for_specific_ref (GCObject *key, gboolean precise)
                        ++ptr;
                }
        } SGEN_HASH_TABLE_FOREACH_END;
+
+       if (sgen_is_world_stopped ())
+               find_pinning_ref_from_thread ((char*)key, sizeof (MonoObject));
 }
 
 #ifndef SGEN_WITHOUT_MONO