[erlang-questions] Weird behaviuor of ei_x_free

Sverker Eriksson <>
Wed Mar 25 16:19:56 CET 2015


On 03/24/2015 10:09 AM, Frans Schneider wrote:
> Hi list,
>
> While writing a simple port program in C, I ran in a problem with 
> deallocating ei_x_buff results. After a few calls to the port, 
> ei_x_new_with_version would crash with a malloc error.
> It turned out that when I replace the call
>
> ei_x_free(&result);
>
> with
>
> r = ei_x_free(&result);
>
> the problem is solved.
> This is what the code looks like:
>
> static void process_helo(const byte *_buf, int _index_start) {
>   ei_x_buff result;
>
>   ei_x_new_with_version(&result);
>   ei_x_encode_atom(&result, "ok");
>   write_port_msg(result);
>   ei_x_free(&result);
> }
>
> Could somebody explain what is going on here?
>
I can try.

Change your 'write_port_msg' function to take a *pointer" to ei_x_buff
and change the call to pass a pointer to 'result': write_port_msg(&result).

Your code passes 'result' by value and thereby gives write_port_msg a 
shallow copy
of 'result'.

/Sverker, Erlang/OTP




More information about the erlang-questions mailing list