internal void PutSession(TdsParserStateObject session) { Debug.Assert (null != session, "null session?"); //Debug.Assert(null != session.Owner, "session without owner?"); bool okToReuse = session.Deactivate(); lock (_cache) { if (IsDisposed) { // We're diposed - just clean out the session Debug.Assert(_cachedCount == 0, "SessionPool is disposed, but there are still sessions in the cache?"); session.Dispose(); } else if ((okToReuse) && (_freeStateObjectCount < MaxInactiveCount)) { // Session is good to re-use and our cache has space if (Bid.AdvancedOn) { Bid.Trace("<sc.TdsParserSessionPool.PutSession|ADV> %d# keeping session %d cachedCount=%d\n", ObjectID, session.ObjectID, _cachedCount); } Debug.Assert(!session._pendingData, "pending data on a pooled session?"); _freeStateObjects[_freeStateObjectCount] = session; _freeStateObjectCount++; } else { // Either the session is bad, or we have no cache space - so dispose the session and remove it if (Bid.AdvancedOn) { Bid.Trace("<sc.TdsParserSessionPool.PutSession|ADV> %d# disposing session %d cachedCount=%d\n", ObjectID, session.ObjectID, _cachedCount); } bool removed = _cache.Remove(session); Debug.Assert(removed, "session not in pool?"); _cachedCount = _cache.Count; session.Dispose(); } session.RemoveOwner(); } }
internal void PutSession(TdsParserStateObject session) { bool flag2 = session.Deactivate(); if (!this.IsDisposed) { if (flag2 && (this._cachedCount < 10)) { if (Bid.AdvancedOn) { Bid.Trace("<sc.TdsParserSessionPool.PutSession|ADV> %d# keeping session %d cachedCount=%d\n", this.ObjectID, session.ObjectID, this._cachedCount); } this._freeStack.SynchronizedPush(session); } else { if (Bid.AdvancedOn) { Bid.Trace("<sc.TdsParserSessionPool.PutSession|ADV> %d# disposing session %d cachedCount=%d\n", this.ObjectID, session.ObjectID, this._cachedCount); } lock (this._cache) { this._cache.Remove(session); this._cachedCount = this._cache.Count; } session.Dispose(); } } }