Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-23961

adopted thread watcher can't clean up its own thread data

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Not Evaluated Not Evaluated
    • 4.8.2
    • 5.0.0
    • Core: Threads
    • None
    • windows 7 x64 sp1
      vs2010 sp1
    • 91cf813c816582188ef8943b29338c3db06d1133 (4.8)

      adopted thread watcher is responsible for clean up thread data of all other adopted thread, but it can not clean up the thread data of its own.
      qt_adopted_thread_watcher_function() will call the following functions to finish an exited adopted thread:
      thread_p->finish(thread); --> QCoreApplication::sendPostedEvents(0, QEvent::DeferredDelete); --> QThreadData *data = QThreadData::current();
      As a result of this, adopted thread wather will create its own thread data and its own QAdoptedThread object in QThreadData::current(); and add it to the watch list. Thus the adopted thread watcher thread can't exit because the only exit condition is "qt_adopted_thread_handles.count() == 1" which will never meet. Thus the adopted thread wather's thread data can't be cleaned up and the watcher thread also can't exit.

        For Gerrit Dashboard: QTBUG-23961
        # Subject Branch Project Status CR V

            Unassigned Unassigned
            jianliang79 liang jian
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes