Quoting Samuel Thibault (2015-02-24 01:04:19)
> I tried to start a gcc-5 build, it gets stuck at the tar x stage, with
> gnumach printing:
>
> no more room for vm_map_find_entry in 80223e20 (kmem_map_store)
> no more room for kmem_realloc in 80223e20 (kmem_map_store)
>[...]
> ipc_port 0010 80 4k 50 262239 262350 20988k
> 0k
kmem_realloc is only used to enlarge the ipc tables, but this is not
due to the lack of space, but due to the lack of a sufficiently large
continuous chunk of the kernel address space.
As demonstrated by the attached program the maximum number of ports a
task can have seems to be around 250000, which doesn't seem like a
lot.
% ./test
./test: mach_port_allocate (last good name: 242175): (os/kern) resource shortage
This suggests that we need a different data structure that doesn't
depend on a continuous chunk of memory.
Justus
#define _GNU_SOURCE
#include <assert.h>
#include <error.h>
#include <errno.h>
#include <mach.h>
#include <stdio.h>
int
main ()
{
error_t err;
mach_port_t name;
while (1)
{
err = mach_port_allocate (mach_task_self (), MACH_PORT_RIGHT_RECEIVE,
&name);
if (err)
error (1, err, "mach_port_allocate (last good name: %i)", (int) name);
}
return 0;
}