Don't allocate watcher queue on the heap

This commit is contained in:
Eugen Wissner 2016-12-25 00:54:05 +01:00
parent c966b42ac3
commit 0156c5a883
3 changed files with 9 additions and 10 deletions

View File

@ -133,6 +133,7 @@ abstract class Loop
/// Pending watchers.
protected Queue!Watcher* pendings;
/// Ditto.
protected Queue!Watcher* swapPendings;
/**
@ -150,8 +151,8 @@ abstract class Loop
*/
this() @nogc
{
pendings = MmapPool.instance.make!(Queue!Watcher);
swapPendings = MmapPool.instance.make!(Queue!Watcher);
pendings = MmapPool.instance.make!(Queue!Watcher)(MmapPool.instance);
swapPendings = MmapPool.instance.make!(Queue!Watcher)(MmapPool.instance);
}
/**

View File

@ -53,7 +53,7 @@ class ConnectionWatcher : Watcher
/// Protocol factory.
protected Protocol delegate() @nogc protocolFactory;
package Queue!IOWatcher* incoming;
package Queue!IOWatcher incoming;
/**
* Params:
@ -62,7 +62,6 @@ class ConnectionWatcher : Watcher
this(Socket socket) @nogc
{
socket_ = socket;
incoming = MmapPool.instance.make!(Queue!IOWatcher);
}
/// Ditto.
@ -72,14 +71,13 @@ class ConnectionWatcher : Watcher
~this() @nogc
{
foreach (w; *incoming)
foreach (w; incoming)
{
MmapPool.instance.dispose(w);
}
MmapPool.instance.dispose(incoming);
}
/*
/**
* Params:
* P = Protocol should be used.
*/
@ -114,7 +112,7 @@ class ConnectionWatcher : Watcher
*/
override void invoke() @nogc
{
foreach (io; *incoming)
foreach (io; incoming)
{
io.protocol.connected(cast(DuplexTransport) io.transport);
}
@ -164,7 +162,7 @@ class IOWatcher : ConnectionWatcher
/**
* Destroys the watcher.
*/
protected ~this() @nogc
~this() @nogc
{
MmapPool.instance.dispose(protocol_);
}

View File

@ -90,7 +90,7 @@ struct ReadBuffer(T = ubyte)
in size_t minAvailable = 1024,
shared Allocator allocator = defaultAllocator) @trusted
{
this(allocator_);
this(allocator);
this.minAvailable = minAvailable;
this.blockSize = size;
buffer_ = cast(T[]) allocator_.allocate(size * T.sizeof);