Github user Typz commented on a diff in the pull request:

    https://github.com/apache/thrift/pull/1337#discussion_r137808236
  
    --- Diff: lib/cpp/src/thrift/concurrency/TimerManager.cpp ---
    @@ -290,11 +292,23 @@ void TimerManager::add(shared_ptr<Runnable> task, 
const struct timeval& value) {
     }
     
     void TimerManager::remove(shared_ptr<Runnable> task) {
    -  (void)task;
       Synchronized s(monitor_);
       if (state_ != TimerManager::STARTED) {
         throw IllegalStateException();
       }
    +  std::vector<task_iterator> toRemove;
    +  for (task_iterator ix = taskMap_.begin(); ix != taskMap_.end(); ++ix) {
    +    if (ix->second->runnable() == task) {
    +      toRemove.push_back(ix);
    +    }
    +  }
    +  if (toRemove.empty()) {
    +    throw NoSuchTaskException();
    +  }
    +  for (std::vector<task_iterator>::iterator ix = toRemove.begin(); ix != 
toRemove.end(); ++ix) {
    +    taskMap_.erase(*ix);
    --- End diff --
    
    Tasks cannot exist multiple times, only newly allocated tasks are inserted:
    ```cpp
      taskMap_.insert(
            std::pair<int64_t, shared_ptr<Task> >(timeout, shared_ptr<Task>(new 
Task(task))));
    ```
    
    Which is why I implemented it in the same fashion as the run() method. But 
i can change it.


---

Reply via email to