Пример #1
0
        /// <summary>
        /// Creates a singleton instance or throws if instance is already created
        /// </summary>
        public ZoneGovernorService() : base(null)
        {
            if (!AgniSystem.IsMetabase)
            {
                throw new AZGOVException(StringConsts.METABASE_NOT_AVAILABLE_ERROR.Args(GetType().FullName + ".ctor()"));
            }

            lock (s_InstanceLock)
            {
                if (s_Instance != null)
                {
                    throw new AZGOVException(StringConsts.AZGOV_INSTANCE_ALREADY_ALLOCATED_ERROR);
                }

                m_SubInstr = new InstrumentationService(this);
                m_SubInstrReductionLevels = new Dictionary <string, int>();
                m_SubInstrCallers         = new ConcurrentDictionary <string, DateTime>();

                m_SubLog = new LogService(this);

                m_SubHosts         = new Registry <Contracts.HostInfo>();
                m_DynamicHostSlots = new Registry <Contracts.DynamicHostInfo>();

                m_Locker = new Locking.Server.LockServerService(this);

                s_Instance = this;
            }
        }
Пример #2
0
        protected override void Destructor()
        {
            lock (s_InstanceLock)
            {
                base.Destructor();
                s_Instance = null;

                m_Locker.Dispose();

                var sis = m_SubInstr;
                if (sis != null)
                {
                    m_SubInstr = null;
                    sis.Dispose();
                }

                var slg = m_SubLog;
                if (slg != null)
                {
                    m_SubLog = null;
                    slg.Dispose();
                }
            }
        }