2005-07-21 Atsushi Enomoto <atsushi@ximian.com>
[mono.git] / mono / metadata / gc.c
index 4b2f6b47f08f07d34bab8dec85809f7725bbf01a..a8d66b7566a4ed8123a8d9521155c3a55aeb377d 100644 (file)
@@ -481,7 +481,8 @@ alloc_handle (HandleData *handles, MonoObject *obj)
        slot = slot * 32 + i;
        handles->entries [slot] = obj;
        if (handles->type <= HANDLE_WEAK_TRACK) {
-               mono_gc_weak_link_add (&(handles->entries [slot]), obj);
+               if (obj)
+                       mono_gc_weak_link_add (&(handles->entries [slot]), obj);
        }
 
        unlock_handles (handles);
@@ -538,7 +539,8 @@ mono_gchandle_set_target (guint32 gchandle, MonoObject *obj)
        if (slot < handles->size && (handles->bitmap [slot / 32] & (1 << (slot % 32)))) {
                if (handles->type <= HANDLE_WEAK_TRACK) {
                        mono_gc_weak_link_remove (&handles->entries [slot]);
-                       mono_gc_weak_link_add (&handles->entries [slot], obj);
+                       if (obj)
+                               mono_gc_weak_link_add (&handles->entries [slot], obj);
                } else {
                        handles->entries [slot] = obj;
                }
@@ -811,7 +813,7 @@ void mono_gc_cleanup (void)
                        finalize_notify ();
                        /* Finishing the finalizer thread, so wait a little bit... */
                        /* MS seems to wait for about 2 seconds */
-                       if (WaitForSingleObjectEx (shutdown_event, 2000000, FALSE) == WAIT_TIMEOUT) {
+                       if (WaitForSingleObjectEx (shutdown_event, 2000, FALSE) == WAIT_TIMEOUT) {
                                mono_thread_stop (gc_thread);
                        }
                }