summaryrefslogtreecommitdiffstats
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)
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 6271f0fa8..a339ade35 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");