From 5154e80b61bc5678cd1ce6018fd52b023c4b9079 Mon Sep 17 00:00:00 2001 From: Pixel Date: Tue, 15 Nov 2011 11:52:54 -0800 Subject: Moving the static yield from Task.h to Task.cc. You don't want to throw an exception from a .h file... --- src/Task.cc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/Task.cc') diff --git a/src/Task.cc b/src/Task.cc index ad481cc..3772dd5 100644 --- a/src/Task.cc +++ b/src/Task.cc @@ -149,3 +149,18 @@ void Balau::Events::Async::gotOwner(Task * task) { void Balau::Events::Custom::gotOwner(Task * task) { m_loop = task->getLoop(); } + +void Balau::Task::yield(Events::BaseEvent * evt, bool interruptible) throw (GeneralException) { + Task * t = getCurrentTask(); + t->waitFor(evt); + + do { + t->yield(); + Printer::elog(E_TASK, "operation back from yielding; interruptible = %s; okayToEAgain = %s", interruptible ? "true" : "false", t->m_okayToEAgain ? "true" : "false"); + } while ((!interruptible || !t->m_okayToEAgain) && !evt->gotSignal()); + + if (interruptible && t->m_okayToEAgain && !evt->gotSignal()) { + Printer::elog(E_TASK, "operation is throwing an exception."); + throw EAgain(evt); + } +} -- cgit v1.2.3