summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Topp <ken@bllue.org>2022-04-04 09:36:21 -0400
committerKenneth Topp <ken@bllue.org>2022-04-14 17:00:06 -0400
commit829a9f62a96721c142f53e12a8812e8231b20317 (patch)
tree676e25af656155f1ebd97f8a8c73d0ce0e80fd16
parent24f17ba30c560a0b907fb82473a9faef14b4a327 (diff)
downloadqtwayland-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.cpp15
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");