diff options
author | Kenneth Topp <ken@bllue.org> | 2022-04-04 09:36:21 -0400 |
---|---|---|
committer | Kenneth Topp <ken@bllue.org> | 2022-04-14 17:00:06 -0400 |
commit | 829a9f62a96721c142f53e12a8812e8231b20317 (patch) | |
tree | 676e25af656155f1ebd97f8a8c73d0ce0e80fd16 | |
parent | 24f17ba30c560a0b907fb82473a9faef14b4a327 (diff) | |
download | qtwayland-829a9f62a96721c142f53e12a8812e8231b20317.tar.gz |
use poll(2) when reading from clipboard
change clipboard read away from select(2) call which can fail when
an application has large number of open files
Change-Id: I6d98c6bb11cdd5b6171b01cfeb0044dd41cf9fb5
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
-rw-r--r-- | src/client/qwaylanddataoffer.cpp | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/src/client/qwaylanddataoffer.cpp b/src/client/qwaylanddataoffer.cpp index 6271f0fa..a339ade3 100644 --- a/src/client/qwaylanddataoffer.cpp +++ b/src/client/qwaylanddataoffer.cpp @@ -188,17 +188,18 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QMetaType t int QWaylandMimeData::readData(int fd, QByteArray &data) const { - fd_set readset; - FD_ZERO(&readset); - FD_SET(fd, &readset); - struct timeval timeout; + struct pollfd readset; + readset.fd = fd; + readset.events = POLLIN; + struct timespec timeout; timeout.tv_sec = 1; - timeout.tv_usec = 0; + timeout.tv_nsec = 0; + Q_FOREVER { - int ready = select(FD_SETSIZE, &readset, nullptr, nullptr, &timeout); + int ready = qt_safe_poll(&readset, 1, &timeout); if (ready < 0) { - qWarning() << "QWaylandDataOffer: select() failed"; + qWarning() << "QWaylandDataOffer: qt_safe_poll() failed"; return -1; } else if (ready == 0) { qWarning("QWaylandDataOffer: timeout reading from pipe"); |