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.
#include "lib/lists.h"
#include "lib/event.h"
+#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
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);
}