private unsafe void AsyncReadPagesCallback(uint errorCode, uint numBytes, object context) { if (errorCode != 0) { Trace.TraceError("AsyncReadPagesCallback error: {0}", errorCode); } var result = (PageAsyncReadResult <Empty>)context; if (result.freeBuffer1 != null) { hlog.PopulatePage(result.freeBuffer1.GetValidPointer(), result.freeBuffer1.required_bytes, ref frame.GetPage(result.page % frame.frameSize)); result.freeBuffer1.Return(); } if (result.handle != null) { result.handle.Signal(); } Interlocked.MemoryBarrier(); }
private unsafe void AsyncReadPagesCallback(uint errorCode, uint numBytes, NativeOverlapped *overlap) { if (errorCode != 0) { Trace.TraceError("OverlappedStream GetQueuedCompletionStatus error: {0}", errorCode); } var result = (PageAsyncReadResult <Empty>)Overlapped.Unpack(overlap).AsyncResult; if (result.freeBuffer1 != null) { hlog.PopulatePage(result.freeBuffer1.GetValidPointer(), result.freeBuffer1.required_bytes, ref frame.GetPage(result.page % frame.frameSize)); result.freeBuffer1.Return(); } if (result.handle != null) { result.handle.Signal(); } Interlocked.MemoryBarrier(); Overlapped.Free(overlap); }