[erlang-questions] Weird behaviuor of ei_x_free

Frans Schneider <>
Wed Mar 25 17:36:44 CET 2015


Works, Thanks.

I made the assumption that since ei_x_buff already is a pointer, I could 
just pass it on.

Thanks

On 03/25/2015 04:19 PM, Sverker Eriksson wrote:
> 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