public IOCompletionTraceHook StartTracingCompletion() { var hook = new IOCompletionTraceHook(this); IOCompletionTraceHook existing = Interlocked.CompareExchange(ref m_traceHook, hook, comparand: null); Contract.Assume(existing == null, "Trace hook instance already installed"); return(hook); }
private unsafe void TraceStartIfEnabled(TaggedOverlapped *overlapped, IIOCompletionTarget target) { IOCompletionTraceHook traceHook = Volatile.Read(ref m_traceHook); if (traceHook != null) { traceHook.TraceStart(overlapped->GetUniqueId(), target); } }
private unsafe void TraceCompletionIfEnabled(TaggedOverlapped *overlapped) { IOCompletionTraceHook traceHook = Volatile.Read(ref m_traceHook); traceHook?.TraceComplete(overlapped->GetUniqueId()); }