Browse Source

scheduler: further cleanup

skypjack 9 months ago
parent
commit
0cc95c947e
1 changed files with 7 additions and 3 deletions
  1. 7 3
      src/entt/process/scheduler.hpp

+ 7 - 3
src/entt/process/scheduler.hpp

@@ -61,11 +61,15 @@ class basic_scheduler {
     using container_type = std::vector<handler_type, container_allocator>;
 
     bool update(const std::size_t pos, const Delta delta, void *data) {
-        if(handlers.first()[pos].task->tick(delta, data); handlers.first()[pos].task->rejected()) {
-            handlers.first()[pos].next.reset();
+        handlers.first()[pos].task->tick(delta, data);
+        // callbacks can insert or erase tasks, invalidating the reference
+        auto &elem = handlers.first()[pos];
+
+        if(elem.task->rejected()) {
+            elem.next.reset();
         }
 
-        return (handlers.first()[pos].task->rejected() || handlers.first()[pos].task->finished());
+        return (elem.task->rejected() || elem.task->finished());
     }
 
 public: