[erlang-bugs] Erlang vm beam.smp crash
Sverker Eriksson
sverker.eriksson@REDACTED
Wed Oct 1 15:34:39 CEST 2014
Oops.
Guess no one is using port_set_data with non-immediate terms.... not
even our tests :-[
Here is the one-liner that fixes the problem.
diff --git a/erts/emulator/beam/erl_bif_port.c
b/erts/emulator/beam/erl_bif_port.c
index afb33c1..8a622e5 100644
--- a/erts/emulator/beam/erl_bif_port.c
+++ b/erts/emulator/beam/erl_bif_port.c
@@ -554,6 +554,7 @@ BIF_RETTYPE port_set_data_2(BIF_ALIST_2)
hp = &pdhp->heap[0];
pdhp->off_heap.first = NULL;
pdhp->off_heap.overhead = 0;
+ pdhp->hsize = hsize;
pdhp->data = copy_struct(BIF_ARG_2, hsize, &hp, &pdhp->off_heap);
data = (erts_aint_t) pdhp;
ASSERT((data & 0x3) == 0);
Thanks Tony, for using your bug-sniffing ability for the greater good.
/Sverker, Erlang/OTP
On 09/30/2014 02:39 PM, Tony Rogvall wrote:
> I also found this:
>
> (on unix/mac, on windows use some other program)
>> Port = open_port({spawn, "cat"}, []).
>> erlang:port_set_data(Port, {1,2,3}).
> true
>> erlang:port_get_data(Port).
> ... hmm my cpu skyrockets and the computer dies a bit :-)
> then
>
> beam.smp(41283,0xb06bb000) malloc: *** mach_vm_map(size=1799625657810944) failed (error code=3)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
> beam.smp(41283,0xb06bb000) malloc: *** mach_vm_map(size=1799625657810944) failed (error code=3)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
> beam.smp(41283,0xb06bb000) malloc: *** mach_vm_map(size=1799625656766464) failed (error code=3)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
> beam.smp(41283,0xb06bb000) malloc: *** mach_vm_map(size=1799625656766464) failed (error code=3)
> *** error: can't allocate region
> *** set a breakpoint in malloc_error_break to debug
>
> Crash dump was written to: erl_crash.dump
> eheap_alloc: Cannot allocate 1799625656762408 bytes of memory (of type "heap_frag").
>
> /Tony
>
>
>
More information about the erlang-bugs
mailing list