On 14/02/2022 10:43, Alex Peshkoff via Firebird-devel wrote: > > - AST (yes, 'A'-async is wrong tday, but I use traditional term) processing
That is the part I was missing, thanks. BTW in thread_db::reschedule() we have: ----- void thread_db::reschedule() { // Somebody has kindly offered to relinquish // control so that somebody else may run checkCancelState(); StableAttachmentPart::Sync* sync = this->getAttachment()->getStable()->getSync(); Database* dbb = this->getDatabase(); if (sync->hasContention()) { FB_UINT64 cnt = sync->getLockCounter(); EngineCheckout cout(this, FB_FUNCTION); Thread::yield(); while (sync->hasContention() && (sync->getLockCounter() == cnt)) Thread::sleep(1); } checkCancelState(); Monitoring::checkState(this); if (tdbb_quantum <= 0) tdbb_quantum = (tdbb_flags & TDBB_sweeper) ? SWEEP_QUANTUM : QUANTUM; } ----- Should not the checkCancelState() be better inside the "if (sync->hasContention())" as the no contention case just checked it? Adriano Firebird-Devel mailing list, web interface at https://lists.sourceforge.net/lists/listinfo/firebird-devel