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

Hang / race condition in QFileSystemWatcher

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • P1: Critical
    • 4.7.0
    • 4.6.0
    • Other
    • None
    • f36a907c40ebe6e22af141946ab8ef405ce3efb8

    Description

      Change 6130b2137d causes stop() to wait until the worker thread leaves run(). run() calls updateFiles(), which might call stop() ...

       
      
      Sampling process 59567 for 3 seconds with 1 millisecond of run time between samples
      Sampling completed, processing symbols...
      Analysis of sampling Qt Creator (pid 59567) every 1 millisecond
      Call graph:
          2212 Thread_3838830   DispatchQueue_1: com.apple.main-thread  (serial)
            2212 start
              2212 main
                2212 ExtensionSystem::PluginManager::~PluginManager()
                  2212 ExtensionSystem::Internal::PluginManagerPrivate::~PluginManagerPrivate()
                    2212 ExtensionSystem::Internal::PluginManagerPrivate::stopAll()
                      2212 ExtensionSystem::Internal::PluginManagerPrivate::loadPlugin(ExtensionSystem::PluginSpec*, ExtensionSystem::PluginSpec::State)
                        2212 ExtensionSystem::Internal::PluginSpecPrivate::stop()
                          2212 ProjectExplorer::ProjectExplorerPlugin::shutdown()
                            2212 ProjectExplorer::SessionManager::clear()
                              2212 ProjectExplorer::SessionManager::removeProjects(QList<ProjectExplorer::Project*>)
                                2212 Qt4ProjectManager::Qt4Project::~Qt4Project()
                                  2212 ProjectExplorer::Project::~Project()
                                    2212 QObject::~QObject()
                                      2212 QObjectPrivate::deleteChildren()
                                        2212 Qt4ProjectManager::Internal::Qt4ProFileNode::~Qt4ProFileNode()
                                          2212 Qt4ProjectManager::Internal::Qt4PriFileNode::~Qt4PriFileNode()
                                            2212 ProjectExplorer::ProjectNode::~ProjectNode()
                                              2212 ProjectExplorer::FolderNode::~FolderNode()
                                                2212 ProjectExplorer::Node::~Node()
                                                  2212 QObject::~QObject()
                                                    2212 QObjectPrivate::deleteChildren()
                                                      2212 Qt4ProjectManager::Internal::Qt4PriFile::~Qt4PriFile()
                                                        2212 Core::IFile::~IFile()
                                                          2212 QObject::~QObject()
                                                            2212 QObject::destroyed(QObject*)
                                                              2212 QMetaObject::activate(QObject*, QMetaObject const*, int, void**)
                                                                2212 Core::FileManager::qt_metacall(QMetaObject::Call, int, void**)
                                                                  2212 Core::FileManager::fileDestroyed(QObject*)
                                                                    2212 Core::FileManager::removeFileInfo(Core::IFile*)
                                                                      2212 Core::FileManager::removeFileInfo(QString const&, Core::IFile*)
                                                                        2212 QFileSystemWatcher::removePath(QString const&)
                                                                          2212 QFileSystemWatcher::removePaths(QStringList const&)
                                                                            2212 QFSEventsFileSystemWatcherEngine::removePaths(QStringList const&, QStringList*, QStringList*)
                                                                              2212 QWaitCondition::wait(QMutex*, unsigned long)
                                                                                2212 _pthread_cond_wait
                                                                                  2212 __semwait_signal
          2212 Thread_3838833   DispatchQueue_2: com.apple.libdispatch-manager  (serial)
            2212 start_wqthread
              2212 _pthread_wqthread
                2212 _dispatch_worker_thread2
                  2212 _dispatch_queue_invoke
                    2212 _dispatch_mgr_invoke
                      2212 kevent
          2212 Thread_3838843
            2212 thread_start
              2212 _pthread_start
                2212 __CFSocketManager
                  2212 select$DARWIN_EXTSN
          2212 Thread_3838844
            2212 thread_start
              2212 _pthread_start
                2212 ne7ssh::selectThread(void*)
                  2190 usleep
                    2186 nanosleep
                      2184 __semwait_signal
                      2 __spin_lock
                    2 cerror
                      1 cerror
                      1 cthread_set_errno_self
                    2 dyld_stub___error
                  14 __bzero
                  3 ne7ssh::lock()
                    3 Ne7ssh_Mutex::lock()
                      3 pthread_mutex_lock
                        2 pthread_mutex_lock
                        1 _spin_lock
                  3 ne7ssh::unlock()
                    3 Ne7ssh_Mutex::unlock()
                      2 __spin_lock
                      1 pthread_mutex_unlock
                  2 ne7ssh::selectThread(void*)
          2212 Thread_3838845
            2212 thread_start
              2212 _pthread_start
                2212 QThreadPrivate::start(void*)
                  2212 QProcessManager::run()
                    2212 select$DARWIN_EXTSN
          2212 Thread_3838847
            2212 thread_start
              2212 _pthread_start
                2212 QTWTF::TCMalloc_PageHeap::runScavengerThread(void*)
                  2212 QTWTF::TCMalloc_PageHeap::scavengerThread()
                    2212 _pthread_cond_wait
                      2212 __semwait_signal
          2212 Thread_3838848
            2212 thread_start
              2212 _pthread_start
                2212 WTF::TCMalloc_PageHeap::runScavengerThread(void*)
                  2212 WTF::TCMalloc_PageHeap::scavengerThread()
                    2212 _pthread_cond_wait
                      2212 __semwait_signal
          2212 Thread_3856403
            2212 thread_start
              2212 _pthread_start
                2212 QThreadPrivate::start(void*)
                  2212 QFSEventsFileSystemWatcherEngine::run()
                    2212 QFSEventsFileSystemWatcherEngine::updateFiles()
                      2212 QFSEventsFileSystemWatcherEngine::stop()
                        2212 QMutex::lock()
                          2212 QMutexPrivate::wait(int)
                            2212 _pthread_cond_wait
                              2212 __semwait_signal
      
      Total number in stack (recursive counted multiple, when >=5):
              6       _pthread_start
              6       thread_start
              5       __semwait_signal
      
      Sort by top of stack, same collapsed (when >= 5):
              __semwait_signal        11032
              select$DARWIN_EXTSN        4424
              kevent        2212
              __bzero        14
      Sample analysis of process 59567 written to file /dev/stdout
      
      

      Attachments

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

        Activity

          People

            sorvig Morten Sørvig
            sorvig Morten Sørvig
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Gerrit Reviews

                There are no open Gerrit changes