Ejemplo n.º 1
0
        // Token: 0x06003DD5 RID: 15829 RVA: 0x000E5934 File Offset: 0x000E3B34
        private void SetValueSlow(T value, ThreadLocal <T> .LinkedSlotVolatile[] slotArray)
        {
            int num = ~this.m_idComplement;

            if (num < 0)
            {
                throw new ObjectDisposedException(Environment.GetResourceString("ThreadLocal_Disposed"));
            }
            if (slotArray == null)
            {
                slotArray = new ThreadLocal <T> .LinkedSlotVolatile[ThreadLocal <T> .GetNewTableSize(num + 1)];
                ThreadLocal <T> .ts_finalizationHelper = new ThreadLocal <T> .FinalizationHelper(slotArray, this.m_trackAllValues);

                ThreadLocal <T> .ts_slotArray = slotArray;
            }
            if (num >= slotArray.Length)
            {
                this.GrowTable(ref slotArray, num + 1);
                ThreadLocal <T> .ts_finalizationHelper.SlotArray = slotArray;
                ThreadLocal <T> .ts_slotArray = slotArray;
            }
            if (slotArray[num].Value == null)
            {
                this.CreateLinkedSlot(slotArray, num, value);
                return;
            }
            ThreadLocal <T> .LinkedSlot value2 = slotArray[num].Value;
            if (!this.m_initialized)
            {
                throw new ObjectDisposedException(Environment.GetResourceString("ThreadLocal_Disposed"));
            }
            value2.Value = value;
        }
Ejemplo n.º 2
0
        // Token: 0x06003DDD RID: 15837 RVA: 0x000E5C04 File Offset: 0x000E3E04
        private void GrowTable(ref ThreadLocal <T> .LinkedSlotVolatile[] table, int minLength)
        {
            int newTableSize = ThreadLocal <T> .GetNewTableSize(minLength);

            ThreadLocal <T> .LinkedSlotVolatile[] array = new ThreadLocal <T> .LinkedSlotVolatile[newTableSize];
            ThreadLocal <T> .IdManager            obj   = ThreadLocal <T> .s_idManager;
            lock (obj)
            {
                for (int i = 0; i < table.Length; i++)
                {
                    ThreadLocal <T> .LinkedSlot value = table[i].Value;
                    if (value != null && value.SlotArray != null)
                    {
                        value.SlotArray = array;
                        array[i]        = table[i];
                    }
                }
            }
            table = array;
        }
Ejemplo n.º 3
0
        private void SetValueSlow(T value, ThreadLocal <T> .LinkedSlotVolatile[] slotArray)
        {
            int id = ~this.m_idComplement;

            if (id < 0)
            {
                throw new ObjectDisposedException(Environment.GetResourceString("ThreadLocal_Disposed"));
            }
            if (slotArray == null)
            {
                slotArray = new ThreadLocal <T> .LinkedSlotVolatile[ThreadLocal <T> .GetNewTableSize(id + 1)];
                ThreadLocal <T> .ts_finalizationHelper = new ThreadLocal <T> .FinalizationHelper(slotArray, this.m_trackAllValues);

                ThreadLocal <T> .ts_slotArray = slotArray;
            }
            if (id >= slotArray.Length)
            {
                this.GrowTable(ref slotArray, id + 1);
                ThreadLocal <T> .ts_finalizationHelper.SlotArray = slotArray;
                ThreadLocal <T> .ts_slotArray = slotArray;
            }
            if (slotArray[id].Value == null)
            {
                this.CreateLinkedSlot(slotArray, id, value);
            }
            else
            {
                ThreadLocal <T> .LinkedSlot linkedSlot = slotArray[id].Value;
                if (!this.m_initialized)
                {
                    throw new ObjectDisposedException(Environment.GetResourceString("ThreadLocal_Disposed"));
                }
                T obj = value;
                linkedSlot.Value = obj;
            }
        }
Ejemplo n.º 4
0
 private void GrowTable(ref ThreadLocal <T> .LinkedSlotVolatile[] table, int minLength)
 {
     ThreadLocal <T> .LinkedSlotVolatile[] linkedSlotVolatileArray = new ThreadLocal <T> .LinkedSlotVolatile[ThreadLocal <T> .GetNewTableSize(minLength)];
     lock (ThreadLocal <T> .s_idManager)
     {
         for (int local_3 = 0; local_3 < table.Length; ++local_3)
         {
             ThreadLocal <T> .LinkedSlot local_4 = table[local_3].Value;
             if (local_4 != null && local_4.SlotArray != null)
             {
                 local_4.SlotArray = linkedSlotVolatileArray;
                 linkedSlotVolatileArray[local_3] = table[local_3];
             }
         }
     }
     table = linkedSlotVolatileArray;
 }