Staged changes (1)
modified   guix/build/syscalls.scm
@@ -1139,10 +1139,19 @@ (define %mmap
 (define %mmap-guardian
   (make-guardian))
 
+(define %unmapped-bytevectors
+  (make-weak-key-hash-table))
+
+(define (unmapped-bytevector? bv)
+  "True if the bytevector BV was already munmap'd."
+  (hashq-ref %unmapped-bytevectors bv #f))
+
 (define (pump-mmap-guardian)
   (let ((bv (%mmap-guardian)))
     (when bv
-      (munmap bv)
+      (if (unmapped-bytevector? bv)
+          (hashq-remove! %unmapped-bytevectors bv)
+          (munmap bv))
       (pump-mmap-guardian))))
 
 (add-hook! after-gc-hook pump-mmap-guardian)
@@ -1180,7 +1189,8 @@ (define (munmap bv)
     (unless (zero? ret)
       (throw 'system-error "munmap" "munmap ~S with len ~S: ~A"
              (list ptr len (strerror err))
-             (list err)))))
+             (list err)))
+    (hashq-set! %unmapped-bytevectors bv #t)))
 
 (define MS_ASYNC 1)                     ;sync memory asynchronously
 (define MS_INVALIDATE 2)                ;invalidate the caches

Generated by apteryx using scpaste at Mon Oct 27 23:11:50 2025. JST. (original)