Weaken the task double-resumption assertion condition.
This assertion got triggered in a number of harmless situations and it's not always easy to avoid. Trying to avoid it, it has already caused a rather bad task starvation bug (#1441), so at this point it seems to be better to get rid of it. See also #1407 (cherry picked from commit 621e34b388848c762a7525149ea449ad082996a1)
This commit is contained in:
parent
27e0019e44
commit
8f4222916f
|
@ -1274,13 +1274,16 @@ package(vibe) void resumeCoreTask(CoreTask ctask, Exception event_exception = nu
|
|||
nothrow @safe {
|
||||
assert(ctask.thread is () @trusted { return Thread.getThis(); } (), "Resuming task in foreign thread.");
|
||||
assert(() @trusted nothrow { return ctask.state; } () == Fiber.State.HOLD, "Resuming fiber that is not on HOLD");
|
||||
assert(ctask.m_queue is null, "Manually resuming task that is already scheduled to be resumed.");
|
||||
|
||||
if (event_exception) {
|
||||
extrap();
|
||||
assert(!ctask.m_exception, "Resuming task with exception that is already scheduled to be resumed with exception.");
|
||||
ctask.m_exception = event_exception;
|
||||
}
|
||||
|
||||
// do nothing if the task is aready scheduled to be resumed
|
||||
if (ctask.m_queue) return;
|
||||
|
||||
auto uncaught_exception = () @trusted nothrow { return ctask.call!(Fiber.Rethrow.no)(); } ();
|
||||
|
||||
if (uncaught_exception) {
|
||||
|
|
Loading…
Reference in a new issue