summaryrefslogtreecommitdiff
path: root/source/l/qt/patches/qt-4.8-poll.patch
diff options
context:
space:
mode:
Diffstat (limited to 'source/l/qt/patches/qt-4.8-poll.patch')
-rw-r--r--source/l/qt/patches/qt-4.8-poll.patch812
1 files changed, 0 insertions, 812 deletions
diff --git a/source/l/qt/patches/qt-4.8-poll.patch b/source/l/qt/patches/qt-4.8-poll.patch
deleted file mode 100644
index aed363c6..00000000
--- a/source/l/qt/patches/qt-4.8-poll.patch
+++ /dev/null
@@ -1,812 +0,0 @@
-diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp.poll 2014-03-30 15:36:48.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/corelib/io/qprocess_unix.cpp 2014-03-31 18:04:05.958260978 -0500
-@@ -158,13 +158,6 @@ static void qt_sa_sigchld_sigaction(int
- }
- }
-
--static inline void add_fd(int &nfds, int fd, fd_set *fdset)
--{
-- FD_SET(fd, fdset);
-- if ((fd) > nfds)
-- nfds = fd;
--}
--
- struct QProcessInfo {
- QProcess *process;
- int deathPipe;
-@@ -256,9 +249,9 @@ QProcessManager::~QProcessManager()
- void QProcessManager::run()
- {
- forever {
-- fd_set readset;
-- FD_ZERO(&readset);
-- FD_SET(qt_qprocess_deadChild_pipe[0], &readset);
-+ pollfd fd;
-+ fd.fd = qt_qprocess_deadChild_pipe[0];
-+ fd.events = POLLIN;
-
- #if defined (QPROCESS_DEBUG)
- qDebug() << "QProcessManager::run() waiting for children to die";
-@@ -267,8 +260,8 @@ void QProcessManager::run()
- // block forever, or until activity is detected on the dead child
- // pipe. the only other peers are the SIGCHLD signal handler, and the
- // QProcessManager destructor.
-- int nselect = select(qt_qprocess_deadChild_pipe[0] + 1, &readset, 0, 0, 0);
-- if (nselect < 0) {
-+ int ret = qt_safe_poll(&fd, 1, -1, /* retry_eintr */ false);
-+ if (ret < 0) {
- if (errno == EINTR)
- continue;
- break;
-@@ -1027,17 +1020,6 @@ void QProcessPrivate::killProcess()
- ::kill(pid_t(pid), SIGKILL);
- }
-
--static int select_msecs(int nfds, fd_set *fdread, fd_set *fdwrite, int timeout)
--{
-- if (timeout < 0)
-- return qt_safe_select(nfds, fdread, fdwrite, 0, 0);
--
-- struct timeval tv;
-- tv.tv_sec = timeout / 1000;
-- tv.tv_usec = (timeout % 1000) * 1000;
-- return qt_safe_select(nfds, fdread, fdwrite, 0, &tv);
--}
--
- /*
- Returns the difference between msecs and elapsed. If msecs is -1,
- however, -1 is returned.
-@@ -1060,10 +1042,10 @@ bool QProcessPrivate::waitForStarted(int
- childStartedPipe[0]);
- #endif
-
-- fd_set fds;
-- FD_ZERO(&fds);
-- FD_SET(childStartedPipe[0], &fds);
-- if (select_msecs(childStartedPipe[0] + 1, &fds, 0, msecs) == 0) {
-+ pollfd fd;
-+ fd.fd = childStartedPipe[0];
-+ fd.events = POLLIN;
-+ if (qt_safe_poll(&fd, 1, msecs) == 0) {
- processError = QProcess::Timedout;
- q->setErrorString(QProcess::tr("Process operation timed out"));
- #if defined (QPROCESS_DEBUG)
-@@ -1079,6 +1061,47 @@ bool QProcessPrivate::waitForStarted(int
- return startedEmitted;
- }
-
-+class QProcessFDSet {
-+ pollfd fds[5];
-+
-+ static size_t size()
-+ {
-+ return sizeof(fds)/sizeof(fds[0]);
-+ }
-+
-+public:
-+ QProcessFDSet(QProcessPrivate &proc)
-+ {
-+ for (size_t i = 0; i < size(); ++i) {
-+ fds[i].fd = -1;
-+ fds[i].events = POLLIN;
-+ }
-+ death().fd = proc.deathPipe[0];
-+
-+ if (proc.processState == QProcess::Starting)
-+ started().fd = proc.childStartedPipe[0];
-+
-+ stdout().fd = proc.stdoutChannel.pipe[0];
-+ stderr().fd = proc.stderrChannel.pipe[0];
-+
-+ if (!proc.writeBuffer.isEmpty()) {
-+ stdin().fd = proc.stdinChannel.pipe[1];
-+ stdin().events = POLLOUT;
-+ }
-+ }
-+
-+ int poll(int timeout)
-+ {
-+ return qt_safe_poll(fds, size(), timeout);
-+ }
-+
-+ pollfd &death() { return fds[0]; }
-+ pollfd &started() { return fds[1]; }
-+ pollfd &stdout() { return fds[2]; }
-+ pollfd &stderr() { return fds[3]; }
-+ pollfd &stdin() { return fds[4]; }
-+};
-+
- bool QProcessPrivate::waitForReadyRead(int msecs)
- {
- Q_Q(QProcess);
-@@ -1090,28 +1113,9 @@ bool QProcessPrivate::waitForReadyRead(i
- stopWatch.start();
-
- forever {
-- fd_set fdread;
-- fd_set fdwrite;
--
-- FD_ZERO(&fdread);
-- FD_ZERO(&fdwrite);
--
-- int nfds = deathPipe[0];
-- FD_SET(deathPipe[0], &fdread);
--
-- if (processState == QProcess::Starting)
-- add_fd(nfds, childStartedPipe[0], &fdread);
--
-- if (stdoutChannel.pipe[0] != -1)
-- add_fd(nfds, stdoutChannel.pipe[0], &fdread);
-- if (stderrChannel.pipe[0] != -1)
-- add_fd(nfds, stderrChannel.pipe[0], &fdread);
--
-- if (!writeBuffer.isEmpty() && stdinChannel.pipe[1] != -1)
-- add_fd(nfds, stdinChannel.pipe[1], &fdwrite);
--
-+ QProcessFDSet fdset(*this);
- int timeout = qt_timeout_value(msecs, stopWatch.elapsed());
-- int ret = select_msecs(nfds + 1, &fdread, &fdwrite, timeout);
-+ int ret = fdset.poll(timeout);
- if (ret < 0) {
- break;
- }
-@@ -1121,18 +1125,18 @@ bool QProcessPrivate::waitForReadyRead(i
- return false;
- }
-
-- if (childStartedPipe[0] != -1 && FD_ISSET(childStartedPipe[0], &fdread)) {
-+ if (qt_readable(fdset.started())) {
- if (!_q_startupNotification())
- return false;
- }
-
- bool readyReadEmitted = false;
-- if (stdoutChannel.pipe[0] != -1 && FD_ISSET(stdoutChannel.pipe[0], &fdread)) {
-+ if (qt_readable(fdset.stdout())) {
- bool canRead = _q_canReadStandardOutput();
- if (processChannel == QProcess::StandardOutput && canRead)
- readyReadEmitted = true;
- }
-- if (stderrChannel.pipe[0] != -1 && FD_ISSET(stderrChannel.pipe[0], &fdread)) {
-+ if (qt_readable(fdset.stderr())) {
- bool canRead = _q_canReadStandardError();
- if (processChannel == QProcess::StandardError && canRead)
- readyReadEmitted = true;
-@@ -1140,13 +1144,13 @@ bool QProcessPrivate::waitForReadyRead(i
- if (readyReadEmitted)
- return true;
-
-- if (stdinChannel.pipe[1] != -1 && FD_ISSET(stdinChannel.pipe[1], &fdwrite))
-+ if (qt_writable(fdset.stdin()))
- _q_canWrite();
-
-- if (deathPipe[0] == -1 || FD_ISSET(deathPipe[0], &fdread)) {
-+ if (qt_readable(fdset.death())) {
- if (_q_processDied())
- return false;
-- }
-+ }
- }
- return false;
- }
-@@ -1162,29 +1166,9 @@ bool QProcessPrivate::waitForBytesWritte
- stopWatch.start();
-
- while (!writeBuffer.isEmpty()) {
-- fd_set fdread;
-- fd_set fdwrite;
--
-- FD_ZERO(&fdread);
-- FD_ZERO(&fdwrite);
--
-- int nfds = deathPipe[0];
-- FD_SET(deathPipe[0], &fdread);
--
-- if (processState == QProcess::Starting)
-- add_fd(nfds, childStartedPipe[0], &fdread);
--
-- if (stdoutChannel.pipe[0] != -1)
-- add_fd(nfds, stdoutChannel.pipe[0], &fdread);
-- if (stderrChannel.pipe[0] != -1)
-- add_fd(nfds, stderrChannel.pipe[0], &fdread);
--
--
-- if (!writeBuffer.isEmpty() && stdinChannel.pipe[1] != -1)
-- add_fd(nfds, stdinChannel.pipe[1], &fdwrite);
--
-+ QProcessFDSet fdset(*this);
- int timeout = qt_timeout_value(msecs, stopWatch.elapsed());
-- int ret = select_msecs(nfds + 1, &fdread, &fdwrite, timeout);
-+ int ret = fdset.poll(timeout);
- if (ret < 0) {
- break;
- }
-@@ -1195,24 +1179,24 @@ bool QProcessPrivate::waitForBytesWritte
- return false;
- }
-
-- if (childStartedPipe[0] != -1 && FD_ISSET(childStartedPipe[0], &fdread)) {
-+ if (qt_readable(fdset.started())) {
- if (!_q_startupNotification())
- return false;
- }
-
-- if (stdinChannel.pipe[1] != -1 && FD_ISSET(stdinChannel.pipe[1], &fdwrite))
-+ if (qt_writable(fdset.stdin()))
- return _q_canWrite();
-
-- if (stdoutChannel.pipe[0] != -1 && FD_ISSET(stdoutChannel.pipe[0], &fdread))
-+ if (qt_readable(fdset.stdout()))
- _q_canReadStandardOutput();
-
-- if (stderrChannel.pipe[0] != -1 && FD_ISSET(stderrChannel.pipe[0], &fdread))
-+ if (qt_readable(fdset.stderr()))
- _q_canReadStandardError();
-
-- if (deathPipe[0] == -1 || FD_ISSET(deathPipe[0], &fdread)) {
-- if (_q_processDied())
-- return false;
-- }
-+ if (qt_readable(fdset.death())) {
-+ if (_q_processDied())
-+ return false;
-+ }
- }
-
- return false;
-@@ -1229,29 +1213,9 @@ bool QProcessPrivate::waitForFinished(in
- stopWatch.start();
-
- forever {
-- fd_set fdread;
-- fd_set fdwrite;
-- int nfds = -1;
--
-- FD_ZERO(&fdread);
-- FD_ZERO(&fdwrite);
--
-- if (processState == QProcess::Starting)
-- add_fd(nfds, childStartedPipe[0], &fdread);
--
-- if (stdoutChannel.pipe[0] != -1)
-- add_fd(nfds, stdoutChannel.pipe[0], &fdread);
-- if (stderrChannel.pipe[0] != -1)
-- add_fd(nfds, stderrChannel.pipe[0], &fdread);
--
-- if (processState == QProcess::Running)
-- add_fd(nfds, deathPipe[0], &fdread);
--
-- if (!writeBuffer.isEmpty() && stdinChannel.pipe[1] != -1)
-- add_fd(nfds, stdinChannel.pipe[1], &fdwrite);
--
-+ QProcessFDSet fdset(*this);
- int timeout = qt_timeout_value(msecs, stopWatch.elapsed());
-- int ret = select_msecs(nfds + 1, &fdread, &fdwrite, timeout);
-+ int ret = fdset.poll(timeout);
- if (ret < 0) {
- break;
- }
-@@ -1261,20 +1225,20 @@ bool QProcessPrivate::waitForFinished(in
- return false;
- }
-
-- if (childStartedPipe[0] != -1 && FD_ISSET(childStartedPipe[0], &fdread)) {
-+ if (qt_readable(fdset.started())) {
- if (!_q_startupNotification())
- return false;
- }
-- if (stdinChannel.pipe[1] != -1 && FD_ISSET(stdinChannel.pipe[1], &fdwrite))
-+ if (qt_writable(fdset.stdin()))
- _q_canWrite();
-
-- if (stdoutChannel.pipe[0] != -1 && FD_ISSET(stdoutChannel.pipe[0], &fdread))
-+ if (qt_readable(fdset.stdout()))
- _q_canReadStandardOutput();
-
-- if (stderrChannel.pipe[0] != -1 && FD_ISSET(stderrChannel.pipe[0], &fdread))
-+ if (qt_readable(fdset.stderr()))
- _q_canReadStandardError();
-
-- if (deathPipe[0] == -1 || FD_ISSET(deathPipe[0], &fdread)) {
-+ if (qt_readable(fdset.death())) {
- if (_q_processDied())
- return true;
- }
-@@ -1284,10 +1248,10 @@ bool QProcessPrivate::waitForFinished(in
-
- bool QProcessPrivate::waitForWrite(int msecs)
- {
-- fd_set fdwrite;
-- FD_ZERO(&fdwrite);
-- FD_SET(stdinChannel.pipe[1], &fdwrite);
-- return select_msecs(stdinChannel.pipe[1] + 1, 0, &fdwrite, msecs < 0 ? 0 : msecs) == 1;
-+ pollfd fd;
-+ fd.fd = stdinChannel.pipe[1];
-+ fd.events = POLLIN;
-+ return qt_safe_poll(&fd, 1, msecs);
- }
-
- void QProcessPrivate::findExitCode()
-diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp.poll 2014-03-30 15:36:48.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix.cpp 2014-03-31 18:01:59.369715403 -0500
-@@ -99,4 +99,165 @@ int qt_safe_select(int nfds, fd_set *fdr
- }
- }
-
-+#ifndef Q_OS_VXWORKS
-+
-+int qt_safe_poll(struct pollfd *fds, int nfds, int timeout_ms, bool retry_eintr)
-+{
-+ if (nfds == 0)
-+ return 0;
-+ if (nfds < 0) {
-+ errno = EINVAL;
-+ return -1;
-+ }
-+
-+ // Retry on ret == 0 if the deadline has not yet passed because
-+ // Linux can return early from the syscall, without setting EINTR.
-+ if (timeout_ms < 0) {
-+ forever {
-+ int ret = ::poll(fds, nfds, -1);
-+ if (ret > 0)
-+ return ret;
-+ if (retry_eintr) {
-+ if (ret == 0 || ret == -1 && errno == EINTR) {
-+ continue;
-+ } else {
-+ return -1;
-+ }
-+ }
-+ if (ret == 0) {
-+ errno = EINTR;
-+ return -1;
-+ }
-+ return ret;
-+ }
-+ }
-+
-+ timeval previous = qt_gettime();
-+ timeval deadline = previous;
-+ deadline.tv_sec += timeout_ms / 1000;
-+ deadline.tv_usec += (timeout_ms % 1000) * 1000;
-+ if (deadline.tv_usec >= 1000000) {
-+ ++deadline.tv_sec;
-+ deadline.tv_usec -= 1000000;
-+ }
-+ int remaining = timeout_ms;
-+
-+ forever {
-+ int ret = ::poll(fds, nfds, remaining);
-+ if (ret > 0)
-+ return ret;
-+ timeval now = qt_gettime();
-+ if ((now.tv_sec > deadline.tv_sec // past deadline
-+ || (now.tv_sec == deadline.tv_sec
-+ && now.tv_usec >= deadline.tv_usec))
-+ || (now.tv_sec < previous.tv_sec // time warp
-+ || (now.tv_sec == previous.tv_sec
-+ && now.tv_usec < previous.tv_usec))
-+ || (ret < 0 && (errno != EINTR || !retry_eintr))) // other error
-+ return ret;
-+ if (ret == 0 && !retry_eintr) {
-+ errno = EINTR;
-+ return -1;
-+ }
-+ remaining = (deadline.tv_sec - now.tv_sec) * 1000
-+ + (deadline.tv_usec - now.tv_usec) / 1000;
-+ previous = now;
-+ }
-+}
-+
-+#else
-+
-+// Poll emulation for VxWorks.
-+
-+static int mark_bad_descriptors(pollfd *fds, int nfds)
-+{
-+ fd_set r;
-+ FD_ZERO(&r);
-+ struct timeval tv;
-+ tv.tv_sec = 0;
-+ tv.tv_usec = 0;
-+ int ret = 0;
-+
-+ // Check each descriptor invidually for badness.
-+ for (int i = 0; i < nfds; ++i) {
-+ pollfd &fd(fds[i]);
-+ if (fd.fd >= 0) {
-+ FD_SET(fd.fd, &r);
-+ int ret = qt_safe_select(fd.fd + 1, &r, NULL, NULL, &tv);
-+ FD_CLR(fd.fd, &r);
-+ if (ret < 0 && errno == EBADF) {
-+ fd.revents = POLLNVAL;
-+ ++ret;
-+ }
-+ }
-+ }
-+ Q_ASSERT(ret > 0);
-+ return ret;
-+}
-+
-+int qt_safe_poll(pollfd *fds, int nfds, int timeout, bool retry_eintr)
-+{
-+ fd_set r, w;
-+ FD_ZERO(&r);
-+ FD_ZERO(&w);
-+ int maxfd = -1;
-+
-+ // Extract the watched descriptors.
-+ for (int i = 0; i < nfds; ++i) {
-+ pollfd &fd(fds[i]);
-+ if (fd.fd >= 0 && fd.fd < FD_SETSIZE) {
-+ if (fd.events & POLLIN) {
-+ FD_SET(fd.fd, &r);
-+ if (fd.fd > maxfd)
-+ maxfd = fd.fd;
-+ }
-+ if (fd.events & POLLOUT) {
-+ FD_SET(fd.fd, &w);
-+ if (fd.fd > maxfd)
-+ maxfd = fd.fd;
-+ }
-+ }
-+ }
-+
-+ // If timeout is negative, wait indefinitely for activity.
-+ timeval tv;
-+ timeval *ptv;
-+ if (timeout >= 0) {
-+ tv.tv_sec = timeout / 1000;
-+ tv.tv_usec = (timeout % 1000) * 1000;
-+ ptv = &tv;
-+ } else
-+ ptv = NULL;
-+
-+ int ret;
-+ if (retry_eintr)
-+ ret = qt_safe_select(maxfd + 1, &r, &w, NULL, ptv);
-+ else
-+ ret = ::select(maxfd + 1, &r, &w, NULL, ptv);
-+ if (ret < 0 && errno == EBADF) {
-+ return mark_bad_descriptors(fds, nfds);
-+ }
-+ if (ret <= 0)
-+ return ret;
-+
-+ // Set the revents flags.
-+ ret = 0;
-+ for (int i = 0; i < nfds; ++i) {
-+ pollfd &fd(fds[i]);
-+ fd.revents = 0;
-+ if (fd.fd >= 0 && fd.fd < FD_SETSIZE) {
-+ if ((fd.events & POLLIN) && FD_ISSET(fd.fd, &r))
-+ fd.revents |= POLLIN;
-+ if ((fd.events & POLLOUT) && FD_ISSET(fd.fd, &w))
-+ fd.revents |= POLLOUT;
-+ if (fd.revents)
-+ ++ret;
-+ }
-+ }
-+ Q_ASSERT(ret > 0);
-+ return ret;
-+}
-+
-+#endif
-+
- QT_END_NAMESPACE
-diff -up qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h.poll qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h
---- qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h.poll 2014-03-30 15:36:48.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/corelib/kernel/qcore_unix_p.h 2014-03-31 18:01:59.370715392 -0500
-@@ -345,9 +345,42 @@ static inline pid_t qt_safe_waitpid(pid_
-
- timeval qt_gettime(); // in qelapsedtimer_mac.cpp or qtimestamp_unix.cpp
-
-+// Deprecated due to FD_SETSIZE limitation, use qt_safe_poll instead.
- Q_CORE_EXPORT int qt_safe_select(int nfds, fd_set *fdread, fd_set *fdwrite, fd_set *fdexcept,
- const struct timeval *tv);
-
-+#ifndef Q_OS_VXWORKS
-+#include <poll.h>
-+#else
-+
-+// Poll emulation for VxWorks.
-+
-+struct pollfd {
-+ int fd;
-+ short events;
-+ short revents;
-+};
-+
-+#define POLLIN 1
-+#define POLLOUT 2
-+#define POLLERR 4
-+#define POLLHUP 8
-+#define POLLNVAL 16
-+#endif
-+
-+inline bool qt_readable(const pollfd &fd)
-+{
-+ return fd.fd >= 0 && (fd.revents & (POLLIN | POLLHUP | POLLERR | POLLNVAL)) != 0;
-+}
-+
-+inline bool qt_writable(const pollfd &fd)
-+{
-+ return fd.fd >= 0 && (fd.revents & (POLLOUT | POLLHUP | POLLERR | POLLNVAL)) != 0;
-+}
-+
-+Q_CORE_EXPORT int qt_safe_poll(pollfd *fds, int nfds, int timeout,
-+ bool retry_eintr = true);
-+
- // according to X/OPEN we have to define semun ourselves
- // we use prefix as on some systems sem.h will have it
- struct semid_ds;
-diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalserver_unix.cpp 2014-03-31 18:01:59.370715392 -0500
-@@ -208,16 +208,11 @@ void QLocalServerPrivate::_q_onNewConnec
-
- void QLocalServerPrivate::waitForNewConnection(int msec, bool *timedOut)
- {
-- fd_set readfds;
-- FD_ZERO(&readfds);
-- FD_SET(listenSocket, &readfds);
-+ struct pollfd fd;
-+ fd.fd = listenSocket;
-+ fd.events = POLLIN;
-
-- timeval timeout;
-- timeout.tv_sec = msec / 1000;
-- timeout.tv_usec = (msec % 1000) * 1000;
--
-- int result = -1;
-- result = qt_safe_select(listenSocket + 1, &readfds, 0, 0, (msec == -1) ? 0 : &timeout);
-+ int result = qt_safe_poll(&fd, 1, msec);
- if (-1 == result) {
- setError(QLatin1String("QLocalServer::waitForNewConnection"));
- closeServer();
-diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qlocalsocket_unix.cpp 2014-03-31 18:01:59.370715392 -0500
-@@ -56,10 +56,6 @@
- #include <qdebug.h>
- #include <qelapsedtimer.h>
-
--#ifdef Q_OS_VXWORKS
--# include <selectLib.h>
--#endif
--
- #define QT_CONNECT_TIMEOUT 30000
-
- QT_BEGIN_NAMESPACE
-@@ -520,32 +516,17 @@ bool QLocalSocket::waitForConnected(int
- if (state() != ConnectingState)
- return (state() == ConnectedState);
-
-- fd_set fds;
-- FD_ZERO(&fds);
-- FD_SET(d->connectingSocket, &fds);
--
-- timeval timeout;
-- timeout.tv_sec = msec / 1000;
-- timeout.tv_usec = (msec % 1000) * 1000;
--
-- // timeout can not be 0 or else select will return an error.
-- if (0 == msec)
-- timeout.tv_usec = 1000;
-+ pollfd fd;
-+ fd.fd = d->connectingSocket;
-+ fd.events = POLLIN | POLLOUT;
-
- int result = -1;
- // on Linux timeout will be updated by select, but _not_ on other systems.
- QElapsedTimer timer;
-+ int remaining = msec;
- timer.start();
-- while (state() == ConnectingState
-- && (-1 == msec || timer.elapsed() < msec)) {
--#ifdef Q_OS_SYMBIAN
-- // On Symbian, ready-to-write is signaled when non-blocking socket
-- // connect is finised. Is ready-to-read really used on other
-- // UNIX paltforms when using non-blocking AF_UNIX socket?
-- result = ::select(d->connectingSocket + 1, 0, &fds, 0, &timeout);
--#else
-- result = ::select(d->connectingSocket + 1, &fds, 0, 0, &timeout);
--#endif
-+ while (state() == ConnectingState) {
-+ result = qt_safe_poll(&fd, 1, remaining, /* retry_eintr */ false);
- if (-1 == result && errno != EINTR) {
- d->errorOccurred( QLocalSocket::UnknownSocketError,
- QLatin1String("QLocalSocket::waitForConnected"));
-@@ -553,6 +534,11 @@ bool QLocalSocket::waitForConnected(int
- }
- if (result > 0)
- d->_q_connectToSocket();
-+ if (msec >= 0) {
-+ remaining = timer.elapsed() - msec;
-+ if (remaining < 0)
-+ break;
-+ }
- }
-
- return (state() == ConnectedState);
-diff -up qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/network/socket/qnativesocketengine_unix.cpp 2014-03-31 18:01:59.371715381 -0500
-@@ -1068,48 +1068,40 @@ qint64 QNativeSocketEnginePrivate::nativ
-
- int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool selectForRead) const
- {
-- fd_set fds;
-- FD_ZERO(&fds);
-- FD_SET(socketDescriptor, &fds);
--
-- struct timeval tv;
-- tv.tv_sec = timeout / 1000;
-- tv.tv_usec = (timeout % 1000) * 1000;
--
-- int retval;
-- if (selectForRead)
-- retval = qt_safe_select(socketDescriptor + 1, &fds, 0, 0, timeout < 0 ? 0 : &tv);
-- else
-- retval = qt_safe_select(socketDescriptor + 1, 0, &fds, 0, timeout < 0 ? 0 : &tv);
--
-- return retval;
-+ struct pollfd fd;
-+ fd.fd = socketDescriptor;
-+ if (selectForRead) {
-+ fd.events = POLLIN;
-+ } else {
-+ fd.events = POLLOUT;
-+ }
-+ return qt_safe_poll(&fd, 1, timeout);
- }
-
- int QNativeSocketEnginePrivate::nativeSelect(int timeout, bool checkRead, bool checkWrite,
- bool *selectForRead, bool *selectForWrite) const
- {
-- fd_set fdread;
-- FD_ZERO(&fdread);
-+ struct pollfd fd;
-+ fd.fd = socketDescriptor;
- if (checkRead)
-- FD_SET(socketDescriptor, &fdread);
--
-- fd_set fdwrite;
-- FD_ZERO(&fdwrite);
-+ fd.events = POLLIN;
-+ else
-+ fd.events = 0;
- if (checkWrite)
-- FD_SET(socketDescriptor, &fdwrite);
--
-- struct timeval tv;
-- tv.tv_sec = timeout / 1000;
-- tv.tv_usec = (timeout % 1000) * 1000;
--
-- int ret;
-- ret = qt_safe_select(socketDescriptor + 1, &fdread, &fdwrite, 0, timeout < 0 ? 0 : &tv);
--
-+ fd.events |= POLLOUT;
-+ int ret = qt_safe_poll(&fd, 1, timeout);
- if (ret <= 0)
-- return ret;
-- *selectForRead = FD_ISSET(socketDescriptor, &fdread);
-- *selectForWrite = FD_ISSET(socketDescriptor, &fdwrite);
--
-+ return ret;
-+ bool r = (fd.revents & (POLLIN | POLLHUP | POLLERR)) != 0;
-+ bool w = (fd.revents & (POLLOUT | POLLHUP | POLLERR)) != 0;
-+ // Emulate the return value from select(2).
-+ ret = 0;
-+ if (r)
-+ ++ret;
-+ if (w)
-+ ++ret;
-+ *selectForRead = r;
-+ *selectForWrite = w;
- return ret;
- }
-
-diff -up qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/qt3support/network/q3socketdevice_unix.cpp 2014-03-31 18:01:59.371715381 -0500
-@@ -68,6 +68,7 @@ static inline int qt_socket_socket(int d
- #endif
-
- #include "q3socketdevice.h"
-+#include "private/qcore_unix_p.h"
-
- #ifndef QT_NO_NETWORK
-
-@@ -588,19 +589,10 @@ Q_LONG Q3SocketDevice::waitForMore( int
- {
- if ( !isValid() )
- return -1;
-- if ( fd >= FD_SETSIZE )
-- return -1;
--
-- fd_set fds;
-- struct timeval tv;
--
-- FD_ZERO( &fds );
-- FD_SET( fd, &fds );
--
-- tv.tv_sec = msecs / 1000;
-- tv.tv_usec = (msecs % 1000) * 1000;
-
-- int rv = select( fd+1, &fds, 0, 0, msecs < 0 ? 0 : &tv );
-+ pollfd pfd;
-+ pfd.fd = fd;
-+ int rv = qt_safe_poll(&pfd, 1, msecs, /* retry_eintr */ false);
-
- if ( rv < 0 )
- return -1;
-diff -up qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp.poll qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp
---- qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp.poll 2014-03-30 15:36:49.000000000 -0500
-+++ qt-everywhere-opensource-src-4.8.6/src/qt3support/other/q3process_unix.cpp 2014-03-31 18:01:59.372715370 -0500
-@@ -981,13 +981,10 @@ bool Q3Process::isRunning() const
- // On heavy processing, the socket notifier for the sigchild might not
- // have found time to fire yet.
- if ( d->procManager && d->procManager->sigchldFd[1] < FD_SETSIZE ) {
-- fd_set fds;
-- struct timeval tv;
-- FD_ZERO( &fds );
-- FD_SET( d->procManager->sigchldFd[1], &fds );
-- tv.tv_sec = 0;
-- tv.tv_usec = 0;
-- if ( ::select( d->procManager->sigchldFd[1]+1, &fds, 0, 0, &tv ) > 0 )
-+ pollfd fd;
-+ fd.fd = d->procManager->sigchldFd[1];
-+ fd.events = POLLIN;
-+ if ( qt_safe_poll(&fd, 1, 0, /* retry_eintr */ false) > 0 )
- d->procManager->sigchldHnd( d->procManager->sigchldFd[1] );
- }
-
-@@ -1124,29 +1121,21 @@ void Q3Process::socketRead( int fd )
- }
- }
-
-- if ( fd < FD_SETSIZE ) {
-- fd_set fds;
-- struct timeval tv;
-- FD_ZERO( &fds );
-- FD_SET( fd, &fds );
-- tv.tv_sec = 0;
-- tv.tv_usec = 0;
-- while ( ::select( fd+1, &fds, 0, 0, &tv ) > 0 ) {
-- // prepare for the next round
-- FD_ZERO( &fds );
-- FD_SET( fd, &fds );
-- // read data
-- ba = new QByteArray( basize );
-- n = ::read( fd, ba->data(), basize );
-- if ( n > 0 ) {
-- ba->resize( n );
-- buffer->append( ba );
-- ba = 0;
-- } else {
-- delete ba;
-- ba = 0;
-- break;
-- }
-+ pollfd pfd;
-+ pfd.fd = fd;
-+ pfd.events = POLLIN;
-+ while (qt_safe_poll(&pfd, 1, 0)) {
-+ // read data
-+ ba = new QByteArray( basize );
-+ n = ::read( fd, ba->data(), basize );
-+ if ( n > 0 ) {
-+ ba->resize( n );
-+ buffer->append( ba );
-+ ba = 0;
-+ } else {
-+ delete ba;
-+ ba = 0;
-+ break;
- }
- }
-