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>
This commit is contained in:
Kenneth Topp 2022-04-04 09:36:21 -04:00
parent 179d0d34fa
commit bb2788d9f7

View File

@ -188,17 +188,18 @@ QVariant QWaylandMimeData::retrieveData_sys(const QString &mimeType, QMetaType t
int QWaylandMimeData::readData(int fd, QByteArray &data) const int QWaylandMimeData::readData(int fd, QByteArray &data) const
{ {
fd_set readset; struct pollfd readset;
FD_ZERO(&readset); readset.fd = fd;
FD_SET(fd, &readset); readset.events = POLLIN;
struct timeval timeout; struct timespec timeout;
timeout.tv_sec = 1; timeout.tv_sec = 1;
timeout.tv_usec = 0; timeout.tv_nsec = 0;
Q_FOREVER { Q_FOREVER {
int ready = select(FD_SETSIZE, &readset, nullptr, nullptr, &timeout); int ready = qt_safe_poll(&readset, 1, &timeout);
if (ready < 0) { if (ready < 0) {
qWarning() << "QWaylandDataOffer: select() failed"; qWarning() << "QWaylandDataOffer: qt_safe_poll() failed";
return -1; return -1;
} else if (ready == 0) { } else if (ready == 0) {
qWarning("QWaylandDataOffer: timeout reading from pipe"); qWarning("QWaylandDataOffer: timeout reading from pipe");