Skip to content

Commit

Permalink
Add finalizers to Memory Accessors
Browse files Browse the repository at this point in the history
  • Loading branch information
sanych-sun committed Jun 18, 2024
1 parent b105625 commit 1060b62
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 4 deletions.
8 changes: 8 additions & 0 deletions src/RabbitMQ.Next/Buffers/PooledMemoryAccessor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,15 @@ public PooledMemoryAccessor(ObjectPool<byte[]> memoryPool, byte[] memory, int of
this.Size = size;
}

~PooledMemoryAccessor() => this.ReleaseMemory();

public void Dispose()
{
GC.SuppressFinalize(this);
this.ReleaseMemory();
}

private void ReleaseMemory()
{
if (this.memory == null)
{
Expand Down
15 changes: 15 additions & 0 deletions src/RabbitMQ.Next/Buffers/SharedMemory.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,15 @@ public SharedMemory(ObjectPool<byte[]> memoryPool, byte[] memory, int size)
this.Size = size;
}

~SharedMemory() => this.ReleaseMemory();

public void Dispose()
{
GC.SuppressFinalize(this);
this.ReleaseMemory();
}

private void ReleaseMemory()
{
var refsCount = Interlocked.Decrement(ref this.referencesCount);
if (refsCount != 0)
Expand Down Expand Up @@ -114,8 +122,15 @@ public SharedMemoryAccessor(SharedMemory owner, int offset, int size)
Interlocked.Increment(ref this.owner.referencesCount);
}

~SharedMemoryAccessor() => this.ReleaseMemory();

public void Dispose()
{
GC.SuppressFinalize(this);
this.ReleaseMemory();
}

private void ReleaseMemory()
{
if (this.owner == null)
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,10 +111,10 @@ TestCaseParameters GenerateTestCase(int payloadLen, int count, string name)
return new TestCaseParameters(name, messages);
}

yield return GenerateTestCase(1024, 10_000, "1024 (1 kB)");
yield return GenerateTestCase(10240, 10_000, "10240 (10 kB)");
yield return GenerateTestCase(102400, 10_000, "102400 (100 kB)");
//yield return GenerateTestCase(204800, 10_000, "204800 (200 kB)");
yield return GenerateTestCase(1024, 1_000, "1024 (1 kB)");
yield return GenerateTestCase(10240, 1_000, "10240 (10 kB)");
yield return GenerateTestCase(102400, 1_000, "102400 (100 kB)");
yield return GenerateTestCase(204800, 1_000, "204800 (200 kB)");
}

public class TestCaseParameters
Expand Down

0 comments on commit 1060b62

Please sign in to comment.