[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Request to add *-resize! functions for contiguous mutable data struc
Re: Request to add *-resize! functions for contiguous mutable data structures.
Sun, 8 Aug 2021 14:17:47 +0200
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.12.0
On 07.08.2021 23:19, email@example.com wrote:
> On Sat, Aug 07, 2021 at 12:31:09PM +0200, Taylan Kammer wrote:
>> One consideration is how this should behave in the case of
>> bytevectors that were created from an FFI pointer [...]
> Hm. I don't understand. Realloc /may/ return a different pointer
> from the one it receives, for example if there isn't enough
> room "beyond" the currently allocated. It will copy over the
> contents, but if someone is holding a pointer to the old area
> (as I understand you, this will be the case with an FFI pointer),
> this isn't going to end well...
> And then there is the constraint that the (original) pointer
> passed to realloc /must/ be one returned by one of the malloc
> family (how would the allocator know the original size otherwise?)
Bytevectors created from FFI pointers definitely have to be specially
handled so as not to call realloc() on the original pointer. There are
two ways bytevector-resize! could work in this case:
1. If the requested size is less than or equal to the current size,
merely change the size information of the bytevector. Otherwise,
return an entirely new bytevector that doesn't point to the original
location anymore. This is the "safe" variant.
2. Always just change the size information of the bytevector. This is
unsafe because providing a larger size might mean that the bytevector
starts allowing access to unallocated memory. But it's not any less
safe than the original pointer->bytevector operation where you already
provided the size information yourself.
The second behavior would help with this issue: