Ejemplo n.º 1
0
        protected override void DoWaitForCompleteStop()
        {
            const string FROM = "GlueService.DoWaitForCompleteStop()";
            const string STOP = "stopping";

            base.DoWaitForCompleteStop();

            try
            {
                m_Thread.Join();
                m_Thread = null;

                foreach (var s in m_Servers)
                {
                    run(() => s.Close(), STOP, "server", s.Name, s.GetType(), false);
                }
                foreach (var b in m_Bindings)
                {
                    run(() => b.WaitForCompleteStop(), STOP, "binding", b.Name, b.GetType(), false);
                }
                foreach (var p in m_Providers)
                {
                    run(() => p.WaitForCompleteStop(), STOP, "provider", p.Name, p.GetType(), false);
                }

                run(() => m_ServerHandler.WaitForCompleteStop(), STOP, "server handler", m_ServerHandler.Name, m_ServerHandler.GetType(), false);

                m_ServerHandler.Dispose();
                m_ServerHandler = null;

                m_Calls = null;
            }
            catch (Exception error)
            {
                if (m_ServerHandler != null)
                {
                    try
                    {
                        m_ServerHandler.Dispose();
                        m_ServerHandler = null;
                    }
                    catch
                    {
                    }
                }

                log(MessageType.CatastrophicError, "Exception: " + error.ToMessageWithType(), FROM);
                throw error;
            }
        }
Ejemplo n.º 2
0
        protected override void DoWaitForCompleteStop()
        {
            const string STOP = "stopping";

            base.DoWaitForCompleteStop();

            try
            {
                m_Thread.Join();
                m_Thread = null;

                foreach (var s in m_Servers)
                {
                    run(() => s.Close(), STOP, "server", s.Name, s.GetType(), false);
                }
                foreach (var b in m_Bindings)
                {
                    run(() => b.WaitForCompleteStop(), STOP, "binding", b.Name, b.GetType(), false);
                }
                foreach (var p in m_Providers)
                {
                    run(() => p.WaitForCompleteStop(), STOP, "provider", p.Name, p.GetType(), false);
                }

                run(() => m_ServerHandler.WaitForCompleteStop(), STOP, "server handler", m_ServerHandler.Name, m_ServerHandler.GetType(), false);

                DisposeAndNull(ref m_ServerHandler);

                m_Calls = null;
                m_CallsWithTasks.ScanAll();
                m_CallsWithTasks = null;
            }
            catch (Exception error)
            {
                try
                {
                    DisposeAndNull(ref m_ServerHandler);
                }
                catch (Exception she)
                {
                    WriteLog(MessageType.CatastrophicError, nameof(DoWaitForCompleteStop), "DisposeAndNull(ref m_ServerHandler) leaked: " + she.ToMessageWithType(), she);
                }
                WriteLog(MessageType.CatastrophicError, nameof(DoWaitForCompleteStop), "Leaked exception: " + error.ToMessageWithType(), error);
                throw error;
            }
        }