[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: user data not allocated by lua
- From: Sean Conner <sean@...>
- Date: Tue, 22 Jul 2014 01:52:13 -0400
It was thus said that the Great Nicolas CARRIER once stated:
> Ok, your solution is interesting, but my issue doesn't correspond well.
>
> The problem is, because of how the API is written, the whole array
> address array must be freed at once, so I can't store only an address in
> the tiny user data, but also a pointer, or something to retrieve the
> address of the original array. What's more, I can't free the array when
> the garbage collector decides to free one address, because the others
> could be still in use, so I have to implement a mechanism for freeing it
> at the right time (e.g. reference counting).
>
> So I think I'll make a copy of each address in a lua allocated user data
> and let lua take care of all.
>
> For information, the address structure is basically a union of the
> standard address types: socaddr_in, _in6 and _un, so an address is
> approximately a hundred of bytes.
I use the same approach [1][2] and don't find it to be that much of a
problem. It's not called often enough to be a performance issue and it
makes working with the results much easier in the long run.
-spc
[1] The first instance is to enumerate all the network interfaces under
Linux:
https://github.com/spc476/lua-conmanorg/blob/56f11f8c0b5bc35e2cfbf5c003d447a362325b2c/src/net.c#L358
[2] The second instance is returning the addresses assigned to a host:
https://github.com/spc476/lua-conmanorg/blob/56f11f8c0b5bc35e2cfbf5c003d447a362325b2c/src/net.c#L581