Index: trunk/src/data.c =================================================================== --- trunk/src/data.c (revision 37951) +++ trunk/src/data.c (revision 37952) @@ -187,12 +187,21 @@ pcb_layer_free_fields(layer, 0); if (!is_subc) { - if (data->subc_tree) - rnd_r_destroy_tree(&data->subc_tree); - if (data->padstack_tree) - rnd_r_destroy_tree(&data->padstack_tree); - if (data->rat_tree) - rnd_r_destroy_tree(&data->rat_tree); + if (data->subc_tree) { + rnd_rtree_uninit(data->subc_tree); + free(data->subc_tree); + data->subc_tree = NULL; + } + if (data->padstack_tree) { + rnd_rtree_uninit(data->padstack_tree); + free(data->padstack_tree); + data->padstack_tree = NULL; + } + if (data->rat_tree) { + rnd_rtree_uninit(data->rat_tree); + free(data->rat_tree); + data->rat_tree = NULL; + } } for (layer = data->Layer, i = 0; i < PCB_MAX_LAYER; layer++, i++) Index: trunk/src/layer.c =================================================================== --- trunk/src/layer.c (revision 37951) +++ trunk/src/layer.c (revision 37952) @@ -152,16 +152,31 @@ } list_map0(&layer->Polygon, pcb_poly_t, undoable ? UFC(obj_free_undoable) : UFC(pcb_poly_free)); if (!layer->is_bound) { - if (layer->line_tree) - rnd_r_destroy_tree(&layer->line_tree); - if (layer->arc_tree) - rnd_r_destroy_tree(&layer->arc_tree); - if (layer->text_tree) - rnd_r_destroy_tree(&layer->text_tree); - if (layer->polygon_tree) - rnd_r_destroy_tree(&layer->polygon_tree); - if (layer->gfx_tree) - rnd_r_destroy_tree(&layer->gfx_tree); + if (layer->line_tree) { + rnd_rtree_uninit(layer->line_tree); + free(layer->line_tree); + layer->line_tree = NULL; + } + if (layer->arc_tree) { + rnd_rtree_uninit(layer->arc_tree); + free(layer->arc_tree); + layer->arc_tree = NULL; + } + if (layer->text_tree) { + rnd_rtree_uninit(layer->text_tree); + free(layer->text_tree); + layer->text_tree = NULL; + } + if (layer->polygon_tree) { + rnd_rtree_uninit(layer->polygon_tree); + free(layer->polygon_tree); + layer->polygon_tree = NULL; + } + if (layer->gfx_tree){ + rnd_rtree_uninit(layer->gfx_tree); + free(layer->gfx_tree); + layer->gfx_tree = NULL; + } } free((char *)layer->name); memset(layer, 0, sizeof(pcb_layer_t));