int main (void) { PageManager* pm = new_page_manager("."); printf("I Made my pm\n"); printf("My index path is: %s\n", pm->index_path); RawPage* new_page = new_data_page(pm); printf("new page fd is %d at memory addr %p\n", new_page->fd, new_page->page); // Save some strings PageRef* str_1 = save_string(new_page, "Hello There"); PageRef* str_2 = save_string(new_page, "I am a second string"); printf("Before unload page\n"); unload_page(new_page); printf("After unloda page\n"); // load some strings load_string(pm, str_1); load_string(pm, str_2); //make our tree page RawPage* t_page = new_tree_page(pm); TreeNode* test_node = malloc(sizeof(TreeNode)); memset(test_node, 0, sizeof(TreeNode)); test_node->size = 0; test_node->order = 2; test_node->num_leaves = 0; test_node->parent.page_type = 0xDE110; test_node->parent.page_num = 31337; test_node->parent.node_offset = 31337; PageRef* node1 = save_node(t_page, test_node); unload_page(t_page); load_node(pm, node1); }
int rstore_rollback_dirty( struct RStore *store ) { /* this is crude... */ /* XXX [ ] check to make sure this doesn't leave holes * if pages are dirtied during allocation and then rolled back * -> in fact, there appears to be some leakage * related to the use of `next_page' in RStore * XXX [ ] check to make sure this interacts correctly with * the semi-automatic allocation of indirect pages (e.g., * <symbol> reference pages) */ struct VMPageRecord *page; int n = 0; #if 0 if (1) { unsigned i; struct VMPageRecord *l; printf( "Loaded pages: (%d dirty)\n", store->num_dirty ); for (i=0,l=store->first_loaded; l; i++,l=l->next_loaded) { printf( " %u: {%p} <%08lx[%s%d]> at packages/rstore/writer.cs\n", i, l, (unsigned long)l->ref.base_page_num, (l->ref.first ? "n=" : "#"), (int)l->ref.nth_page, l->mem_address, (l->ref.dirty ? " (+DIRTY)" : "") ); } } #endif for (page=store->first_dirty; page;) { struct VMPageRecord *next_page = page->next_dirty; page->ref.dirty = 0; page->next_dirty = NULL; unload_page( store, page ); n++; page = next_page; } assert( n == store->num_dirty ); store->num_dirty = 0; store->first_dirty = NULL; store->last_dirty = NULL; return n; }