From 9eec503b251c3388579032b300d32640403d8612 Mon Sep 17 00:00:00 2001 From: Maria Matejka Date: Wed, 13 Apr 2022 11:28:15 +0200 Subject: [PATCH] Fixed a munmap abort bug When BIRD was munmapping too many pages, it sometimes aborted, saying that munmap failed with "Not enough memory" as the address space was getting more and more fragmented. There is a workaround in place, simply keeping that page for future use, yet it has never been compiled in because I somehow forgot to include errno.h. And because I also thought that somebody may have ENOMEM not defined (why?!), there was a check which quietly omitted that workaround. Anyway, ENOMEM is POSIX. It's an utter nonsense to check for its existence. If it doesn't exist, something is broken. --- sysdep/unix/alloc.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sysdep/unix/alloc.c b/sysdep/unix/alloc.c index 0e944d57..90453f7b 100644 --- a/sysdep/unix/alloc.c +++ b/sysdep/unix/alloc.c @@ -11,6 +11,7 @@ #include "lib/lists.h" #include "lib/event.h" +#include #include #include @@ -116,10 +117,8 @@ cleanup_pages(void *data UNUSED) rem_node(ptr); if (munmap(ptr, get_page_size()) == 0) pages_kept--; -#ifdef ENOMEM else if (errno == ENOMEM) add_tail(&pages_list, ptr); -#endif else bug("munmap(%p) failed: %m", ptr); }