diff options
author | Thiago Macieira <thiago.macieira@intel.com> | 2023-06-08 21:20:57 -0700 |
---|---|---|
committer | Thiago Macieira <thiago.macieira@intel.com> | 2023-07-24 13:24:36 -0700 |
commit | 41f41393067080223422122b8ae1a0dcfe9e5f8f (patch) | |
tree | 6279d6be62a7563d2a1bda9e8774a083e0e945ee | |
parent | f174ae254b2b57e23458d2e9e5710e9a86df1c95 (diff) |
QEventDispatcherUNIX: remove the fallback to pipes on eventfd systems
Linux has had it since 2.6.23, which is positively ancient from our
perspective. No one runs Qt on systems anywhere near that old (I'd be
amazed if anyone managed on CentOS / RHEL 7, which carries Linux 3.10).
And we don't deal with ENOSYS on FreeBSD either.
The removal is accomplished by dead code elimination: it's still
compiled on Linux and FreeBSD.
Drive-by
- use NSDMI in QThreadPipe
- remove EINTR_LOOP for eventfd_write(3): it can't be interrupted
Change-Id: I63b988479db546dabffcfffd1766e2c7acc6da46
Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_unix.cpp | 33 | ||||
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_unix_p.h | 8 |
2 files changed, 15 insertions, 26 deletions
diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index 7b965fde3d..dc87a9cd63 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -45,11 +45,6 @@ static const char *socketType(QSocketNotifier::Type type) QThreadPipe::QThreadPipe() { - fds[0] = -1; - fds[1] = -1; -#if defined(Q_OS_VXWORKS) - name[0] = '\0'; -#endif } QThreadPipe::~QThreadPipe() @@ -57,7 +52,7 @@ QThreadPipe::~QThreadPipe() if (fds[0] >= 0) close(fds[0]); - if (fds[1] >= 0) + if (!QT_CONFIG(eventfd) && fds[1] >= 0) close(fds[1]); #if defined(Q_OS_VXWORKS) @@ -106,11 +101,13 @@ bool QThreadPipe::init() initThreadPipeFD(fds[0]); fds[1] = fds[0]; #else + int ret; # if QT_CONFIG(eventfd) - if ((fds[0] = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC)) >= 0) - return true; + ret = fds[0] = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); # endif - if (qt_safe_pipe(fds, O_NONBLOCK) == -1) { + if (!QT_CONFIG(eventfd)) + ret = qt_safe_pipe(fds, O_NONBLOCK); + if (ret == -1) { perror("QThreadPipe: Unable to create pipe"); return false; } @@ -128,13 +125,8 @@ void QThreadPipe::wakeUp() { if (wakeUps.testAndSetAcquire(0, 1)) { #if QT_CONFIG(eventfd) - if (fds[1] == -1) { - // eventfd - eventfd_t value = 1; - int ret; - EINTR_LOOP(ret, eventfd_write(fds[0], value)); - return; - } + eventfd_write(fds[0], 1); + return; #endif char c = 0; qt_safe_write(fds[1], &c, 1); @@ -156,13 +148,10 @@ int QThreadPipe::check(const pollfd &pfd) ::ioctl(fds[0], FIOFLUSH, 0); #else # if QT_CONFIG(eventfd) - if (fds[1] == -1) { - // eventfd - eventfd_t value; - eventfd_read(fds[0], &value); - } else + eventfd_t value; + eventfd_read(fds[0], &value); # endif - { + if (!QT_CONFIG(eventfd)) { while (::read(fds[0], c, sizeof(c)) > 0) {} } #endif diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h index 4e9a360f3e..2479cd1e63 100644 --- a/src/corelib/kernel/qeventdispatcher_unix_p.h +++ b/src/corelib/kernel/qeventdispatcher_unix_p.h @@ -51,13 +51,13 @@ struct QThreadPipe int check(const pollfd &pfd); // note for eventfd(7) support: - // if fds[1] is -1, then eventfd(7) is in use and is stored in fds[0] - int fds[2]; + // fds[0] stores the eventfd, fds[1] is unused + int fds[2] = { -1, -1 }; QAtomicInt wakeUps; #if defined(Q_OS_VXWORKS) - static const int len_name = 20; - char name[len_name]; + static constexpr int len_name = 20; + char name[len_name] = {}; #endif }; |