zlomek commented on code in PR #379:
URL: https://github.com/apache/qpid-proton/pull/379#discussion_r1482476356


##########
cpp/src/proactor_container_impl.cpp:
##########
@@ -532,7 +540,13 @@ void container::impl::run_timer_jobs() {
     // We've now taken the tasks to run from the deferred tasks
     // so we can run them unlocked
     // NB. We copied the due tasks in reverse order so execute from end
-    for (int i = tasks.size()-1; i>=0; --i) tasks[i].task();
+
+    for (int i = tasks.size()-1; i>=0; --i) {
+        if(is_active_.count(tasks[i].w_handle)) {
+            tasks[i].task();
+            is_active_.erase(tasks[i].w_handle);

Review Comment:
   ```
   void container::impl::run_timer_jobs() {
       std::vector<work> tasks;
   
       // We first extract all the runnable tasks and then run them -  this is 
to avoid having tasks
       // injected as we are running them (which could potentially never end)
       {
           GUARD(deferred_lock_);
   
           // Figure out how many tasks we need to execute and pop them to the 
back of the queue
           for (timestamp now = timestamp::now(); deferred_.size() > 0; 
deferred_.pop_back()) {
               // Is the next task in the future?
               timestamp next_time = deferred_.front().time;
               if ( next_time>now ) {
                   pn_proactor_set_timeout(proactor_, 
(next_time-now).milliseconds());
                   break;
               }
   
               std::pop_heap(deferred_.begin(), deferred_.end());
   
               if (is_active_.erase(deferred_.back().w_handle))
                   tasks.push_back(std::move(deferred_.back().task));
           }
       }
   
       // We've now taken the tasks to run from the deferred tasks
       // so we can run them unlocked
       for (work task : tasks) task();
   }
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org
For additional commands, e-mail: dev-h...@qpid.apache.org

Reply via email to