Ejemplo n.º 1
0
        static void OnCloseHandle(IntPtr handle)
        {
            if (handle == IntPtr.Zero)
            {
                return;
            }

            NativeHandle nativeHandle = null;

            // Get gc handle first
            IntPtr pHandle = ((uv_handle_t *)handle)->data;

            if (pHandle != IntPtr.Zero)
            {
                GCHandle gcHandle = GCHandle.FromIntPtr(pHandle);
                if (gcHandle.IsAllocated)
                {
                    nativeHandle = gcHandle.Target as NativeHandle;
                    //Console.WriteLine("gcHandle free");
                    gcHandle.Free();

                    ((uv_handle_t *)handle)->data = IntPtr.Zero;
                }
            }


            // Release memory
            Libuv.FreeMemory(handle);
            nativeHandle?.OnClosed();
        }
Ejemplo n.º 2
0
 private bool disposedValue = false; // 要检测冗余调用
 protected virtual void Dispose(bool disposing)
 {
     if (!disposedValue)
     {
         if (disposing)
         {
             // TODO: 释放托管状态(托管对象)。
         }
         // TODO: 释放未托管的资源(未托管的对象)并在以下内容中替代终结器。
         // TODO: 将大型字段设置为 null。
         Libuv.FreeMemory(_loop);
         disposedValue = true;
     }
 }