Exemplo n.º 1
0
        [System.Security.SecurityCritical]  // auto-generated
        private void LeaseTimeAnalyzer(Object state)
        {
            //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer Entry ",state);

            // Find expired leases
            DateTime now = DateTime.UtcNow;

            lock (leaseToTimeTable)
            {
                IDictionaryEnumerator e = leaseToTimeTable.GetEnumerator();

                while (e.MoveNext())
                {
                    DateTime time  = (DateTime)e.Value;
                    Lease    lease = (Lease)e.Key;
                    //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer lease ",lease.id, " lease time ", time, " now ", now);
                    if (time.CompareTo(now) < 0)
                    {
                        // lease expired
                        tempObjects.Add(lease);
                    }
                }
                for (int i = 0; i < tempObjects.Count; i++)
                {
                    Lease lease = (Lease)tempObjects[i];
                    //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer lease Expired remove from leaseToTimeTable ",lease.id);
                    leaseToTimeTable.Remove(lease);
                }
            }

            // Need to run this without lock on leaseToTimeTable to avoid deadlock
            for (int i = 0; i < tempObjects.Count; i++)
            {
                Lease lease = (Lease)tempObjects[i];
                //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer lease Expired ",lease.id);
                if (lease != null) // Lease could be deleted if there is more then one reference to the lease
                {
                    lease.LeaseExpired(now);
                }
            }

            tempObjects.Clear();

            lock (sponsorTable)
            {
                IDictionaryEnumerator e = sponsorTable.GetEnumerator();

                while (e.MoveNext())
                {
                    // Check for SponshipTimeOuts
                    Object      sponsorId   = e.Key;
                    SponsorInfo sponsorInfo = (SponsorInfo)e.Value;
                    //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer sponsor time ", sponsorInfo.sponsorWaitTime, " now ", now);
                    if (sponsorInfo.sponsorWaitTime.CompareTo(now) < 0)
                    {
                        // Sponsortimeout expired expired
                        tempObjects.Add(sponsorInfo);
                    }
                }

                // Process the timed out sponsors
                for (int i = 0; i < tempObjects.Count; i++)
                {
                    SponsorInfo sponsorInfo = (SponsorInfo)tempObjects[i];
                    //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer sponsor Expired remove from spansorTable", sponsorInfo.sponsorId);
                    sponsorTable.Remove(sponsorInfo.sponsorId);
                }
            }

            // Process the timed out sponsors
            // Need to run this without lock on sponsorTable to avoid deadlock
            for (int i = 0; i < tempObjects.Count; i++)
            {
                SponsorInfo sponsorInfo = (SponsorInfo)tempObjects[i];
                //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer sponsor Expired ", sponsorInfo.sponsorId);
                if (sponsorInfo != null && sponsorInfo.lease != null)
                {
                    sponsorInfo.lease.SponsorTimeout(sponsorInfo.sponsorId);
                    tempObjects[i] = null;
                }
            }

            tempObjects.Clear();
            leaseTimer.Change((int)pollTime.TotalMilliseconds, Timeout.Infinite);

            //BCLDebug.Trace("REMOTE","LeaseManager LeaseTimeAnalyzer Exit");
        }
Exemplo n.º 2
0
        internal void RegisterSponsorCall(Lease lease, Object sponsorId, TimeSpan sponsorshipTimeOut)
        {
            BCLDebug.Trace("REMOTE","LeaseManager RegisterSponsorCall Lease ",lease," sponsorshipTimeOut ",sponsorshipTimeOut);

            lock(sponsorTable)
            {
                DateTime sponsorWaitTime = DateTime.Now.Add(sponsorshipTimeOut);
                sponsorTable[sponsorId] = new SponsorInfo(lease, sponsorId, sponsorWaitTime);
            }
        }
Exemplo n.º 3
0
        private void LeaseTimeAnalyzer(object state)
        {
            DateTime utcNow = DateTime.UtcNow;

            lock (this.leaseToTimeTable)
            {
                IDictionaryEnumerator enumerator = this.leaseToTimeTable.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    DateTime time2 = (DateTime)enumerator.Value;
                    Lease    key   = (Lease)enumerator.Key;
                    if (time2.CompareTo(utcNow) < 0)
                    {
                        this.tempObjects.Add(key);
                    }
                }
                for (int k = 0; k < this.tempObjects.Count; k++)
                {
                    Lease lease2 = (Lease)this.tempObjects[k];
                    this.leaseToTimeTable.Remove(lease2);
                }
            }
            for (int i = 0; i < this.tempObjects.Count; i++)
            {
                Lease lease3 = (Lease)this.tempObjects[i];
                if (lease3 != null)
                {
                    lease3.LeaseExpired(utcNow);
                }
            }
            this.tempObjects.Clear();
            lock (this.sponsorTable)
            {
                IDictionaryEnumerator enumerator2 = this.sponsorTable.GetEnumerator();
                while (enumerator2.MoveNext())
                {
                    object      obj1 = enumerator2.Key;
                    SponsorInfo info = (SponsorInfo)enumerator2.Value;
                    if (info.sponsorWaitTime.CompareTo(utcNow) < 0)
                    {
                        this.tempObjects.Add(info);
                    }
                }
                for (int m = 0; m < this.tempObjects.Count; m++)
                {
                    SponsorInfo info2 = (SponsorInfo)this.tempObjects[m];
                    this.sponsorTable.Remove(info2.sponsorId);
                }
            }
            for (int j = 0; j < this.tempObjects.Count; j++)
            {
                SponsorInfo info3 = (SponsorInfo)this.tempObjects[j];
                if ((info3 != null) && (info3.lease != null))
                {
                    info3.lease.SponsorTimeout(info3.sponsorId);
                    this.tempObjects[j] = null;
                }
            }
            this.tempObjects.Clear();
            this.leaseTimer.Change((int)this.pollTime.TotalMilliseconds, -1);
        }