File: system\threading\abandonedmutexexception.cs
Project: ndp\clr\src\bcl\mscorlib.csproj (mscorlib)
// ==++==
// 
//   Copyright (c) Microsoft Corporation.  All rights reserved.
// 
// ==--==
//
// <OWNER>Microsoft</OWNER>
//
// AbandonedMutexException
// Thrown when a wait completes because one or more mutexes was abandoned.
// AbandonedMutexs indicate serious error in user code or machine state.
////////////////////////////////////////////////////////////////////////////////
 
namespace System.Threading {
    
    using System;
    using System.Runtime.Serialization;
    using System.Threading;
    using System.Runtime.InteropServices;
    
    [Serializable]
    [ComVisibleAttribute(false)]
    public class AbandonedMutexException : SystemException {
 
        private int m_MutexIndex = -1;
        private Mutex m_Mutex = null;
 
        public AbandonedMutexException() 
            : base(Environment.GetResourceString("Threading.AbandonedMutexException")) {
            SetErrorCode(__HResults.COR_E_ABANDONEDMUTEX);
        }
 
        public AbandonedMutexException(String message) 
            : base(message) {
            SetErrorCode(__HResults.COR_E_ABANDONEDMUTEX);
        }
 
        public AbandonedMutexException(String message, Exception inner ) 
            : base(message, inner) {
            SetErrorCode(__HResults.COR_E_ABANDONEDMUTEX);
        }
 
        public AbandonedMutexException(int location, WaitHandle handle) 
            : base(Environment.GetResourceString("Threading.AbandonedMutexException")) {
            SetErrorCode(__HResults.COR_E_ABANDONEDMUTEX);
            SetupException(location,handle);
        }
    
        public AbandonedMutexException(String message,int location, WaitHandle handle) 
            : base(message) {
            SetErrorCode(__HResults.COR_E_ABANDONEDMUTEX);
            SetupException(location,handle);
        }
 
        public AbandonedMutexException(String message, Exception inner,int location, WaitHandle handle ) 
            : base(message, inner) {
            SetErrorCode(__HResults.COR_E_ABANDONEDMUTEX);
            SetupException(location,handle);
        }
 
        private void SetupException(int location, WaitHandle handle)
        {
            m_MutexIndex = location;
            if(handle != null)
                m_Mutex = handle as Mutex;
        }
 
        protected AbandonedMutexException(SerializationInfo info, StreamingContext context) : base(info, context) {
        }
 
        public Mutex Mutex
        {
            get {
                return m_Mutex;
            }
        }
 
        public int MutexIndex
        {
            get{
                return m_MutexIndex;
            }
        }
 
    }
}