This is a multi-part message in MIME format. --------------080002010500050205020608 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit For review (trunk). Maximum number of wait objects per single QFileSystemWatcher is MAXIMUM_WAIT_OBJECTS (64) on Windows. Attached implementation of KFileSystemWatcher. It's a typedef for QFileSystemWatcher, except on Windows, where we allocate more QFileSystemWatcher instances on demand (and deallocate them too). -- regards / pozdrawiam, Jaroslaw Staniek Sponsored by OpenOffice Polska (http://www.openoffice.com.pl/en) to work on Kexi & KOffice (http://www.kexi.pl/en, http://www.koffice.org/kexi) KDE Libraries for MS Windows (http://windows.kde.org) --------------080002010500050205020608 Content-Type: text/x-c++src; name="kdirwatch_win.cpp" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="kdirwatch_win.cpp" /* This file is part of the KDE libraries Copyright (C) 2008 Jaroslaw Staniek This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License version 2 as published by the Free Software Foundation. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "kdirwatch_p.h" #include KFileSystemWatcher::KFileSystemWatcher() : QObject(), m_recentWatcher(0) { } KFileSystemWatcher::~KFileSystemWatcher() { qDeleteAll(m_watchers); } QFileSystemWatcher* KFileSystemWatcher::availableWatcher() { QFileSystemWatcher* watcher = m_recentWatcher; if (!watcher || m_usedObjects.value(watcher) >= MAXIMUM_WAIT_OBJECTS) { uint i = 0; watcher = 0; for (QList::ConstIterator watchersIt(m_watchers.constBegin()); watchersIt!=m_watchers.constEnd(); ++watchersIt, i++) { if (m_usedObjects.value(*watchersIt) < MAXIMUM_WAIT_OBJECTS) { watcher = *watchersIt; m_recentWatcher = watcher; return watcher; } } } if (!watcher) { //new one needed watcher = new QFileSystemWatcher(); connect(watcher, SIGNAL(directoryChanged(QString)), this, SIGNAL(directoryChanged(QString))); connect(watcher, SIGNAL(fileChanged(QString)), this, SIGNAL(fileChanged(QString))); m_watchers.append( watcher ); m_usedObjects.insert(watcher, 0); m_recentWatcher = watcher; } return watcher; } void KFileSystemWatcher::addPath(const QString &file) { QFileSystemWatcher* watcher = availableWatcher(); watcher->addPath(file); m_usedObjects[watcher]++; m_paths.insert(file, watcher); } void KFileSystemWatcher::removePath(const QString &file) { QFileSystemWatcher* watcher = m_paths.value(file); if (!watcher) return; watcher->removePath(file); m_usedObjects[watcher]--; if (m_recentWatcher != watcher) m_recentWatcher = 0; } --------------080002010500050205020608 Content-Type: text/plain; name="kdirwatch.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="kdirwatch.patch" SW5kZXg6IGtpby9raW8va2RpcndhdGNoLmNwcA0KPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGtpby9r aW8va2RpcndhdGNoLmNwcAkod2Vyc2phIDgyOTg3NSkNCisrKyBraW8va2lvL2tkaXJ3YXRj aC5jcHAJKGtvcGlhIHJvYm9jemEpDQpAQCAtNTEsOSArNTEsNiBAQA0KICNpbmNsdWRlIDxR dENvcmUvUUZpbGU+CiAjaW5jbHVkZSA8UXRDb3JlL1FTb2NrZXROb3RpZmllcj4KICNpbmNs dWRlIDxRdENvcmUvUVRpbWVyPgotI2lmZGVmIEhBVkVfUUZJTEVTWVNURU1XQVRDSEVSCi0j aW5jbHVkZSA8UXRDb3JlL1FGaWxlU3lzdGVtV2F0Y2hlcj4KLSNlbmRpZgogCiAjaW5jbHVk ZSA8a2FwcGxpY2F0aW9uLmg+CiAjaW5jbHVkZSA8a2RlYnVnLmg+CkBAIC0yMDIsNyArMTk5 LDcgQEANCiAjZW5kaWYKICNpZmRlZiBIQVZFX1FGSUxFU1lTVEVNV0FUQ0hFUgogICBhdmFp bGFibGVNZXRob2RzIDw8ICJRRmlsZVN5c3RlbVdhdGNoZXIiOwotICBmc1dhdGNoZXIgPSBu ZXcgUUZpbGVTeXN0ZW1XYXRjaGVyKCk7CisgIGZzV2F0Y2hlciA9IG5ldyBLRmlsZVN5c3Rl bVdhdGNoZXIoKTsKICAgY29ubmVjdChmc1dhdGNoZXIsIFNJR05BTChkaXJlY3RvcnlDaGFu Z2VkKFFTdHJpbmcpKSwgdGhpcywgU0xPVChmc3dFdmVudFJlY2VpdmVkKFFTdHJpbmcpKSk7 CiAgIGNvbm5lY3QoZnNXYXRjaGVyLCBTSUdOQUwoZmlsZUNoYW5nZWQoUVN0cmluZykpLCAg ICAgIHRoaXMsIFNMT1QoZnN3RXZlbnRSZWNlaXZlZChRU3RyaW5nKSkpOwogI2VuZGlmCklu ZGV4OiBraW8vQ01ha2VMaXN0cy50eHQNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBraW8vQ01ha2VM aXN0cy50eHQJKHdlcnNqYSA4Mjk4NzUpDQorKysga2lvL0NNYWtlTGlzdHMudHh0CShrb3Bp YSByb2JvY3phKQ0KQEAgLTEyOCw2ICsxMjgsMTIgQEANCiAgICApCiBlbmRpZihVTklYKQog CitpZihXSU4zMikKKyAgIHNldChraW9jb3JlX1NUQVRfU1JDUyAke2tpb2NvcmVfU1RBVF9T UkNTfQorICAgICAgIGtpby9rZGlyd2F0Y2hfd2luLmNwcAorICAgKQorZW5kaWYoV0lOMzIp CisKIHNldChrYm9va21hcmtzX1NUQVRfU1JDUwogICBib29rbWFya3Mva2Jvb2ttYXJrLmNj CiAgIGJvb2ttYXJrcy9rYm9va21hcmtpbXBvcnRlci5jYwpJbmRleDoga2lvL2tpby9rZGly d2F0Y2hfcC5oDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0ga2lvL2tpby9rZGlyd2F0Y2hfcC5oCSh3 ZXJzamEgODI5ODc1KQ0KKysrIGtpby9raW8va2RpcndhdGNoX3AuaAkoa29waWEgcm9ib2N6 YSkNCkBAIC03LDYgKzcsNyBAQA0KICAqIENvcHlyaWdodCAoQykgMTk5OCBTdmVuIFJhZGVq IDxzdmVuQGxpc2EuZXhwLnVuaXZpZS5hYy5hdD4KICAqIENvcHlyaWdodCAoQykgMjAwNiBE aXJrIE11ZWxsZXIgPG11ZWxsZXJAa2RlLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNyBG bGF2aW8gQ2FzdGVsbGkgPGZsYXZpby5jYXN0ZWxsaUBnbWFpbC5jb20+CisgKiBDb3B5cmln aHQgKEMpIDIwMDggSmFyb3NsYXcgU3RhbmllayA8anNAaWlkZWEucGw+CiAgKgogICogVGhp cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg R2VuZXJhbCBQdWJsaWMKQEAgLTYzLDYgKzY0LDQwIEBADQogCiAjZGVmaW5lIGludmFsaWRf Y3RpbWUgKCh0aW1lX3QpLTEpCiAKKyNpZmRlZiBIQVZFX1FGSUxFU1lTVEVNV0FUQ0hFUgor I2luY2x1ZGUgPFF0Q29yZS9RRmlsZVN5c3RlbVdhdGNoZXI+CisKKyNpZiBkZWZpbmVkIFFf V1NfV0lOCisvKiBNYXhpbXVtIG51bWJlciBvZiB3YWl0IG9iamVjdHMgcGVyIHNpbmdsZSBR RmlsZVN5c3RlbVdhdGNoZXIKKyAqIGlzIE1BWElNVU1fV0FJVF9PQkpFQ1RTICg2NCkgb24g V2luZG93cy4gCisgKiBLRmlsZVN5c3RlbVdhdGNoZXIgYWxsb2NhdGVzIG1vcmUgUUZpbGVT eXN0ZW1XYXRjaGVyIGluc3RhbmNlcyBvbiBkZW1hbmQKKyAqIChhbmQgZGVhbGxvY2F0ZXMg dGhlbSkuCisgKi8KK2NsYXNzIEtGaWxlU3lzdGVtV2F0Y2hlciA6IHB1YmxpYyBRT2JqZWN0 Cit7CisgIFFfT0JKRUNUCitwdWJsaWM6CisgIEtGaWxlU3lzdGVtV2F0Y2hlcigpOworICB+ S0ZpbGVTeXN0ZW1XYXRjaGVyKCk7CisgIHZvaWQgYWRkUGF0aChjb25zdCBRU3RyaW5nICZm aWxlKTsKKyAgdm9pZCByZW1vdmVQYXRoKGNvbnN0IFFTdHJpbmcgJmZpbGUpOworCitRX1NJ R05BTFM6CisgICAgdm9pZCBmaWxlQ2hhbmdlZChjb25zdCBRU3RyaW5nICZwYXRoKTsKKyAg ICB2b2lkIGRpcmVjdG9yeUNoYW5nZWQoY29uc3QgUVN0cmluZyAmcGF0aCk7CisKK3ByaXZh dGU6CisgIFFGaWxlU3lzdGVtV2F0Y2hlciogYXZhaWxhYmxlV2F0Y2hlcigpOworICBRRmls ZVN5c3RlbVdhdGNoZXIqIG1fcmVjZW50V2F0Y2hlcjsKKyAgUUxpc3Q8UUZpbGVTeXN0ZW1X YXRjaGVyKj4gbV93YXRjaGVyczsKKyAgUUhhc2g8UUZpbGVTeXN0ZW1XYXRjaGVyKiwgdWlu dD4gbV91c2VkT2JqZWN0czsKKyAgUUhhc2g8UVN0cmluZyxRRmlsZVN5c3RlbVdhdGNoZXIq PiBtX3BhdGhzOworfTsKKyNlbHNlCit0eXBlZGVmIEtGaWxlU3lzdGVtV2F0Y2hlciBRRmls ZVN5c3RlbVdhdGNoZXI7CisjZW5kaWYKKyNlbmRpZgorCiAvKiBLRGlyV2F0Y2hQcml2YXRl IGlzIGEgc2luZ2xldG9uIGFuZCBkb2VzIHRoZSB3YXRjaGluZwogICogZm9yIGV2ZXJ5IEtE aXJXYXRjaCBpbnN0YW5jZSBpbiB0aGUgYXBwbGljYXRpb24uCiAgKi8KQEAgLTE5NCw3ICsy MjksNyBAQA0KICAgYm9vbCB1c2VJTm90aWZ5KEVudHJ5Kik7CiAjZW5kaWYKICNpZmRlZiBI QVZFX1FGSUxFU1lTVEVNV0FUQ0hFUgotICBRRmlsZVN5c3RlbVdhdGNoZXIgKmZzV2F0Y2hl cjsKKyAgS0ZpbGVTeXN0ZW1XYXRjaGVyICpmc1dhdGNoZXI7CiAgIGJvb2wgdXNlUUZTV2F0 Y2goRW50cnkqIGUpOwogI2VuZGlmCiAK --------------080002010500050205020608--