Allocator troubles

Andrei Alexandrescu via Digitalmars-d digitalmars-d at puremagic.com
Sat Jul 16 09:19:11 PDT 2016


On 07/16/2016 12:07 PM, Andrei Alexandrescu wrote:
> On 07/16/2016 10:23 AM, Luís Marques wrote:
>> On Friday, 15 July 2016 at 18:44:26 UTC, Luís Marques wrote:
>>> I'm not having success trying to use the allocator API.
>>>
>>> What am doing wrong here? (OS X, 64-bit)
>>>
>>> [...]
>>
>> Given the lack of feedback, I'm going to assume it's a bug.
>> https://issues.dlang.org/show_bug.cgi?id=16285
>
> I reproduced this on Linux and looked around a bit. It's pretty vexing.
> Thanks for submitting it. -- Andrei

Found the problem. Currently allocatorObject allocates the 
CAllocatorImpl object (interface implementation) straight inside the 
given allocator, in an ouroboros fashion. Subsequently, deallocateAll 
deallocates he CAllocatorImpl itself.

CAllocatorImpl!(A, Yes.indirect) allocatorObject(A)(A* pa)
{
     assert(pa);
     import std.conv : emplace;
     auto state = pa.allocate(stateSize!(CAllocatorImpl!(A, Yes.indirect)));
     import std.traits : hasMember;
     static if (hasMember!(A, "deallocate"))
     {
         scope(failure) pa.deallocate(state);
     }
     return emplace!(CAllocatorImpl!(A, Yes.indirect))
         (state, pa);
}



Andrei


More information about the Digitalmars-d mailing list