protected override void DoStart() { log(MessageType.Info, "Entering DoStart()", null); try { //pre-flight checks if (m_Provider == null) { throw new NFXException(StringConsts.SERVICE_INVALID_STATE + "InstrumentationService.DoStart(Provider=null)"); } m_BufferOldestDatumUTC = null; m_TypeBucketed = new TypeBucketedData(); m_Provider.Start(); m_ResultBufferIndex = 0; if (m_ResultBufferSize > 0) { m_ResultBuffer = new Datum[m_ResultBufferSize]; } m_Thread = new Thread(threadSpin); m_Thread.Name = THREAD_NAME; m_Thread.IsBackground = false; m_Thread.Start(); } catch (Exception error) { AbortStart(); if (m_Thread != null) { try { m_Thread.Join(); } catch {} m_Thread = null; } m_ResultBuffer = null; log(MessageType.CatastrophicError, "DoStart() exception: " + error.Message, null); throw error; } log(MessageType.Info, "Exiting DoStart()", null); }
protected override void DoWaitForCompleteStop() { log(MessageType.Info, "Entering DoWaitForCompleteStop()", null); try { base.DoWaitForCompleteStop(); m_Thread.Join(); m_Thread = null; m_Provider.WaitForCompleteStop(); m_TypeBucketed = null; m_ResultBuffer = null; } catch (Exception error) { log(MessageType.CatastrophicError, "DoWaitForCompleteStop() exception: " + error.Message, null); throw error; } log(MessageType.Info, "Exiting DoWaitForCompleteStop()", null); }
protected override void DoWaitForCompleteStop() { WriteLog(MessageType.Info, nameof(DoWaitForCompleteStop), "Entering"); try { base.DoWaitForCompleteStop(); m_Thread.Join(); m_Thread = null; m_Provider.WaitForCompleteStop(); m_TypeBucketed = null; m_ResultBuffer = null; } catch (Exception error) { WriteLog(MessageType.CatastrophicError, nameof(DoWaitForCompleteStop), "Leaked exception: " + error.Message); throw error; } WriteLog(MessageType.Info, nameof(DoWaitForCompleteStop), "Exiting"); }