Beispiel #1
0
        private static void RemoveEasyHandle(SafeCurlMultiHandle multiHandle, RequestCompletionSource state, bool onMultiStack)
        {
            SafeCurlHandle requestHandle = state.RequestHandle;

            if (onMultiStack)
            {
                Debug.Assert(!requestHandle.IsInvalid);
                lock (multiHandle)
                {
                    Interop.libcurl.curl_multi_remove_handle(multiHandle, requestHandle);
                    multiHandle.RequestCount = multiHandle.RequestCount - 1;
                    multiHandle.SignalFdSetChange(state.SocketFd, true);
                }
                state.SessionHandle.DangerousRelease();
                state.SessionHandle = null;
                requestHandle.DangerousRelease();
            }

            if (state.RequestContentStream != null)
            {
                state.RequestContentStream.Dispose();
            }

            if (!state.RequestHeaderHandle.IsInvalid)
            {
                SafeCurlSlistHandle headerHandle = state.RequestHeaderHandle;
                SafeCurlSlistHandle.DisposeAndClearHandle(ref headerHandle);
            }

            if (!requestHandle.IsInvalid)
            {
                SafeCurlHandle.DisposeAndClearHandle(ref requestHandle);
            }
        }
Beispiel #2
0
        private static void RemoveEasyHandle(SafeCurlMultiHandle multiHandle, GCHandle stateHandle, bool onMultiStack)
        {
            RequestCompletionSource state         = (RequestCompletionSource)stateHandle.Target;
            SafeCurlHandle          requestHandle = state.RequestHandle;

            if (onMultiStack)
            {
                lock (multiHandle)
                {
                    Interop.libcurl.curl_multi_remove_handle(multiHandle, requestHandle);
                }
                state.SessionHandle = null;
                requestHandle.DangerousRelease();
            }

            if (!state.RequestHeaderHandle.IsInvalid)
            {
                SafeCurlSlistHandle headerHandle = state.RequestHeaderHandle;
                SafeCurlSlistHandle.DisposeAndClearHandle(ref headerHandle);
            }

            SafeCurlHandle.DisposeAndClearHandle(ref requestHandle);

            stateHandle.Free();
        }