Changeset 152b2b0 in mainline


Ignore:
Timestamp:
2006-06-01T14:11:29Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7c95658c
Parents:
bd571f44
Message:

Implement recursive function for deallocating the whole B+tree.
Make use of this function in address space management.

Location:
generic/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • generic/src/adt/btree.c

    rbd571f44 r152b2b0  
    5151#include <print.h>
    5252
     53static void btree_destroy_subtree(btree_node_t *root);
    5354static void _btree_insert(btree_t *t, btree_key_t key, void *value, btree_node_t *rsubtree, btree_node_t *node);
    5455static void _btree_remove(btree_t *t, btree_key_t key, btree_node_t *node);
     
    102103void btree_destroy(btree_t *t)
    103104{
    104         ASSERT(!t->root->keys);
    105         slab_free(btree_node_slab, t->root);
     105        btree_destroy_subtree(t->root);
    106106}
    107107
     
    127127       
    128128        _btree_insert(t, key, value, NULL, lnode);
     129}
     130
     131/** Destroy subtree rooted in a node.
     132 *
     133 * @param root Root of the subtree.
     134 */
     135void btree_destroy_subtree(btree_node_t *root)
     136{
     137        int i;
     138
     139        if (root->keys) {
     140                for (i = 0; i < root->keys + 1; i++) {
     141                        if (root->subtree[i])
     142                                btree_destroy_subtree(root->subtree[i]);
     143                }
     144        }
     145        slab_free(btree_node_slab, root);
    129146}
    130147
  • generic/src/mm/as.c

    rbd571f44 r152b2b0  
    162162                ASSERT(!list_empty(&as->as_area_btree.leaf_head));
    163163                node = list_get_instance(&as->as_area_btree.leaf_head.next, btree_node_t, leaf_link);
    164                 if ((cond = node->keys)) {
     164                if ((cond = node->keys))
    165165                        as_area_destroy(as, node->key[0]);
    166                         btree_remove(&as->as_area_btree, node->key[0], node);
    167                 }
    168         }
    169        
     166        }
     167       
     168        btree_destroy(&as->as_area_btree);
    170169        page_table_destroy(as->page_table);
    171170
     
    461460                                page_table_unlock(as, false);
    462461                        }
    463                         if (!used_space_remove(area, b, i))
    464                                 panic("Could not remove used space.\n");
    465462                }
    466463        }
     
    14901487                        if ((cond = node->keys)) {
    14911488                                frame_free(ADDR2PFN((__address) node->value[0]));
    1492                                 btree_remove(&sh_info->pagemap, node->key[0], node);
    14931489                        }
    14941490                }
Note: See TracChangeset for help on using the changeset viewer.