Preventing recursive calls of Scheduler::spin()

This commit is contained in:
Pavel Kirienko
2014-03-27 14:03:05 +04:00
parent 5157f9182e
commit f30b071fcf
2 changed files with 11 additions and 0 deletions
@@ -70,6 +70,7 @@ class Scheduler : Noncopyable
MonotonicTime prev_cleanup_ts_;
MonotonicDuration deadline_resolution_;
MonotonicDuration cleanup_period_;
bool inside_spin_;
MonotonicTime computeDispatcherSpinDeadline(MonotonicTime spin_deadline) const;
void pollCleanup(MonotonicTime mono_ts, uint32_t num_frames_processed_with_last_spin);
@@ -80,6 +81,7 @@ public:
, prev_cleanup_ts_(sysclock.getMonotonic())
, deadline_resolution_(MonotonicDuration::fromMSec(DefaultDeadlineResolutionMs))
, cleanup_period_(MonotonicDuration::fromMSec(DefaultCleanupPeriodMs))
, inside_spin_(false)
{ }
int spin(MonotonicTime deadline);
+9
View File
@@ -154,6 +154,13 @@ void Scheduler::pollCleanup(MonotonicTime mono_ts, uint32_t num_frames_processed
int Scheduler::spin(MonotonicTime deadline)
{
if (inside_spin_) // Preventing recursive calls
{
assert(0);
return -1;
}
inside_spin_ = true;
int retval = 0;
while (true)
{
@@ -171,6 +178,8 @@ int Scheduler::spin(MonotonicTime deadline)
break;
}
}
inside_spin_ = false;
return retval;
}