Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / clr / src / BCL / Microsoft / Win32 / SafeHandles / SafeWaitHandle.cs / 1305376 / SafeWaitHandle.cs
// ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: SafeWaitHandle ** ** ** A wrapper for Win32 events (mutexes, auto reset events, and ** manual reset events). Used by WaitHandle. ** ** ===========================================================*/ using System; using System.Security; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.Versioning; using Microsoft.Win32; using System.Threading; namespace Microsoft.Win32.SafeHandles { [System.Security.SecurityCritical] // auto-generated_required public sealed class SafeWaitHandle : SafeHandleZeroOrMinusOneIsInvalid { // Special case flags for Mutexes enables workaround for known OS bug at // http://support.microsoft.com/default.aspx?scid=kb;en-us;889318 // One machine-wide mutex serializes all OpenMutex and CloseHandle operations. // bIsMutex: if true, we need to grab machine-wide mutex before doing any Close ops. // Initialized to false by the runtime. private bool bIsMutex; // bIsMutex: if true, we need to avoid grabbing the machine-wide mutex before Close ops, // since that mutex is, of course, this very handle. // Initialized to false by the runtime. private bool bIsReservedMutex; // Called by P/Invoke marshaler private SafeWaitHandle() : base(true) { } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public SafeWaitHandle(IntPtr existingHandle, bool ownsHandle) : base(ownsHandle) { SetHandle(existingHandle); } [System.Security.SecurityCritical] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] override protected bool ReleaseHandle() { #if !FEATURE_CORECLR if (!bIsMutex || Environment.HasShutdownStarted) return Win32Native.CloseHandle(handle); bool bReturn = false; bool bMutexObtained = false; try { if (!bIsReservedMutex) { Mutex.AcquireReservedMutex(ref bMutexObtained); } bReturn = Win32Native.CloseHandle(handle); } finally { if (bMutexObtained) Mutex.ReleaseReservedMutex(); } return bReturn; #else return Win32Native.CloseHandle(handle); #endif } internal void SetAsMutex() { bIsMutex = true; } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal void SetAsReservedMutex() { bIsReservedMutex = true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // ==++== // // Copyright (c) Microsoft Corporation. All rights reserved. // // ==--== /*============================================================ ** ** Class: SafeWaitHandle ** ** ** A wrapper for Win32 events (mutexes, auto reset events, and ** manual reset events). Used by WaitHandle. ** ** ===========================================================*/ using System; using System.Security; using System.Security.Permissions; using System.Runtime.InteropServices; using System.Runtime.CompilerServices; using System.Runtime.ConstrainedExecution; using System.Runtime.Versioning; using Microsoft.Win32; using System.Threading; namespace Microsoft.Win32.SafeHandles { [System.Security.SecurityCritical] // auto-generated_required public sealed class SafeWaitHandle : SafeHandleZeroOrMinusOneIsInvalid { // Special case flags for Mutexes enables workaround for known OS bug at // http://support.microsoft.com/default.aspx?scid=kb;en-us;889318 // One machine-wide mutex serializes all OpenMutex and CloseHandle operations. // bIsMutex: if true, we need to grab machine-wide mutex before doing any Close ops. // Initialized to false by the runtime. private bool bIsMutex; // bIsMutex: if true, we need to avoid grabbing the machine-wide mutex before Close ops, // since that mutex is, of course, this very handle. // Initialized to false by the runtime. private bool bIsReservedMutex; // Called by P/Invoke marshaler private SafeWaitHandle() : base(true) { } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.MayFail)] public SafeWaitHandle(IntPtr existingHandle, bool ownsHandle) : base(ownsHandle) { SetHandle(existingHandle); } [System.Security.SecurityCritical] [ResourceExposure(ResourceScope.Machine)] [ResourceConsumption(ResourceScope.Machine)] override protected bool ReleaseHandle() { #if !FEATURE_CORECLR if (!bIsMutex || Environment.HasShutdownStarted) return Win32Native.CloseHandle(handle); bool bReturn = false; bool bMutexObtained = false; try { if (!bIsReservedMutex) { Mutex.AcquireReservedMutex(ref bMutexObtained); } bReturn = Win32Native.CloseHandle(handle); } finally { if (bMutexObtained) Mutex.ReleaseReservedMutex(); } return bReturn; #else return Win32Native.CloseHandle(handle); #endif } internal void SetAsMutex() { bIsMutex = true; } [ReliabilityContract(Consistency.WillNotCorruptState, Cer.Success)] internal void SetAsReservedMutex() { bIsReservedMutex = true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- CfgArc.cs
- RegexTree.cs
- ConcurrentDictionary.cs
- SchemaNamespaceManager.cs
- RepeaterItemEventArgs.cs
- XPathAxisIterator.cs
- FragmentQueryKB.cs
- BitmapPalette.cs
- FontConverter.cs
- WindowsEditBoxRange.cs
- SafeProcessHandle.cs
- SamlAssertionKeyIdentifierClause.cs
- LateBoundBitmapDecoder.cs
- InternalRelationshipCollection.cs
- TiffBitmapEncoder.cs
- OrderByQueryOptionExpression.cs
- ThrowHelper.cs
- Image.cs
- WasAdminWrapper.cs
- OleDbConnectionInternal.cs
- GuidelineSet.cs
- VirtualDirectoryMapping.cs
- ForeignKeyFactory.cs
- GridViewDeleteEventArgs.cs
- ListBoxItemWrapperAutomationPeer.cs
- ValidationSummary.cs
- EdmPropertyAttribute.cs
- counter.cs
- StrokeFIndices.cs
- SerializationInfoEnumerator.cs
- WebContext.cs
- FixedStringLookup.cs
- SharedStatics.cs
- DisplayNameAttribute.cs
- FrameSecurityDescriptor.cs
- RemoteWebConfigurationHostServer.cs
- Range.cs
- XmlSchemaAttributeGroupRef.cs
- XhtmlConformanceSection.cs
- Win32MouseDevice.cs
- DataTableNameHandler.cs
- TableRowGroup.cs
- FixedTextPointer.cs
- AuthenticationConfig.cs
- CommonDialog.cs
- PropertyStore.cs
- WebPartHeaderCloseVerb.cs
- PolicyUtility.cs
- Certificate.cs
- RepeatButtonAutomationPeer.cs
- DivideByZeroException.cs
- SimpleWorkerRequest.cs
- FastEncoder.cs
- ZipIOBlockManager.cs
- UrlAuthFailedErrorFormatter.cs
- UTF32Encoding.cs
- DateTimeFormatInfo.cs
- DesignerAutoFormatCollection.cs
- elementinformation.cs
- Lease.cs
- RelatedImageListAttribute.cs
- WaitingCursor.cs
- Decimal.cs
- SiteMapNodeItem.cs
- Helpers.cs
- HorizontalAlignConverter.cs
- CompositeScriptReference.cs
- TableMethodGenerator.cs
- EventListener.cs
- GridViewAutomationPeer.cs
- Line.cs
- MimeBasePart.cs
- AccessedThroughPropertyAttribute.cs
- Int16.cs
- TranslateTransform.cs
- RectValueSerializer.cs
- FileVersionInfo.cs
- AxParameterData.cs
- RangeValuePattern.cs
- RegistrationServices.cs
- ReflectTypeDescriptionProvider.cs
- BasicExpressionVisitor.cs
- SharedStream.cs
- ColumnHeaderConverter.cs
- DecoderFallbackWithFailureFlag.cs
- WinFormsSpinner.cs
- RadioButtonRenderer.cs
- BitConverter.cs
- SdlChannelSink.cs
- AsyncStreamReader.cs
- ListItemConverter.cs
- Pts.cs
- OperationContextScope.cs
- PaintValueEventArgs.cs
- MetabaseServerConfig.cs
- HtmlTableCell.cs
- CellRelation.cs
- ModelPropertyCollectionImpl.cs
- ExceptionHandlerDesigner.cs
- ValueTypeFieldReference.cs