From 4a82f5ff9e3d88e333cce43f19eb8685ee124e3e Mon Sep 17 00:00:00 2001 From: Pixel Date: Fri, 14 Oct 2011 00:46:44 -0700 Subject: Making sure that external task yields are able to complete their subactions. Hence removing a few now unnecessary asserts. --- includes/Task.h | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'includes/Task.h') diff --git a/includes/Task.h b/includes/Task.h index c4d9a46..1fca27e 100644 --- a/includes/Task.h +++ b/includes/Task.h @@ -71,7 +71,14 @@ class Task { virtual const char * getName() = 0; Status getStatus() { return m_status; } static Task * getCurrentTask(); - static void yield(Events::BaseEvent * evt) { Task * t = getCurrentTask(); t->waitFor(evt, true); t->yield(true); } + static void yield(Events::BaseEvent * evt, bool interruptible = false) { + Task * t = getCurrentTask(); + t->waitFor(evt, true); + + do { + t->yield(true); + } while (!interruptible && !evt->gotSignal()); + } TaskMan * getTaskMan() { return m_taskMan; } struct ev_loop * getLoop(); protected: -- cgit v1.2.3