diff -r 36cf47cfea4e tools/libxc/xc_core.c --- a/tools/libxc/xc_core.c Mon Mar 13 15:06:58 2006 +0100 +++ b/tools/libxc/xc_core.c Tue Mar 14 18:00:32 2006 +0900 @@ -12,12 +12,11 @@ static int static int copy_from_domain_page(int xc_handle, uint32_t domid, - unsigned long *page_array, - unsigned long src_pfn, + unsigned long pfn, void *dst_page) { void *vaddr = xc_map_foreign_range( - xc_handle, domid, PAGE_SIZE, PROT_READ, page_array[src_pfn]); + xc_handle, domid, PAGE_SIZE, PROT_READ, pfn); if ( vaddr == NULL ) return -1; memcpy(dst_page, vaddr, PAGE_SIZE); @@ -32,7 +31,7 @@ xc_domain_dumpcore_via_callback(int xc_h dumpcore_rtn_t dump_rtn) { unsigned long nr_pages; - unsigned long *page_array; + unsigned long *page_array = NULL; xc_dominfo_t info; int i, nr_vcpus = 0; char *dump_mem, *dump_mem_start = NULL; @@ -107,7 +106,7 @@ xc_domain_dumpcore_via_callback(int xc_h for ( dump_mem = dump_mem_start, i = 0; i < nr_pages; i++ ) { - copy_from_domain_page(xc_handle, domid, page_array, i, dump_mem); + copy_from_domain_page(xc_handle, domid, page_array[i], dump_mem); dump_mem += PAGE_SIZE; if ( ((i + 1) % DUMP_INCREMENT == 0) || ((i + 1) == nr_pages) ) { @@ -118,10 +117,12 @@ xc_domain_dumpcore_via_callback(int xc_h } } + free(page_array); free(dump_mem_start); return 0; error_out: + free(page_array); free(dump_mem_start); return -1; }