[project @ 2000-06-20 15:18:40 by simonmar]
authorsimonmar <unknown>
Tue, 20 Jun 2000 15:18:40 +0000 (15:18 +0000)
committersimonmar <unknown>
Tue, 20 Jun 2000 15:18:40 +0000 (15:18 +0000)
Don't try to finalize DEAD_WEAKs.  This fix has been sitting in my
tree for so long, I can't remember whether it was a real bugfix or
just a cleanup, oh well.

ghc/rts/Weak.c

index 117d6a0..bc993ec 100644 (file)
@@ -1,5 +1,5 @@
 /* -----------------------------------------------------------------------------
- * $Id: Weak.c,v 1.14 2000/05/22 13:09:29 simonmar Exp $
+ * $Id: Weak.c,v 1.15 2000/06/20 15:18:40 simonmar Exp $
  *
  * (c) The GHC Team, 1998-1999
  *
@@ -34,10 +34,12 @@ finalizeWeakPointersNow(void)
   
   while ((w = weak_ptr_list)) {
     weak_ptr_list = w->link;
-    IF_DEBUG(weak,fprintf(stderr,"Finalising weak pointer at %p -> %p\n", w, w->key));
-    w->header.info = &DEAD_WEAK_info;
-    if (w->finalizer != &NO_FINALIZER_closure) {
-      rts_evalIO(w->finalizer,NULL);
+    if (w->header.info != &DEAD_WEAK_info) {
+       w->header.info = &DEAD_WEAK_info;
+       IF_DEBUG(weak,fprintf(stderr,"Finalising weak pointer at %p -> %p\n", w, w->key));
+       if (w->finalizer != &NO_FINALIZER_closure) {
+           rts_evalIO(w->finalizer,NULL);
+       }
     }
   }
 }