From: Maria Matejka Date: Wed, 13 Apr 2022 09:28:15 +0000 (+0200) Subject: Fixed a munmap abort bug X-Git-Tag: v2.0.10~13 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9eec503b251c3388579032b300d32640403d8612;p=thirdparty%2Fbird.git 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. --- diff --git a/sysdep/unix/alloc.c b/sysdep/unix/alloc.c index 0e944d57f..90453f7b3 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); }