> Can you please verify with me that the following code matches what you > described here: > > > You do not even have to do this. Just hold a reference to the regions > > returned by pager_write_page; it is up to you to vm_deallocate them. > > error_t > pager_write_page (struct user_pager_info *upi, vm_offset_t page, > vm_address_t buf) > { > assert (upi->memobj_pages[page / vm_page_size] == (vm_address_t) NULL); > upi->memobj_pages[page / vm_page_size] = buf; > return 0; > }
This is fine--assuming that you set upi->memobj_pages[page / vm_page_size] to NULL in pager_read_page. > /* Implement the pager_clear_user_data callback from the pager library. */ > void > pager_clear_user_data (struct user_pager_info *upi) > { > int idx; > > for (idx = 0; idx < upi->memobj_npages; idx++) > if (upi->memobj_pages[idx]) > vm_deallocate (mach_task_self (), upi->memobj_pages[idx], vm_page_size); > free (upi); > } Are you sure that this is what you want to do? pager_clear_user_data means that once there are no more senders (i.e. to the pager), the pager will be destroyed. Typically, you want to hold on to the actual contents, e.g. tmpfs: if I write data into a file and close it, when I come back ten minutes later, I would like it to still be there. _______________________________________________ Bug-hurd mailing list [EMAIL PROTECTED] http://mail.gnu.org/mailman/listinfo/bug-hurd