Code:
/ 4.0 / 4.0 / untmp / 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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- FilteredAttributeCollection.cs
- _CacheStreams.cs
- AnnotationComponentChooser.cs
- BitHelper.cs
- DataExpression.cs
- _HeaderInfo.cs
- MsmqIntegrationInputChannel.cs
- PathSegmentCollection.cs
- InternalDispatchObject.cs
- AsymmetricAlgorithm.cs
- StrongTypingException.cs
- DataGridViewSelectedRowCollection.cs
- RegexCompilationInfo.cs
- GroupBox.cs
- OdbcConnectionOpen.cs
- Utils.cs
- SiteMapNodeItemEventArgs.cs
- SHA384.cs
- PhotoPrintingIntent.cs
- BookmarkCallbackWrapper.cs
- XmlDataSourceDesigner.cs
- SqlCommand.cs
- HttpCookieCollection.cs
- TimeSpanConverter.cs
- NavigationWindowAutomationPeer.cs
- CodeDOMUtility.cs
- COM2PropertyBuilderUITypeEditor.cs
- BindingBase.cs
- TimeSpanConverter.cs
- SqlInternalConnectionTds.cs
- Brushes.cs
- CatalogZone.cs
- GlyphsSerializer.cs
- CompositeFontParser.cs
- RegexTree.cs
- Point.cs
- XslCompiledTransform.cs
- HtmlInputReset.cs
- BinaryOperationBinder.cs
- DependencyObjectPropertyDescriptor.cs
- DigitShape.cs
- BrowsableAttribute.cs
- ForwardPositionQuery.cs
- SqlBulkCopyColumnMappingCollection.cs
- QilStrConcat.cs
- TransactionScopeDesigner.cs
- JsonFormatWriterGenerator.cs
- ComAdminWrapper.cs
- IsolationInterop.cs
- RepeatInfo.cs
- Activity.cs
- ThreadExceptionDialog.cs
- FormatterConverter.cs
- CapabilitiesState.cs
- Visual3D.cs
- UnsafeNativeMethodsPenimc.cs
- TypeUtil.cs
- SettingsAttributeDictionary.cs
- EDesignUtil.cs
- HelpInfo.cs
- ObjectDataSourceMethodEventArgs.cs
- WmpBitmapEncoder.cs
- WhitespaceRuleLookup.cs
- ModuleConfigurationInfo.cs
- XPathAncestorQuery.cs
- _KerberosClient.cs
- RichTextBoxContextMenu.cs
- EventProvider.cs
- DialogResultConverter.cs
- ProfessionalColorTable.cs
- StructuralCache.cs
- DesignColumnCollection.cs
- FixedSOMGroup.cs
- CodeIdentifiers.cs
- TabRenderer.cs
- DebugHandleTracker.cs
- AuthorizationRuleCollection.cs
- OdbcDataReader.cs
- DebuggerAttributes.cs
- OdbcTransaction.cs
- BaseTemplateCodeDomTreeGenerator.cs
- Table.cs
- CmsInterop.cs
- FormsAuthenticationTicket.cs
- JoinCqlBlock.cs
- ColumnClickEvent.cs
- DebugInfoExpression.cs
- DiagnosticStrings.cs
- CompilationLock.cs
- CodeParameterDeclarationExpressionCollection.cs
- EntityContainer.cs
- UIHelper.cs
- BuildResult.cs
- RectAnimationClockResource.cs
- IncrementalCompileAnalyzer.cs
- DebugHandleTracker.cs
- IsolatedStorageFileStream.cs
- UseAttributeSetsAction.cs
- CriticalExceptions.cs
- SplitterCancelEvent.cs