summaryrefslogtreecommitdiff
path: root/noncore/apps/opie-console/MyPty.cpp
authorzecke <zecke>2002-10-15 00:33:13 (UTC)
committer zecke <zecke>2002-10-15 00:33:13 (UTC)
commitb12b38a00c66ddc100f3fff75478539b8b797928 (patch) (side-by-side diff)
treea28bafdaf00c2d89e1ef9680e6a31ff66bcc8bde /noncore/apps/opie-console/MyPty.cpp
parent06330eede01fa5082ec382045b63454b2262bba6 (diff)
downloadopie-b12b38a00c66ddc100f3fff75478539b8b797928.zip
opie-b12b38a00c66ddc100f3fff75478539b8b797928.tar.gz
opie-b12b38a00c66ddc100f3fff75478539b8b797928.tar.bz2
Temp disable the Error notifier this fixes the probs with exiting taking 90%+ of CPU time
Diffstat (limited to 'noncore/apps/opie-console/MyPty.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/opie-console/MyPty.cpp22
1 files changed, 17 insertions, 5 deletions
diff --git a/noncore/apps/opie-console/MyPty.cpp b/noncore/apps/opie-console/MyPty.cpp
index 10828b0..cacb4ce 100644
--- a/noncore/apps/opie-console/MyPty.cpp
+++ b/noncore/apps/opie-console/MyPty.cpp
@@ -79,12 +79,13 @@
#include <sys/wait.h>
#ifdef HAVE_OPENPTY
#include <pty.h>
#endif
+#include "procctl.h"
#include "MyPty.h"
#undef VERBOSE_DEBUG
@@ -110,28 +111,31 @@ void MyPty::donePty()
// This is code from the Qt DumbTerminal example
int status = 0;
::close(m_fd);
if (m_cpid) {
+ qWarning("killing!!!");
kill(m_cpid, SIGHUP);
waitpid(m_cpid, &status, 0);
}
- emit done(status);
+ m_cpid = 0;
+// emit done(status);
}
const char* MyPty::deviceName()
{
return m_ttynam;
}
void MyPty::error()
{
+ qWarning("error");
// This is code from the Qt DumbTerminal example
donePty();
}
void MyPty::start() {
char* cmd = "/bin/sh";
@@ -179,15 +183,15 @@ int MyPty::run(const char* cmd, QStrList &, const char*, int)
donePty();
exit(-1);
}
// parent - continue as a widget
QSocketNotifier* sn_r = new QSocketNotifier(m_fd,QSocketNotifier::Read,this);
- QSocketNotifier* sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this);
+// QSocketNotifier* sn_e = new QSocketNotifier(m_fd,QSocketNotifier::Exception,this);
connect(sn_r,SIGNAL(activated(int)),this,SLOT(readPty()));
- connect(sn_e,SIGNAL(activated(int)),this,SLOT(error()));
+// connect(sn_e,SIGNAL(activated(int)),this,SLOT(error()));
return 0;
}
int MyPty::openPty()
{
@@ -226,12 +230,13 @@ int MyPty::openPty()
/*!
Create an instance.
*/
MyPty::MyPty(const Profile&) : m_cpid(0)
{
m_fd = openPty();
+ ProcCtl* ctl = ProcCtl::self();
}
/*!
Destructor.
Note that the related client program is not killed
(yet) when a instance is deleted.
@@ -256,13 +261,13 @@ void MyPty::close() {
void MyPty::reload( const Profile& ) {
}
/*! sends len bytes through the line */
void MyPty::send(const QByteArray& ar)
{
-
+ qWarning("sending!");
#ifdef VERBOSE_DEBUG
// verbose debug
printf("sending bytes:\n");
for (uint i = 0; i < ar.count(); i++)
printf("%c", ar[i]);
printf("\n");
@@ -271,22 +276,29 @@ void MyPty::send(const QByteArray& ar)
::write(m_fd, ar.data(), ar.count());
}
/*! indicates that a block of data is received */
void MyPty::readPty()
{
+ qWarning("read");
QByteArray buf(4096);
int len = ::read( m_fd, buf.data(), 4096 );
- if (len == -1)
+ if (len == -1 || len == 0) {
+ qWarning("donePty!!! now!");
donePty();
+ qWarning("return %s", sender()->className() );
+ delete sender();
+ return;
+ }
if (len < 0)
return;
+
buf.resize(len);
emit received(buf);
#ifdef VERBOSE_DEBUG
// verbose debug
printf("read bytes:\n");