@@ -20,7 +20,7 @@ internal sealed class ConnectionPool : IDisposable
2020
2121 public SslProtocols SslProtocols { get ; set ; }
2222
23- public async ValueTask < ServerSession > GetSessionAsync ( MySqlConnection connection , int startTickCount , int timeoutMilliseconds , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
23+ public async ValueTask < ServerSession > GetSessionAsync ( MySqlConnection connection , long startingTimestamp , int timeoutMilliseconds , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
2424 {
2525 cancellationToken . ThrowIfCancellationRequested ( ) ;
2626
@@ -72,7 +72,7 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
7272 if ( ConnectionSettings . ConnectionReset || session . DatabaseOverride is not null )
7373 {
7474 if ( timeoutMilliseconds != 0 )
75- session . SetTimeout ( Math . Max ( 1 , timeoutMilliseconds - ( Environment . TickCount - startTickCount ) ) ) ;
75+ session . SetTimeout ( Math . Max ( 1 , timeoutMilliseconds - ( int ) Utility . GetElapsedMilliseconds ( startingTimestamp ) ) ) ;
7676 reuseSession = await session . TryResetConnectionAsync ( ConnectionSettings , connection , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
7777 session . SetTimeout ( Constants . InfiniteTimeout ) ;
7878 }
@@ -103,14 +103,14 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
103103 ActivitySourceHelper . CopyTags ( session . ActivityTags , activity ) ;
104104 Log . ReturningPooledSession ( m_logger , Id , session . Id , leasedSessionsCountPooled ) ;
105105
106- session . LastLeasedTicks = unchecked ( ( uint ) Environment . TickCount ) ;
107- MetricsReporter . RecordWaitTime ( this , unchecked ( session . LastLeasedTicks - ( uint ) startTickCount ) ) ;
106+ session . LastLeasedTimestamp = Stopwatch . GetTimestamp ( ) ;
107+ MetricsReporter . RecordWaitTime ( this , Utility . GetElapsedMilliseconds ( startingTimestamp , session . LastLeasedTimestamp ) ) ;
108108 return session ;
109109 }
110110 }
111111
112112 // create a new session
113- session = await ConnectSessionAsync ( connection , s_createdNewSession , startTickCount , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
113+ session = await ConnectSessionAsync ( connection , s_createdNewSession , startingTimestamp , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
114114 AdjustHostConnectionCount ( session , 1 ) ;
115115 session . OwningConnection = new ( connection ) ;
116116 int leasedSessionsCountNew ;
@@ -122,8 +122,8 @@ public async ValueTask<ServerSession> GetSessionAsync(MySqlConnection connection
122122 MetricsReporter . AddUsed ( this ) ;
123123 Log . ReturningNewSession ( m_logger , Id , session . Id , leasedSessionsCountNew ) ;
124124
125- session . LastLeasedTicks = unchecked ( ( uint ) Environment . TickCount ) ;
126- MetricsReporter . RecordCreateTime ( this , unchecked ( session . LastLeasedTicks - ( uint ) startTickCount ) ) ;
125+ session . LastLeasedTimestamp = Stopwatch . GetTimestamp ( ) ;
126+ MetricsReporter . RecordCreateTime ( this , Utility . GetElapsedMilliseconds ( startingTimestamp , session . LastLeasedTimestamp ) ) ;
127127 return session ;
128128 }
129129 catch ( Exception ex )
@@ -161,7 +161,7 @@ private int GetSessionHealth(ServerSession session)
161161 if ( session . PoolGeneration != m_generation )
162162 return 2 ;
163163 if ( ConnectionSettings . ConnectionLifeTime > 0
164- && unchecked ( ( uint ) Environment . TickCount ) - session . CreatedTicks >= ConnectionSettings . ConnectionLifeTime )
164+ && Utility . GetElapsedMilliseconds ( session . CreatedTimestamp ) >= ConnectionSettings . ConnectionLifeTime )
165165 return 3 ;
166166
167167 return 0 ;
@@ -214,7 +214,7 @@ public async Task ReapAsync(IOBehavior ioBehavior, CancellationToken cancellatio
214214 {
215215 Log . ReapingConnectionPool ( m_logger , Id ) ;
216216 await RecoverLeakedSessionsAsync ( ioBehavior ) . ConfigureAwait ( false ) ;
217- await CleanPoolAsync ( ioBehavior , session => ( unchecked ( ( uint ) Environment . TickCount ) - session . LastReturnedTicks ) / 1000 >= ConnectionSettings . ConnectionIdleTimeout , true , cancellationToken ) . ConfigureAwait ( false ) ;
217+ await CleanPoolAsync ( ioBehavior , session => Utility . GetElapsedMilliseconds ( session . LastReturnedTimestamp ) / 1000 >= ConnectionSettings . ConnectionIdleTimeout , true , cancellationToken ) . ConfigureAwait ( false ) ;
218218 }
219219
220220 /// <summary>
@@ -403,7 +403,7 @@ private async Task CreateMinimumPooledSessions(MySqlConnection connection, IOBeh
403403
404404 try
405405 {
406- var session = await ConnectSessionAsync ( connection , s_createdToReachMinimumPoolSize , Environment . TickCount , null , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
406+ var session = await ConnectSessionAsync ( connection , s_createdToReachMinimumPoolSize , Stopwatch . GetTimestamp ( ) , null , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
407407 AdjustHostConnectionCount ( session , 1 ) ;
408408 lock ( m_sessions )
409409 m_sessions . AddFirst ( session ) ;
@@ -417,15 +417,15 @@ private async Task CreateMinimumPooledSessions(MySqlConnection connection, IOBeh
417417 }
418418 }
419419
420- private async ValueTask < ServerSession > ConnectSessionAsync ( MySqlConnection connection , Action < ILogger , int , string , Exception ? > logMessage , int startTickCount , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
420+ private async ValueTask < ServerSession > ConnectSessionAsync ( MySqlConnection connection , Action < ILogger , int , string , Exception ? > logMessage , long startingTimestamp , Activity ? activity , IOBehavior ioBehavior , CancellationToken cancellationToken )
421421 {
422422 var session = new ServerSession ( m_connectionLogger , this , m_generation , Interlocked . Increment ( ref m_lastSessionId ) ) ;
423423 if ( m_logger . IsEnabled ( LogLevel . Debug ) )
424424 logMessage ( m_logger , Id , session . Id , null ) ;
425425 string ? statusInfo ;
426426 try
427427 {
428- statusInfo = await session . ConnectAsync ( ConnectionSettings , connection , startTickCount , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
428+ statusInfo = await session . ConnectAsync ( ConnectionSettings , connection , startingTimestamp , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
429429 }
430430 catch ( Exception )
431431 {
@@ -452,7 +452,7 @@ private async ValueTask<ServerSession> ConnectSessionAsync(MySqlConnection conne
452452 var redirectedSession = new ServerSession ( m_connectionLogger , this , m_generation , Interlocked . Increment ( ref m_lastSessionId ) ) ;
453453 try
454454 {
455- await redirectedSession . ConnectAsync ( redirectedSettings , connection , startTickCount , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
455+ await redirectedSession . ConnectAsync ( redirectedSettings , connection , startingTimestamp , m_loadBalancer , activity , ioBehavior , cancellationToken ) . ConfigureAwait ( false ) ;
456456 }
457457 catch ( Exception ex )
458458 {
0 commit comments