Skip to content

Commit

Permalink
Fix idle pruning in pool
Browse files Browse the repository at this point in the history
Fixes npgsql#2791

(cherry picked from commit e39f1d0)
  • Loading branch information
NinoFloris authored and roji committed Jan 15, 2020
1 parent a817762 commit 48d50b8
Showing 1 changed file with 5 additions and 3 deletions.
8 changes: 5 additions & 3 deletions src/Npgsql/ConnectorPool.cs
Original file line number Diff line number Diff line change
Expand Up @@ -129,7 +129,7 @@ internal ConnectorPool(NpgsqlConnectionStringBuilder settings, string connString
throw new ArgumentException($"Connection can't have ConnectionIdleLifetime {connectionIdleLifetime} under ConnectionPruningInterval {_pruningSamplingInterval}");

_pruningTimer = new Timer(PruningTimerCallback, this, Timeout.Infinite, Timeout.Infinite);
_pruningSampleSize = DivideRoundingUp(connectionIdleLifetime.Seconds, pruningSamplingInterval.Seconds);
_pruningSampleSize = DivideRoundingUp(settings.ConnectionIdleLifetime, settings.ConnectionPruningInterval);
_pruningMedianIndex = DivideRoundingUp(_pruningSampleSize, 2) - 1; // - 1 to go from length to index
_pruningSamplingInterval = pruningSamplingInterval;
_pruningSamples = new int[_pruningSampleSize];
Expand Down Expand Up @@ -520,11 +520,13 @@ static void PruneIdleConnectors(object? state)
return;

var sampleIndex = pool._pruningSampleIndex;
if (sampleIndex < pool._pruningSampleSize)
samples[sampleIndex] = pool.State.Idle;

if (sampleIndex != pool._pruningSampleSize - 1)
{
samples[sampleIndex] = pool.State.Idle;
pool._pruningSampleIndex = sampleIndex + 1;
pool._pruningTimer.Change(pool._pruningSamplingInterval, Timeout.InfiniteTimeSpan);

return;
}

Expand Down

0 comments on commit 48d50b8

Please sign in to comment.