2007-12-17 Paolo Bonzini * libgst/oop.c (check_weak-refs): Make dead weak objects non-weak, fix thinko. (sweep_oop): Don't make dead weak objects non-weak. --- orig/libgst/oop.c +++ mod/libgst/oop.c @@ -1643,9 +1643,6 @@ _gst_tenure_all_survivors () void check_weak_refs () { - OOP oop = NULL, *field; - mst_Boolean mourn; - rb_node_t *node; rb_traverse_t t; @@ -1653,11 +1650,20 @@ check_weak_refs () node; node = rb_next (&t)) { weak_area_tree *area = (weak_area_tree *) node; + if (!IS_OOP_VALID_GC (area->oop)) + _gst_make_oop_non_weak (area->oop); + } + + for (node = rb_first(&(_gst_mem.weak_areas->rb), &t); + node; node = rb_next (&t)) + { + weak_area_tree *area = (weak_area_tree *) node; + mst_Boolean mourn = false; + OOP *field; - mourn = false; for (field = area->base; field < area->end; field++) { - oop = *field; + OOP oop = *field; if (IS_INT (oop)) continue; @@ -1669,7 +1675,7 @@ check_weak_refs () } if (mourn) - _gst_add_buf_pointer (oop); + _gst_add_buf_pointer (area->oop); } }