X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FWeak.c;h=bc993ecf3b6b8889d2510d03d9b59368479362af;hb=ce6e38dc12b5feae2eb43e94d833646a9c921cda;hp=117d6a005c9288fb35987e82117f49987307d643;hpb=d3058014b75ef30cc1535dcc6abcf073b3170697;p=ghc-hetmet.git diff --git a/ghc/rts/Weak.c b/ghc/rts/Weak.c index 117d6a0..bc993ec 100644 --- a/ghc/rts/Weak.c +++ b/ghc/rts/Weak.c @@ -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); + } } } }