Status fields:
creation_ts: | 2006-05-21 03:14 |
---|---|
component: | threads |
version: | 0.95 |
rep_platform: | All |
op_sys: | Linux |
bug_status: | RESOLVED |
resolution: | FIXED |
reporter: | greenrd@greenrd.org |
I (foolishly ;) ) enabled strict overcommit handling in my kernel. This means that attempts to allocate more memory than is physically available in swap+(x% of RAM, where x defaults to 50) will fail. Shortly after, eclipse crashed when trying to create a new thread, when I tried to save my work: LOG: [0xc71540] pthread_create failed cacao: threads.c:842: threads_start_thread: Assertion `0' failed. Clearly then, the pthread_create call could not allocate enough memory for the new thread. I suggest that cacao, if it gets EAGAIN from pthread_create, should do System.gc(), compact memory if necessary, free some virtual memory back to the kernel, and then try again. If it fails a second time... well then the VM is truly in trouble, because what happens in this case is undocumented. But it should at least try to garbage collect and free, in my opinion.
Hmm, I actually never replied. Sorry. But, pthread_create uses memory from the system heap, not the Java heap. That means, if we are out of system memory, can are really in trouble and can't do anything. A Java heap collection does not change anything. But we now use vm_abort to abort the VM, which prints an error message. Maybe that helps.