summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTijl Coosemans <tijl@coosemans.org>2010-11-26 09:11:08 (GMT)
committerJoão Abecasis <joao.abecasis@nokia.com>2010-11-26 09:11:08 (GMT)
commit48467f2d8cba8da2589cb1e480e4ed40199626d9 (patch)
tree410fcd04034adb34e04df8670dc2b0c4ad9d0877
parentaeadc5efbe74c2c977d288205c17bf04b2ec172c (diff)
downloadQt-48467f2d8cba8da2589cb1e480e4ed40199626d9.zip
Qt-48467f2d8cba8da2589cb1e480e4ed40199626d9.tar.gz
Qt-48467f2d8cba8da2589cb1e480e4ed40199626d9.tar.bz2
QKqueueFileSystemWatcherEngine: Handle kevent(2) returning EINTR.
The worker thread exits whenever the kevent call returns an error, but in the case of EINTR (interrupted by signal) it should just call kevent again. Otherwise for instance, attaching a debugger to the process causes the worker thread to exit because of the SIGSTOP it receives. Merge-request: 2425 Reviewed-by: João Abecasis <joao.abecasis@nokia.com>
-rw-r--r--src/corelib/io/qfilesystemwatcher_kqueue.cpp3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp
index 6e7bc47..c497570 100644
--- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp
+++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp
@@ -236,9 +236,10 @@ void QKqueueFileSystemWatcherEngine::run()
static const struct timespec ZeroTimeout = { 0, 0 };
forever {
+ int r;
struct kevent kev;
DEBUG() << "QKqueueFileSystemWatcherEngine: waiting for kevents...";
- int r = kevent(kqfd, 0, 0, &kev, 1, 0);
+ EINTR_LOOP(r, kevent(kqfd, 0, 0, &kev, 1, 0));
if (r < 0) {
perror("QKqueueFileSystemWatcherEngine: error during kevent wait");
return;