X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Frts%2FWeak.c;h=f216f62561d8b4505485ce69b3f1df36c02b5ccb;hb=af13609607da81e7837a7c7c598de82452363ab5;hp=a0ae5cbe3c6962df435481c7f97b226ce94eeacd;hpb=be6592933f4cdf78a495233376e44c9458b17b78;p=ghc-hetmet.git diff --git a/ghc/rts/Weak.c b/ghc/rts/Weak.c index a0ae5cb..f216f62 100644 --- a/ghc/rts/Weak.c +++ b/ghc/rts/Weak.c @@ -1,5 +1,5 @@ /* ----------------------------------------------------------------------------- - * $Id: Weak.c,v 1.26 2002/12/11 15:36:54 simonmar Exp $ + * $Id: Weak.c,v 1.27 2003/01/25 15:54:50 wolfgang Exp $ * * (c) The GHC Team, 1998-1999 * @@ -34,16 +34,28 @@ finalizeWeakPointersNow(void) { StgWeak *w; +#if defined(RTS_SUPPORTS_THREADS) + rts_lock(); +#endif while ((w = weak_ptr_list)) { weak_ptr_list = w->link; if (w->header.info != &stg_DEAD_WEAK_info) { w->header.info = &stg_DEAD_WEAK_info; IF_DEBUG(weak,fprintf(stderr,"Finalising weak pointer at %p -> %p\n", w, w->key)); if (w->finalizer != &stg_NO_FINALIZER_closure) { +#if defined(RTS_SUPPORTS_THREADS) + rts_evalIO(w->finalizer,NULL); + rts_unlock(); + rts_lock(); +#else rts_mainEvalIO(w->finalizer,NULL); +#endif } } } +#if defined(RTS_SUPPORTS_THREADS) + rts_unlock(); +#endif } /*