private void OnSlabAllocated(RioMemoryPoolSlab slab) { lock (_bufferIdMappings) { var memoryPtr = slab.NativePointer; var bufferId = _rio.RioRegisterBuffer(memoryPtr, (uint)slab.Length); var addressLong = memoryPtr.ToInt64(); _bufferIdMappings.Add(new BufferMapping { Id = bufferId, Start = addressLong, End = addressLong + slab.Length }); } }
private void OnSlabDeallocated(RioMemoryPoolSlab slab) { var memoryPtr = slab.NativePointer; var addressLong = memoryPtr.ToInt64(); lock (_bufferIdMappings) { for (int i = _bufferIdMappings.Count - 1; i >= 0; i--) { if (addressLong == _bufferIdMappings[i].Start) { _bufferIdMappings.RemoveAt(i); break; } } } }