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

    https://github.com/apache/thrift/pull/1337#discussion_r137163331
  
    --- Diff: lib/cpp/test/concurrency/TimerManagerTests.h ---
    @@ -126,6 +126,38 @@ class TimerManagerTests {
         return true;
       }
     
    +  /**
    +   * This test creates two tasks, removes the first one then waits for the 
second one. It then
    +   * verifies that the timer manager properly clean up itself and the 
remaining orphaned timeout
    +   * task when the manager goes out of scope and its destructor is called.
    +   */
    +  bool test01(int64_t timeout = 1000LL) {
    +    TimerManager timerManager;
    +    timerManager.threadFactory(shared_ptr<PlatformThreadFactory>(new 
PlatformThreadFactory()));
    +    timerManager.start();
    +    assert(timerManager.state() == TimerManager::STARTED);
    +
    +    Synchronized s(_monitor);
    +
    +    // Setup the two tasks
    +    shared_ptr<TimerManagerTests::Task> taskToRemove
    +      = shared_ptr<TimerManagerTests::Task>(new 
TimerManagerTests::Task(_monitor, timeout / 2));
    +    timerManager.add(taskToRemove, taskToRemove->_timeout);
    +
    +    shared_ptr<TimerManagerTests::Task> task
    +      = shared_ptr<TimerManagerTests::Task>(new 
TimerManagerTests::Task(_monitor, timeout));
    +    timerManager.add(task, task->_timeout);
    +
    +    // Remove one task and wait until the other has completed
    +    timerManager.remove(taskToRemove);
    +    _monitor.wait(timeout * 2);
    +
    +    assert(!taskToRemove->_done);
    +    assert(task->_done);
    +
    +    return true;
    +  }
    +
    --- End diff --
    
    Recommend you add a test to remove the same task that's been added to the 
timerManager more than once.


---

Reply via email to