示例#1
0
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);

}
示例#2
0
文件: writer.c 项目: Fuhuiang/rscheme
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;
}