< Summary

Information
Class: Ice.Internal.RequestHandlerCache
Assembly: Ice
File(s): /_/csharp/src/Ice/Internal/RequestHandlerCache.cs
Tag: 91_21789722663
Line coverage
96%
Covered lines: 29
Uncovered lines: 1
Coverable lines: 30
Total lines: 85
Line coverage: 96.6%
Branch coverage
87%
Covered branches: 14
Total branches: 16
Branch coverage: 87.5%
Method coverage
100%
Covered methods: 4
Total methods: 4
Method coverage: 100%

Metrics

MethodBranch coverage Crap Score Cyclomatic complexity Line coverage
get_requestHandler()100%88100%
get_cachedConnection()50%4.05485.71%
.ctor(...)100%11100%
clearCachedRequestHandler(...)100%44100%

File(s)

/_/csharp/src/Ice/Internal/RequestHandlerCache.cs

#LineLine coverage
 1// Copyright (c) ZeroC, Inc.
 2
 3#nullable enable
 4
 5namespace Ice.Internal;
 6
 7internal sealed class RequestHandlerCache
 8{
 9    internal RequestHandler? requestHandler
 10    {
 11        get
 12        {
 113            if (_cacheConnection)
 14            {
 115                lock (_mutex)
 16                {
 117                    if (_cachedRequestHandler != null)
 18                    {
 119                        return _cachedRequestHandler;
 20                    }
 121                }
 22            }
 23
 124            RequestHandler handler = _reference.getRequestHandler();
 125            if (_cacheConnection)
 26            {
 127                lock (_mutex)
 28                {
 129                    _cachedRequestHandler ??= handler;
 30                    // else ignore handler
 131                    return _cachedRequestHandler;
 32                }
 33            }
 34            else
 35            {
 136                return handler;
 37            }
 138        }
 39    }
 40
 41    internal Connection? cachedConnection
 42    {
 43        get
 44        {
 145            if (_cacheConnection)
 46            {
 47                RequestHandler? handler;
 148                lock (_mutex)
 49                {
 150                    handler = _cachedRequestHandler;
 151                }
 152                if (handler is not null)
 53                {
 154                    return handler.getConnection();
 55                }
 56            }
 057            return null;
 58        }
 59    }
 60
 61    private readonly Reference _reference;
 62    private readonly bool _cacheConnection;
 163    private readonly object _mutex = new();
 64    private RequestHandler? _cachedRequestHandler;
 65
 166    internal RequestHandlerCache(Reference reference)
 67    {
 168        _reference = reference;
 169        _cacheConnection = reference.getCacheConnection();
 170    }
 71
 72    internal void clearCachedRequestHandler(RequestHandler handler)
 73    {
 174        if (_cacheConnection)
 75        {
 176            lock (_mutex)
 77            {
 178                if (handler == _cachedRequestHandler)
 79                {
 180                    _cachedRequestHandler = null;
 81                }
 182            }
 83        }
 184    }
 85}