1010
1111using erizo::Worker;
1212using erizo::SimulatedWorker;
13+ using erizo::ScheduledTaskReference;
14+
15+ ScheduledTaskReference::ScheduledTaskReference () : cancelled{false } {
16+ }
17+
18+ bool ScheduledTaskReference::isCancelled () {
19+ return cancelled;
20+ }
21+ void ScheduledTaskReference::cancel () {
22+ cancelled = true ;
23+ }
1324
1425Worker::Worker (std::weak_ptr<Scheduler> scheduler, std::shared_ptr<Clock> the_clock)
1526 : scheduler_{scheduler},
@@ -50,21 +61,22 @@ void Worker::close() {
5061 service_.stop ();
5162}
5263
53- int Worker::scheduleFromNow (Task f, duration delta) {
64+ std::shared_ptr<ScheduledTaskReference> Worker::scheduleFromNow (Task f, duration delta) {
5465 auto delta_ms = std::chrono::duration_cast<std::chrono::milliseconds>(delta);
55- int uuid = next_scheduled_++ ;
66+ auto id = std::make_shared<ScheduledTaskReference>() ;
5667 if (auto scheduler = scheduler_.lock ()) {
57- scheduler->scheduleFromNow (safeTask ([f, uuid](std::shared_ptr<Worker> this_ptr) {
58- this_ptr->task (this_ptr->safeTask ([f, uuid](std::shared_ptr<Worker> this_ptr) {
59- std::unique_lock<std::mutex> lock (this_ptr->cancel_mutex_ );
60- if (this_ptr->isCancelled (uuid)) {
61- return ;
68+ scheduler->scheduleFromNow (safeTask ([f, id](std::shared_ptr<Worker> this_ptr) {
69+ this_ptr->task (this_ptr->safeTask ([f, id](std::shared_ptr<Worker> this_ptr) {
70+ {
71+ if (id->isCancelled ()) {
72+ return ;
73+ }
6274 }
6375 f ();
6476 }));
6577 }), delta_ms);
6678 }
67- return uuid ;
79+ return id ;
6880}
6981
7082void Worker::scheduleEvery (ScheduledTask f, duration period) {
@@ -84,20 +96,8 @@ void Worker::scheduleEvery(ScheduledTask f, duration period, duration next_delay
8496 }), next_delay);
8597}
8698
87- void Worker::unschedule (int uuid) {
88- if (uuid < 0 ) {
89- return ;
90- }
91- std::unique_lock<std::mutex> lock (cancel_mutex_);
92- cancelled_.push_back (uuid);
93- }
94-
95- bool Worker::isCancelled (int uuid) {
96- if (std::find (cancelled_.begin (), cancelled_.end (), uuid) != cancelled_.end ()) {
97- cancelled_.erase (std::remove (cancelled_.begin (), cancelled_.end (), uuid), cancelled_.end ());
98- return true ;
99- }
100- return false ;
99+ void Worker::unschedule (std::shared_ptr<ScheduledTaskReference> id) {
100+ id->cancel ();
101101}
102102
103103std::function<void ()> Worker::safeTask (std::function<void (std::shared_ptr<Worker>)> f) {
@@ -128,15 +128,15 @@ void SimulatedWorker::close() {
128128 tasks_.clear ();
129129}
130130
131- int SimulatedWorker::scheduleFromNow (Task f, duration delta) {
132- int uuid = next_scheduled_++ ;
133- scheduled_tasks_[clock_->now () + delta] = [this , f, uuid ] {
134- if (isCancelled (uuid )) {
131+ std::shared_ptr<ScheduledTaskReference> SimulatedWorker::scheduleFromNow (Task f, duration delta) {
132+ auto id = std::make_shared<ScheduledTaskReference>() ;
133+ scheduled_tasks_[clock_->now () + delta] = [this , f, id ] {
134+ if (id-> isCancelled ()) {
135135 return ;
136136 }
137137 f ();
138138 };
139- return uuid ;
139+ return id ;
140140}
141141
142142void SimulatedWorker::executeTasks () {
0 commit comments