_pager_pagemap_resize () returns an error or 0 on success, not a boolean. --- libpager/offer-page.c | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-)
diff --git a/libpager/offer-page.c b/libpager/offer-page.c index 9f090bcb..ddea236a 100644 --- a/libpager/offer-page.c +++ b/libpager/offer-page.c @@ -31,21 +31,22 @@ pager_offer_page (struct pager *p, pthread_mutex_lock (&p->interlock); if (_pager_pagemap_resize (p, offset + vm_page_size)) + goto release_out; + + short *pm_entry = &p->pagemap[offset / vm_page_size]; + + while (*pm_entry & PM_INCORE) { - short *pm_entry = &p->pagemap[offset / vm_page_size]; - - while (*pm_entry & PM_INCORE) - { - pthread_mutex_unlock (&p->interlock); - pager_flush_some (p, offset, vm_page_size, 1); - pthread_mutex_lock (&p->interlock); - } - *pm_entry |= PM_INCORE; - - memory_object_data_supply (p->memobjcntl, offset, buf, vm_page_size, 0, - writelock ? VM_PROT_WRITE : VM_PROT_NONE, - precious, MACH_PORT_NULL); + pthread_mutex_unlock (&p->interlock); + pager_flush_some (p, offset, vm_page_size, 1); + pthread_mutex_lock (&p->interlock); } + *pm_entry |= PM_INCORE; + + memory_object_data_supply (p->memobjcntl, offset, buf, vm_page_size, 0, + writelock ? VM_PROT_WRITE : VM_PROT_NONE, + precious, MACH_PORT_NULL); + release_out: pthread_mutex_unlock (&p->interlock); } -- 2.31.1