UnreferenceDisposable made slimmer (#627)

This commit is contained in:
Szymon Kulec 2025-07-18 20:36:08 +02:00 • committed by GitHub
commit bd5aef6020
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -25,13 +25,15 @@ internal sealed class HttpMcpSession<TTransport>(
public bool IsActive => !SessionClosed.IsCancellationRequested && _referenceCount > 0; public bool IsActive => !SessionClosed.IsCancellationRequested && _referenceCount > 0;
public long LastActivityTicks { get; private set; } = timeProvider.GetTimestamp(); public long LastActivityTicks { get; private set; } = timeProvider.GetTimestamp();
private TimeProvider TimeProvider => timeProvider;
public IMcpServer? Server { get; set; } public IMcpServer? Server { get; set; }
public Task? ServerRunTask { get; set; } public Task? ServerRunTask { get; set; }
public IDisposable AcquireReference() public IDisposable AcquireReference()
{ {
Interlocked.Increment(ref _referenceCount); Interlocked.Increment(ref _referenceCount);
return new UnreferenceDisposable(this, timeProvider); return new UnreferenceDisposable(this);
} }
public bool TryStartGetRequest() => Interlocked.Exchange(ref _getRequestStarted, 1) == 0; public bool TryStartGetRequest() => Interlocked.Exchange(ref _getRequestStarted, 1) == 0;
@ -70,13 +72,13 @@ internal sealed class HttpMcpSession<TTransport>(
public bool HasSameUserId(ClaimsPrincipal user) public bool HasSameUserId(ClaimsPrincipal user)
=> UserIdClaim == StreamableHttpHandler.GetUserIdClaim(user); => UserIdClaim == StreamableHttpHandler.GetUserIdClaim(user);
private sealed class UnreferenceDisposable(HttpMcpSession<TTransport> session, TimeProvider timeProvider) : IDisposable private sealed class UnreferenceDisposable(HttpMcpSession<TTransport> session) : IDisposable
{ {
public void Dispose() public void Dispose()
{ {
if (Interlocked.Decrement(ref session._referenceCount) == 0) if (Interlocked.Decrement(ref session._referenceCount) == 0)
{ {
session.LastActivityTicks = timeProvider.GetTimestamp(); session.LastActivityTicks = session.TimeProvider.GetTimestamp();
} }
} }
} }