/* -----------------------------------------------------------------------------
- * $Id: Weak.c,v 1.14 2000/05/22 13:09:29 simonmar Exp $
+ * $Id: Weak.c,v 1.17 2000/12/04 12:31:22 simonmar Exp $
*
* (c) The GHC Team, 1998-1999
*
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 != &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) {
+ rts_evalIO(w->finalizer,NULL);
+ }
}
}
}
/* count number of finalizers first... */
for (n = 0, w = list; w; w = w->link) {
- if (w->finalizer != &NO_FINALIZER_closure)
+ if (w->finalizer != &stg_NO_FINALIZER_closure)
n++;
}
IF_DEBUG(weak,fprintf(stderr,"weak: batching %d finalizers\n", n));
arr = (StgMutArrPtrs *)allocate(sizeofW(StgMutArrPtrs) + n);
- SET_HDR(arr, &MUT_ARR_PTRS_FROZEN_info, CCS_SYSTEM);
+ SET_HDR(arr, &stg_MUT_ARR_PTRS_FROZEN_info, CCS_SYSTEM);
arr->ptrs = n;
for (n = 0, w = list; w; w = w->link) {
- if (w->finalizer != &NO_FINALIZER_closure) {
+ if (w->finalizer != &stg_NO_FINALIZER_closure) {
arr->payload[n] = w->finalizer;
n++;
}
- w->header.info = &DEAD_WEAK_info;
+ w->header.info = &stg_DEAD_WEAK_info;
}
t = createIOThread(RtsFlags.GcFlags.initialStkSize,