Skip to content

Commit

Permalink
GSF.TimeSeries: Eliminate queue of input measurement keys
Browse files Browse the repository at this point in the history
  • Loading branch information
StephenCWills committed Jan 21, 2025
1 parent a56b244 commit ce9db9b
Showing 1 changed file with 9 additions and 22 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ namespace GSF.TimeSeries.Adapters
// Fields
private readonly LongSynchronizedOperation m_parseConnectionString;
private readonly LongSynchronizedOperation m_initializeChildAdapters;
private readonly List<MeasurementKey[]> m_inputMeasurementKeysQueue;
private MeasurementKey[] m_inputMeasurementKeysForInitialization;
private bool m_disposed;

#endregion
Expand All @@ -104,8 +104,6 @@ protected IndependentActionAdapterManagerBase()
{
IsBackground = true
};

m_inputMeasurementKeysQueue = new List<MeasurementKey[]>(2);
}

#endregion
Expand Down Expand Up @@ -458,32 +456,21 @@ protected override void Dispose(bool disposing)
/// </remarks>
protected virtual void InitializeChildAdapterManagement(MeasurementKey[] inputMeasurementKeys)
{
lock (m_inputMeasurementKeysQueue)
{
if (m_inputMeasurementKeysQueue.Count < 2)
m_inputMeasurementKeysQueue.Add(inputMeasurementKeys);
else
m_inputMeasurementKeysQueue[1] = inputMeasurementKeys;

m_initializeChildAdapters.RunOnceAsync();
}
Interlocked.Exchange(ref m_inputMeasurementKeysForInitialization, inputMeasurementKeys);
m_initializeChildAdapters.RunOnceAsync();
}

private void InitializeChildAdapters()
{
MeasurementKey[] inputMeasurementKeys;

lock (m_inputMeasurementKeysQueue)
try
{
if (m_inputMeasurementKeysQueue.Count == 0)
return;
MeasurementKey[] inputMeasurementKeys = Interlocked.Exchange(ref m_inputMeasurementKeysForInitialization, null);

inputMeasurementKeys = m_inputMeasurementKeysQueue[0];
m_inputMeasurementKeysQueue.RemoveAt(0);
}
// Indicates an extremely unlikely race condition occurred,
// but this is expected so don't issue a warning
if (inputMeasurementKeys is null)
return;

try
{
// If no inputs are defined, skip setup
if (inputMeasurementKeys.Length == 0)
{
Expand Down

0 comments on commit ce9db9b

Please sign in to comment.