From 7e042ee6b79a0dba97ef94c32ed809334893ad91 Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Fri, 1 Nov 2019 21:33:13 +0100 Subject: embeddable-dll-service: acquire pointer reference before atomic increment --- embeddable-dll-service/csharp/Ringlogger.cs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/embeddable-dll-service/csharp/Ringlogger.cs b/embeddable-dll-service/csharp/Ringlogger.cs index c265142c..d0957926 100644 --- a/embeddable-dll-service/csharp/Ringlogger.cs +++ b/embeddable-dll-service/csharp/Ringlogger.cs @@ -116,12 +116,19 @@ namespace Tunnel get => _view.ReadUInt32(offsetNextIndex); set => _view.Write(offsetNextIndex, value); } - public unsafe UInt32 InsertNextIndex() => (UInt32)Interlocked.Increment(ref Unsafe.AsRef((_view.SafeMemoryMappedViewHandle.DangerousGetHandle() + offsetNextIndex).ToPointer())); + public unsafe UInt32 InsertNextIndex() + { + byte* pointer = null; + _view.SafeMemoryMappedViewHandle.AcquirePointer(ref pointer); + var ret = (UInt32)Interlocked.Increment(ref Unsafe.AsRef(pointer + offsetNextIndex)); + _view.SafeMemoryMappedViewHandle.ReleasePointer(); + return ret; + } public UInt32 LineCount => maxLines; public Line this[UInt32 i] => new Line(_view, i % maxLines); - public void Clear() => _view.WriteArray(0, new byte[Log.Bytes], 0, Log.Bytes); + public void Clear() => _view.WriteArray(0, new byte[Bytes], 0, Bytes); } private readonly Log _log; -- cgit v1.2.3-59-g8ed1b