[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: KDE/kdelibs/kpty
From: Adriaan de Groot <groot () kde ! org>
Date: 2008-11-16 10:41:25
Message-ID: 1226832085.755276.22044.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 884926 by adridg:
Fix 95% of bug #175283; there are still sequences that will wedge a pty, but I have \
not been able to reliably reproduce them.
Backport not necessary, we'll keep it in with the Solaris patches for now.
BUG: 175283
M +21 -0 kptydevice.cpp
--- trunk/KDE/kdelibs/kpty/kptydevice.cpp #884925:884926
@@ -270,6 +270,27 @@
#else
if (!::ioctl(q->masterFd(), FIONREAD, (char *) &available)) {
#endif
+#ifdef Q_OS_SOLARIS
+ // A Pty is a STREAMS module, and those can be activated
+ // with 0 bytes available. This happens either when ^C is
+ // pressed, or when an application does an explicit write(a,b,0)
+ // which happens in experiments fairly often. When 0 bytes are
+ // available, you must read those 0 bytes to clear the STREAMS
+ // module, but we don't want to hit the !readBytes case further down.
+ if (!available) {
+ char c;
+ // Read the 0-byte STREAMS message
+ int r = read(q->masterFd(), &c, 0);
+ // Should return 0 bytes read; -1 is error
+ if (r < 0) {
+ readNotifier->setEnabled(false);
+ emit q->readEof();
+ return false;
+ }
+ return true;
+ }
+#endif
+
char *ptr = readBuffer.reserve(available);
NO_INTR(readBytes, read(q->masterFd(), ptr, available));
if (readBytes < 0) {
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic