MmapPool: (p[] is null) != (p[].ptr is null)
This commit is contained in:
parent
7bed7f039f
commit
4c4e65b373
@ -156,7 +156,7 @@ final class MmapPool : Allocator
|
||||
*/
|
||||
bool deallocate(void[] p) shared nothrow @nogc
|
||||
{
|
||||
if (p is null)
|
||||
if (p.ptr is null)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -220,15 +220,26 @@ void dispose(T)(shared Allocator allocator, auto ref T p)
|
||||
}
|
||||
|
||||
/// Ditto.
|
||||
void dispose(T)(shared Allocator allocator, auto ref T[] array)
|
||||
void dispose(T)(shared Allocator allocator, auto ref T[] p)
|
||||
{
|
||||
static if (hasElaborateDestructor!(typeof(array[0])))
|
||||
static if (hasElaborateDestructor!(typeof(p[0])))
|
||||
{
|
||||
foreach (ref e; array)
|
||||
{
|
||||
destroy(e);
|
||||
import std.algorithm.iteration;
|
||||
p.each!(e => destroy(e));
|
||||
}
|
||||
}
|
||||
() @trusted { allocator.deallocate(array); }();
|
||||
array = null;
|
||||
() @trusted { allocator.deallocate(p); }();
|
||||
p = null;
|
||||
}
|
||||
|
||||
unittest
|
||||
{
|
||||
struct S
|
||||
{
|
||||
~this()
|
||||
{
|
||||
}
|
||||
}
|
||||
auto p = cast(S[]) defaultAllocator.allocate(S.sizeof);
|
||||
|
||||
defaultAllocator.dispose(p);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user