Uploaded image for project: 'Thrift'
  1. Thrift
  2. THRIFT-465

ThreadFactoryTests.h increments iterator after erasing the element to which it refers

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 0.1
    • 0.2
    • Test Suite
    • None
    • Mac OS X 10.5.6

    • Patch Available

    Description

      In lib/cpp/src/consurrency/test/ThreadFactoryTests.h the reapNThreads() function has this loop:
      for (std::set<shared_ptr<Thread> >::const_iterator thread = threads.begin(); thread != threads.end(); thread++)

      { threads.erase(*thread); }

      but erasing the element from the container invalidates all iteratots that point to that element, so this may result in undefined behavior.

      I believe the equivalent is this:
      while (!threads.empty())

      { threads.erase (*(threads.begin())); }

      although it really seems like you could just call threads.clear() as well and forgo the loop. But maybe there's some subtlety here that I'm missing.

      Attachments

        1. ThreadFactoryTestsPatch.txt
          0.7 kB
          Rush Manbert

        Activity

          People

            Unassigned Unassigned
            rush Rush Manbert
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: