modified   guix/build/syscalls.scm
@@ -1131,6 +1131,17 @@ (define MAP_FAILED  #xffffffffffffffff) ;mmap failure sentinel
 (define %mmap
   (syscall->procedure '* "mmap" (list '* size_t int int int long)))
 
+(define %mmap-guardian
+  (make-guardian))
+
+(define (pump-mmap-guardian)
+  (let ((ptr (%mmap-guardian)))
+    (when ptr
+      (munmap ptr SIZE?)
+      (pump-mmap-guardian))))
+
+(add-hook! after-gc-hook pump-mmap-guardian)
+
 (define* (mmap fd len #:key
                (addr %null-pointer)
                (prot PROT_READ)
@@ -1143,6 +1154,7 @@ (define* (mmap fd len #:key
 through to the underlying file.  Raise a 'system-error' exception on error.
 The memory should be unmapped with `munmap'."
   (let-values (((ptr err) (%mmap addr len prot flags fd offset)))
+    (%mmap-guardian ptr)
     (when (= MAP_FAILED (pointer-address ptr))
       (throw 'system-error "mmap" "mmap ~S with len ~S: ~A"
              (list fd len (strerror err))

Generated by apteryx using scpaste at Fri Oct 24 23:58:19 2025. JST. (original)