Merge pull request #840 from KLayout/issue-839

Fixed #839
This commit is contained in:
Matthias Köfferlein 2021-06-18 18:41:57 +02:00 committed by GitHub
commit 7635b784bb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 11 additions and 0 deletions

View File

@ -118,15 +118,26 @@ DeferredMethodScheduler::do_execute ()
// do the execution outside the locked range to avoid deadlocks if the method's execution
// schedules another call.
for (std::list<DeferredMethodBase *>::iterator m = m_executing.begin (); m != m_executing.end (); ++m) {
bool still_valid;
m_lock.lock ();
// during execution a method may be unqueued - make sure this is not executed
still_valid = (m_unqueued.find (*m) == m_unqueued.end ());
m_lock.unlock ();
if (still_valid) {
(*m)->m_scheduled = false;
(*m)->execute ();
// execute() may have triggered another do_execute which we should consider here and stop:
if (m_executing.empty ()) {
break;
}
}
}
m_lock.lock ();