internal TdsParserStateObject GetSession(object owner)
{
TdsParserStateObject session;
lock (_cache)
{
if (IsDisposed)
{
throw ADP.ClosedConnectionError();
}
else if (_freeStateObjectCount > 0)
{
// Free state object - grab it
_freeStateObjectCount--;
session = _freeStateObjects[_freeStateObjectCount];
_freeStateObjects[_freeStateObjectCount] = null;
Debug.Assert(session != null, "There was a null session in the free session list?");
}
else
{
// No free objects, create a new one
session = _parser.CreateSession();
_cache.Add(session);
_cachedCount = _cache.Count;
}
session.Activate(owner);
}
return(session);
}