GetOverlappedFromNative() private method

private GetOverlappedFromNative ( NativeOverlapped nativeOverlappedPtr ) : OverlappedData
nativeOverlappedPtr NativeOverlapped
return OverlappedData
Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
        }
Esempio n. 5
0
        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);
 }
Esempio n. 7
0
 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);
 }
Esempio n. 8
0
        // 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);
            }
        }
Esempio n. 10
0
        internal static unsafe void FreeNativeOverlapped(NativeOverlapped *nativeOverlappedPtr)
        {
            OverlappedData overlappedData = OverlappedData.GetOverlappedFromNative(nativeOverlappedPtr);

            overlappedData.FreeNativeOverlapped();
        }