[erlang-bugs] Mnesia/R15B: TYPE ASSERTION FAILED, erl_term.c line 109 (when stopping mnesia)

Winston Smith smith.winston.101@REDACTED
Tue Apr 10 19:24:51 CEST 2012


On Tue, Apr 10, 2012 at 9:38 AM, Sverker Eriksson
<sverker@REDACTED> wrote:
> This is an ETS-bug according to your call trace. ets:select/2 is called and
> the matchspec seems to contain '==' as the BIF seqeq_2 is called.
> db_prog_match() is the stack based VM that executes matchspec's. For some
> reason an invalid term (a "header" with two lowest bits as zero) is read
> from the stack.
>
> I don't have any ARM machine to test on at the moment.

It's actually AVR32 from Atmel, not ARM.

> Some debugging ideas:
>
> 1. Add "#define HARDDEBUG" only to erl_db*.c (the ETS-code).

I have actually enabled HARDDEBUG for everything, and had to create
some patches as it didn't compile (see other messages I sent to
erlang-questions regarding the status of HARDDEBUG).

I wil try injecting the HARDDEBUG into the ets only files.

> 2. Add "#define DMC_DEBUG" in erl_db_util.c.
> 3. Add your own erts_printf's. Use %T to print erlang terms (Eterm's).
> 4. Add a check in db_prog_match to assert that the esp-stack is ok
> before/after each instruction in the big for-loop.
>
> Something like
>
> Eterm* esp_start = esp;
>
> for (;;) {
>
>   ASSERT(esp >= esp_start);
>   for (tp = esp_start; tp < esp; tp++) {
>       ASSERT(!is_header(*tp));
>   }
>
>   switch (*pc++) {


I'll try this!

Thanks for the advice!


W.



More information about the erlang-bugs mailing list