bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/6] libpager: Fix mixing up success and error


From: Sergey Bugaev
Subject: [PATCH 1/6] libpager: Fix mixing up success and error
Date: Thu, 6 May 2021 15:56:26 +0300

_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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]