Merge pull request #180 from vibe-d/fix_yieldlock_destruction

Make sure that an uninitialized YieldLock does not decrement the lock counter
merged-on-behalf-of: Sönke Ludwig <s-ludwig@users.noreply.github.com>
This commit is contained in:
The Dlang Bot 2019-09-27 16:51:56 +02:00 committed by GitHub
commit b976519057
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1201,12 +1201,12 @@ private struct TimerCallbackHandler(CALLABLE) {
auto yieldLock()
@safe nothrow {
static struct YieldLock {
@safe nothrow:
@safe nothrow:
private bool m_initialized;
private this(bool) { inc(); }
@disable this();
private this(bool) { m_initialized = true; inc(); }
@disable this(this);
~this() { dec(); }
~this() { if (m_initialized) dec(); }
private void inc()
{
@ -1215,6 +1215,7 @@ auto yieldLock()
private void dec()
{
assert(TaskFiber.getThis().m_yieldLockCount > 0);
TaskFiber.getThis().m_yieldLockCount--;
}
}
@ -1235,6 +1236,12 @@ unittest {
assert(tf.m_yieldLockCount == 1);
}
assert(tf.m_yieldLockCount == 0);
{
typeof(yieldLock()) l;
assert(tf.m_yieldLockCount == 0);
}
assert(tf.m_yieldLockCount == 0);
}