static void DeinitThreadLocalVars() { // Notify thread-local variables of termination for (int i = 0; i < _TLVs.Count; i++) { ThreadLocalVariableBase v = _TLVs[i].Target(); if (v != null) { v.Terminate(Thread.CurrentThread.ManagedThreadId); } } }
internal static void RegisterTLV(ThreadLocalVariableBase tlv) { lock (_TLVs) { for (int i = 0; i < _TLVs.Count; i++) { if (!_TLVs[i].IsAlive()) { _TLVs[i].SetTarget(tlv); return; } } _TLVs.Add(new WeakReference <ThreadLocalVariableBase>(tlv)); } }
static bool InheritThreadLocalVars(int parentThreadId) { int threadId; if (!_areThreadVarsInitialized && (threadId = Thread.CurrentThread.ManagedThreadId) != parentThreadId) { _areThreadVarsInitialized = true; for (int i = 0; i < _TLVs.Count; i++) { ThreadLocalVariableBase v = _TLVs[i].Target(); if (v != null) { v.Propagate(parentThreadId, threadId); } } return(true); } return(false); }