CreateSession() private method

private CreateSession ( ) : System.Data.SqlClient.TdsParserStateObject
return System.Data.SqlClient.TdsParserStateObject
Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        internal TdsParserStateObject GetSession(object owner)
        {
            TdsParserStateObject session;
            bool createSession = false;

            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 on
                    session       = null;
                    createSession = true;
                }
            }

            if (createSession)
            {
                _parser.Connection._parserLock.Wait(canReleaseFromAnyThread: false);
                try
                {
                    session = _parser.CreateSession();
                }
                finally
                {
                    _parser.Connection._parserLock.Release();
                }

                lock (_cache)
                {
                    _cache.Add(session);
                }
            }

            session.Activate(owner);

            return(session);
        }
        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();

                    if (Bid.AdvancedOn)
                    {
                        Bid.Trace("<sc.TdsParserSessionPool.CreateSession|ADV> %d# adding session %d to pool\n", ObjectID, session.ObjectID);
                    }

                    _cache.Add(session);
                    _cachedCount = _cache.Count;
                }

                session.Activate(owner);
            }

            if (Bid.AdvancedOn)
            {
                Bid.Trace("<sc.TdsParserSessionPool.GetSession|ADV> %d# using session %d\n", ObjectID, session.ObjectID);
            }

            return(session);
        }