Files
2026-06-04 11:42:34 +02:00

104 lines
2.1 KiB
C#

using System;
using System.Runtime.InteropServices;
using System.Threading;
namespace System
{
/// <summary>Encapsulates a memory slot to store local data. This class cannot be inherited.</summary>
/// <filterpriority>2</filterpriority>
// Token: 0x02000680 RID: 1664
[ComVisible(true)]
public sealed class LocalDataStoreSlot
{
// Token: 0x06003EF8 RID: 16120 RVA: 0x000D529C File Offset: 0x000D349C
internal LocalDataStoreSlot(bool in_thread)
{
this.thread_local = in_thread;
object obj = LocalDataStoreSlot.lock_obj;
lock (obj)
{
bool[] array;
if (in_thread)
{
array = LocalDataStoreSlot.slot_bitmap_thread;
}
else
{
array = LocalDataStoreSlot.slot_bitmap_context;
}
int i;
if (array != null)
{
for (i = 0; i < array.Length; i++)
{
if (!array[i])
{
this.slot = i;
array[i] = true;
return;
}
}
bool[] array2 = new bool[i + 2];
array.CopyTo(array2, 0);
array = array2;
}
else
{
array = new bool[2];
i = 0;
}
array[i] = true;
this.slot = i;
if (in_thread)
{
LocalDataStoreSlot.slot_bitmap_thread = array;
}
else
{
LocalDataStoreSlot.slot_bitmap_context = array;
}
}
}
// Token: 0x06003EFA RID: 16122 RVA: 0x000D5384 File Offset: 0x000D3584
protected override void Finalize()
{
try
{
Thread.FreeLocalSlotValues(this.slot, this.thread_local);
object obj = LocalDataStoreSlot.lock_obj;
lock (obj)
{
if (this.thread_local)
{
LocalDataStoreSlot.slot_bitmap_thread[this.slot] = false;
}
else
{
LocalDataStoreSlot.slot_bitmap_context[this.slot] = false;
}
}
}
finally
{
base.Finalize();
}
}
// Token: 0x04001925 RID: 6437
internal int slot;
// Token: 0x04001926 RID: 6438
internal bool thread_local;
// Token: 0x04001927 RID: 6439
private static object lock_obj = new object();
// Token: 0x04001928 RID: 6440
private static bool[] slot_bitmap_thread;
// Token: 0x04001929 RID: 6441
private static bool[] slot_bitmap_context;
}
}