public static unsafe Overlapped Unpack(NativeOverlapped *nativeOverlappedPtr) { if (nativeOverlappedPtr == null) { throw new ArgumentNullException(nameof(nativeOverlappedPtr)); } Contract.EndContractBlock(); Overlapped overlapped = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr).m_overlapped; return(overlapped); }
public static unsafe void Free(NativeOverlapped *nativeOverlappedPtr) { if (nativeOverlappedPtr == null) { throw new ArgumentNullException("nativeOverlappedPtr"); } Overlapped overlapped = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr).m_overlapped; OverlappedData.FreeNativeOverlapped(nativeOverlappedPtr); OverlappedData overlappedData = overlapped.m_overlappedData; overlapped.m_overlappedData = null; OverlappedDataCache.CacheOverlappedData(overlappedData); }
public static unsafe void Free(NativeOverlapped *nativeOverlappedPtr) { if (nativeOverlappedPtr == null) { throw new ArgumentNullException(nameof(nativeOverlappedPtr)); } Overlapped overlapped = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr).m_overlapped; OverlappedData.FreeNativeOverlapped(nativeOverlappedPtr); OverlappedData overlappedData = overlapped.m_overlappedData; overlapped.m_overlappedData = null; overlappedData.ReInitialize(); s_overlappedDataCache.Free(overlappedData); }
unsafe public static void Free(NativeOverlapped *nativeOverlappedPtr) { if (nativeOverlappedPtr == null) { throw new ArgumentNullException("nativeOverlappedPtr"); } Contract.EndContractBlock(); Overlapped overlapped = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr).m_overlapped; OverlappedData.FreeNativeOverlapped(nativeOverlappedPtr); OverlappedData overlappedData = overlapped.m_overlappedData; overlapped.m_overlappedData = null; overlappedData.ReInitialize(); s_overlappedDataCache.Free(overlappedData); }
public static unsafe void Free(NativeOverlapped *nativeOverlappedPtr) { if ((IntPtr)nativeOverlappedPtr == IntPtr.Zero) { throw new ArgumentNullException("nativeOverlappedPtr"); } Overlapped overlapped = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr).m_overlapped; OverlappedData.FreeNativeOverlapped(nativeOverlappedPtr); OverlappedData overlappedData = overlapped.m_overlappedData; // ISSUE: variable of the null type __Null local = null; overlapped.m_overlappedData = (OverlappedData)local; overlappedData.ReInitialize(); Overlapped.s_overlappedDataCache.Free((object)overlappedData); }
internal static unsafe void PerformIOCompletionCallback(uint errorCode, uint numBytes, NativeOverlapped *pOVERLAP) { do { Overlapped overlapped = OverlappedData.GetOverlappedFromNative(pOVERLAP).m_overlapped; _IOCompletionCallback iocbHelper = overlapped.iocbHelper; if (((iocbHelper == null) || (iocbHelper._executionContext == null)) || iocbHelper._executionContext.IsDefaultFTContext()) { overlapped.UserCallback(errorCode, numBytes, pOVERLAP); } else { iocbHelper._errorCode = errorCode; iocbHelper._numBytes = numBytes; iocbHelper._pOVERLAP = pOVERLAP; ExecutionContext.Run(iocbHelper._executionContext.CreateCopy(), _ccb, iocbHelper); } OverlappedData.CheckVMForIOPacket(out pOVERLAP, out errorCode, out numBytes); }while (pOVERLAP != null); }
internal static unsafe void PerformIOCompletionCallback(uint errorCode, uint numBytes, NativeOverlapped *pOVERLAP) { do { Overlapped overlapped = OverlappedData.GetOverlappedFromNative(pOVERLAP).m_overlapped; _IOCompletionCallback iocbHelper = overlapped.iocbHelper; if (iocbHelper == null || iocbHelper._executionContext == null || iocbHelper._executionContext.IsDefaultFTContext(true)) { overlapped.UserCallback(errorCode, numBytes, pOVERLAP); } else { iocbHelper._errorCode = errorCode; iocbHelper._numBytes = numBytes; iocbHelper._pOVERLAP = pOVERLAP; using (ExecutionContext copy = iocbHelper._executionContext.CreateCopy()) ExecutionContext.Run(copy, _IOCompletionCallback._ccb, (object)iocbHelper, true); } OverlappedData.CheckVMForIOPacket(out pOVERLAP, out errorCode, out numBytes); }while ((IntPtr)pOVERLAP != IntPtr.Zero); }
// call back helper internal static void PerformIOCompletionCallback( uint errorCode, uint numBytes, NativeOverlapped *pNativeOverlapped ) { do { OverlappedData overlapped = OverlappedData.GetOverlappedFromNative( pNativeOverlapped ); if (overlapped._callback is IOCompletionCallback iocb) { // We got here because of UnsafePack (or) Pack with EC flow suppressed iocb(errorCode, numBytes, pNativeOverlapped); } else { // We got here because of Pack var helper = (_IOCompletionCallback?)overlapped._callback; Debug.Assert( helper != null, "Should only be receiving a completion callback if a delegate was provided." ); helper._errorCode = errorCode; helper._numBytes = numBytes; helper._pNativeOverlapped = pNativeOverlapped; ExecutionContext.RunInternal(helper._executionContext, _ccb, helper); } // Quickly check the VM again, to see if a packet has arrived. OverlappedData.CheckVMForIOPacket( out pNativeOverlapped, out errorCode, out numBytes ); } while (pNativeOverlapped != null); }
// call back helper static unsafe internal void PerformIOCompletionCallback(uint errorCode, // Error code uint numBytes, // No. of bytes transferred NativeOverlapped *pOVERLAP // ptr to OVERLAP structure ) { Overlapped overlapped = OverlappedData.GetOverlappedFromNative(pOVERLAP).m_overlapped; _IOCompletionCallback helper = overlapped.iocbHelper; if (helper == null || helper._executionContext == null || helper._executionContext.IsDefaultFTContext()) { // We got here because of UnsafePack (or) Pack with EC flow supressed IOCompletionCallback callback = overlapped.UserCallback; callback(errorCode, numBytes, pOVERLAP); } else { // We got here because of Pack helper._errorCode = errorCode; helper._numBytes = numBytes; helper._pOVERLAP = pOVERLAP; ExecutionContext.Run(helper._executionContext.CreateCopy(), _ccb, helper); } }
internal static unsafe void FreeNativeOverlapped(NativeOverlapped *nativeOverlappedPtr) { OverlappedData overlappedData = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr); overlappedData.FreeNativeOverlapped(); }