Changeset 869


Ignore:
Timestamp:
May 26, 2011, 10:21:28 PM (14 years ago)
Author:
Dmitry A. Kuminov
Message:

core: Fixed QFileSystemWatcher regression after merging Qt 4.7 that could result in hangs when working with file dialogs etc.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/corelib/io/qfilesystemwatcher.cpp

    r846 r869  
    171171                emit directoryChanged(path, true);
    172172            } else if (x.value() != fi) {
    173                 x.value() = fi;
    174                 emit directoryChanged(path, false);
     173                fi.refresh();
     174                if (!fi.exists()) {
     175                    dit.remove();
     176                    emit directoryChanged(path, true);
     177                } else {
     178                    x.value() = fi;
     179                    emit directoryChanged(path, false);
     180                }
    175181            }
    176182            yieldCurrentThread();
     
    250256{
    251257    QMutexLocker locker(&mutex);
    252     QMutableHashIterator<QString, FileInfo> fit(files);
    253     while (fit.hasNext()) {
    254         QHash<QString, FileInfo>::iterator x = fit.next();
    255         QString path = x.key();
    256         QFileInfo fi(path);
    257         if (!fi.exists()) {
    258             fit.remove();
    259             emit fileChanged(path, true);
    260         } else if (x.value() != fi) {
    261             x.value() = fi;
    262             emit fileChanged(path, false);
    263         }
    264     }
    265     QMutableHashIterator<QString, FileInfo> dit(directories);
    266     while (dit.hasNext()) {
    267         QHash<QString, FileInfo>::iterator x = dit.next();
    268         QString path = x.key();
    269         QFileInfo fi(path);
    270         if (!path.endsWith(QLatin1Char('/')))
    271             fi = QFileInfo(path + QLatin1Char('/'));
    272         if (!fi.exists()) {
    273             dit.remove();
    274             emit directoryChanged(path, true);
    275         } else if (x.value() != fi) {
    276             fi.refresh();
    277             if (!fi.exists()) {
    278                 dit.remove();
    279                 emit directoryChanged(path, true);
    280             } else {
    281                 x.value() = fi;
    282                 emit directoryChanged(path, false);
    283             }
    284         }
    285        
    286     }
     258    startOver = true;
     259    askedToFinish = true;
     260    waitCond.wakeAll();
    287261}
    288262
Note: See TracChangeset for help on using the changeset viewer.