/// actually run the callbacks.
private volatile int m_threadIDExecutingCallbacks = -1;
- private bool m_disposed;
+ private int m_disposed;
private CancellationTokenRegistration [] m_linkingRegistrations; //lazily initialized if required.
/// </summary>
internal bool IsDisposed
{
- get { return m_disposed; }
+ get { return m_disposed == 1; }
}
/// <summary>
// mutates a sparseArrayFragment and then reads from properties of the CTS that are not
// invalidated by cts.Dispose().
- if (m_disposed)
+ if (m_disposed != 0 || Interlocked.CompareExchange (ref m_disposed, 1, 0) != 0)
return;
if (m_timer != null) m_timer.Dispose();
m_kernelEvent.Close(); // the critical cleanup to release an OS handle
m_kernelEvent = null; // free for GC.
}
-
- m_disposed = true;
}
}
#endif
internal void ThrowIfDisposed()
{
- if (m_disposed)
+ if (m_disposed == 1)
ThrowObjectDisposedException();
}