Store the domain id of weak references.
authorRodrigo Kumpera <kumpera@gmail.com>
Thu, 25 Nov 2010 14:26:45 +0000 (12:26 -0200)
committerRodrigo Kumpera <kumpera@gmail.com>
Thu, 25 Nov 2010 14:28:01 +0000 (12:28 -0200)
* gc.c (alloc_handle): Set domain_ids if it's a weak ref handle.

* gc.c (mono_gchandle_set_target): Ditto.

Fixes #655669

mono/metadata/gc.c

index 2e992f30b706f2633756188459916167aa9a70f0..9dbd4630f505eadd93a46c017e0f74cc2f64a659 100644 (file)
@@ -687,6 +687,8 @@ alloc_handle (HandleData *handles, MonoObject *obj, gboolean track)
        slot = slot * 32 + i;
        handles->entries [slot] = obj;
        if (handles->type <= HANDLE_WEAK_TRACK) {
+               /*FIXME, what to use when obj == null?*/
+               handles->domain_ids [slot] = (obj ? mono_object_get_domain (obj) : mono_domain_get ())->domain_id;
                if (obj)
                        mono_gc_weak_link_add (&(handles->entries [slot]), obj, track);
        }
@@ -814,6 +816,8 @@ mono_gchandle_set_target (guint32 gchandle, MonoObject *obj)
                                mono_gc_weak_link_remove (&handles->entries [slot]);
                        if (obj)
                                mono_gc_weak_link_add (&handles->entries [slot], obj, handles->type == HANDLE_WEAK_TRACK);
+                       /*FIXME, what to use when obj == null?*/
+                       handles->domain_ids [slot] = (obj ? mono_object_get_domain (obj) : mono_domain_get ())->domain_id;
                } else {
                        handles->entries [slot] = obj;
                }