If C2 fails while in product mode, we eventually get an OutOfMemory
error while trying to exit the runtime. Unfortunately, we first try
to allocate more memory, causing lots of recursion.
Running with merlin_beta as of 1/23/01:
When run with -server -Xcomp -Xbatch, there's a matcher error, and
we nicely dump core. However, in product mode, we loop and thrash
and eventually die (I let it run for an hour and it hadn't finished
yet). While we need to fix the underlying C2 problem, we also need
to be able to exit cleanly if an error exists.
I attached dbx to the process, and here's what I found:
vm_exit_out_of_memory calls get_thread_name() which does this:
const char* str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length());
as_utf8 creates a NEW_RESOURCE_ARRAY... and off we go.
The dbx stack is appended. Check out how deeply we've recursed.
<repeats forever>
[20199] UNICODE::as_utf8(0xf3a312bc, 0xe, 0xf2000, 0xfe49e000, 0xd4fa8,
0xf20002cc), at 0xfe140150
[20200] vm_exit_out_of_memory(0xd4fa8, 0xfe50a4cc, 0xfe49e000, 0x7ff4, 0x0,
0x0), at 0xfe32eca0
[20201] Chunk::operator new(0x28888, 0x288a0, 0x288b8, 0xfe49e000, 0x0,
0x7ff4), at 0xfe0b8564
[20202] Arena::grow(0x7fec, 0xfe49e000, 0xa9d3c1f0, 0x10, 0xd3410, 0x1), at
0xfe0b8704
[20203] UNICODE::as_utf8(0xf3a312bc, 0xe, 0xf2000, 0xfe49e000, 0xd4fa8,
0xf2000464), at 0xfe140150
[20204] vm_exit_out_of_memory(0xd4fa8, 0xfe50a4cc, 0xfe49e000, 0x7ff4,
0xf07fc170, 0x2), at 0xfe32eca0
[20205] Chunk::operator new(0x28888, 0x288a0, 0x288b8, 0xfe49e000, 0x0,
0x7ff4), at 0xfe0b8564
[20206] Arena::grow(0x7fec, 0xfe49e000, 0xf07f4200, 0x10, 0xf2001434,
0xf200059c), at 0xfe0b8704
[20207] Node::out_grow(0x0, 0x0, 0xf07fc1c4, 0xb78670, 0xf07fc188,
0xf07fc1b4), at 0xfe0bc52c
[20208] PhaseIdealLoop::split_up(0x6ee1c9, 0xf07fc1c4, 0x6ed54c, 0x6ed894,
0x0, 0xf07fc188), at 0xfe12a874
error while trying to exit the runtime. Unfortunately, we first try
to allocate more memory, causing lots of recursion.
Running with merlin_beta as of 1/23/01:
When run with -server -Xcomp -Xbatch, there's a matcher error, and
we nicely dump core. However, in product mode, we loop and thrash
and eventually die (I let it run for an hour and it hadn't finished
yet). While we need to fix the underlying C2 problem, we also need
to be able to exit cleanly if an error exists.
I attached dbx to the process, and here's what I found:
vm_exit_out_of_memory calls get_thread_name() which does this:
const char* str = UNICODE::as_utf8((jchar*) name->base(T_CHAR), name->length());
as_utf8 creates a NEW_RESOURCE_ARRAY... and off we go.
The dbx stack is appended. Check out how deeply we've recursed.
<repeats forever>
[20199] UNICODE::as_utf8(0xf3a312bc, 0xe, 0xf2000, 0xfe49e000, 0xd4fa8,
0xf20002cc), at 0xfe140150
[20200] vm_exit_out_of_memory(0xd4fa8, 0xfe50a4cc, 0xfe49e000, 0x7ff4, 0x0,
0x0), at 0xfe32eca0
[20201] Chunk::operator new(0x28888, 0x288a0, 0x288b8, 0xfe49e000, 0x0,
0x7ff4), at 0xfe0b8564
[20202] Arena::grow(0x7fec, 0xfe49e000, 0xa9d3c1f0, 0x10, 0xd3410, 0x1), at
0xfe0b8704
[20203] UNICODE::as_utf8(0xf3a312bc, 0xe, 0xf2000, 0xfe49e000, 0xd4fa8,
0xf2000464), at 0xfe140150
[20204] vm_exit_out_of_memory(0xd4fa8, 0xfe50a4cc, 0xfe49e000, 0x7ff4,
0xf07fc170, 0x2), at 0xfe32eca0
[20205] Chunk::operator new(0x28888, 0x288a0, 0x288b8, 0xfe49e000, 0x0,
0x7ff4), at 0xfe0b8564
[20206] Arena::grow(0x7fec, 0xfe49e000, 0xf07f4200, 0x10, 0xf2001434,
0xf200059c), at 0xfe0b8704
[20207] Node::out_grow(0x0, 0x0, 0xf07fc1c4, 0xb78670, 0xf07fc188,
0xf07fc1b4), at 0xfe0bc52c
[20208] PhaseIdealLoop::split_up(0x6ee1c9, 0xf07fc1c4, 0x6ed54c, 0x6ed894,
0x0, 0xf07fc188), at 0xfe12a874