Merge branch 'master' of file:///export/home/pvanek/oss/qterm/merge/qtermwidget
Conflicts: lib/BlockArray.cpp lib/BlockArray.h lib/CMakeLists.txt lib/Character.h lib/CharacterColor.h lib/Emulation.cpp lib/Emulation.h lib/Filter.cpp lib/Filter.h lib/History.cpp lib/History.h lib/KeyboardTranslator.cpp lib/KeyboardTranslator.h lib/Pty.cpp lib/Pty.h lib/Screen.cpp lib/Screen.h lib/ScreenWindow.cpp lib/ScreenWindow.h lib/Session.cpp lib/Session.h lib/ShellCommand.cpp lib/ShellCommand.h lib/TerminalCharacterDecoder.cpp lib/TerminalCharacterDecoder.h lib/TerminalDisplay.cpp lib/TerminalDisplay.h lib/Vt102Emulation.cpp lib/Vt102Emulation.h lib/k3process.cpp lib/k3process.h lib/k3processcontroller.cpp lib/k3processcontroller.h lib/konsole_wcwidth.cpp lib/konsole_wcwidth.h lib/kpty.cpp lib/kpty.h lib/kpty_p.h lib/qtermwidget.cpp lib/qtermwidget.h
This commit is contained in:
+24
-18
@@ -50,16 +50,16 @@ public:
|
||||
|
||||
int fd[2];
|
||||
bool needcheck;
|
||||
QSocketNotifier *notifier;
|
||||
QList<K3Process*> kProcessList;
|
||||
QSocketNotifier * notifier;
|
||||
QList<K3Process *> kProcessList;
|
||||
QList<int> unixProcessList;
|
||||
static struct sigaction oldChildHandlerData;
|
||||
static bool handlerSet;
|
||||
static int refCount;
|
||||
static K3ProcessController* instance;
|
||||
static K3ProcessController * instance;
|
||||
};
|
||||
|
||||
K3ProcessController *K3ProcessController::Private::instance = 0;
|
||||
K3ProcessController * K3ProcessController::Private::instance = 0;
|
||||
int K3ProcessController::Private::refCount = 0;
|
||||
|
||||
void K3ProcessController::ref()
|
||||
@@ -81,7 +81,7 @@ void K3ProcessController::deref()
|
||||
}
|
||||
}
|
||||
|
||||
K3ProcessController* K3ProcessController::instance()
|
||||
K3ProcessController * K3ProcessController::instance()
|
||||
{
|
||||
/*
|
||||
* there were no safety guards in previous revisions, is that ok?
|
||||
@@ -139,8 +139,9 @@ bool K3ProcessController::Private::handlerSet = false;
|
||||
|
||||
void K3ProcessController::setupHandlers()
|
||||
{
|
||||
if ( Private::handlerSet )
|
||||
if ( Private::handlerSet ) {
|
||||
return;
|
||||
}
|
||||
Private::handlerSet = true;
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
@@ -170,8 +171,9 @@ void K3ProcessController::setupHandlers()
|
||||
|
||||
void K3ProcessController::resetHandlers()
|
||||
{
|
||||
if ( !Private::handlerSet )
|
||||
if ( !Private::handlerSet ) {
|
||||
return;
|
||||
}
|
||||
Private::handlerSet = false;
|
||||
|
||||
#ifdef Q_OS_UNIX
|
||||
@@ -227,8 +229,9 @@ int K3ProcessController::notifierFd() const
|
||||
void K3ProcessController::unscheduleCheck()
|
||||
{
|
||||
char dummy[16]; // somewhat bigger - just in case several have queued up
|
||||
if ( ::read( d->fd[0], dummy, sizeof(dummy) ) > 0 )
|
||||
if ( ::read( d->fd[0], dummy, sizeof(dummy) ) > 0 ) {
|
||||
d->needcheck = true;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
@@ -255,15 +258,16 @@ void K3ProcessController::slotDoHousekeeping()
|
||||
|
||||
int status;
|
||||
again:
|
||||
QList<K3Process*>::iterator it( d->kProcessList.begin() );
|
||||
QList<K3Process*>::iterator eit( d->kProcessList.end() );
|
||||
QList<K3Process *>::iterator it( d->kProcessList.begin() );
|
||||
QList<K3Process *>::iterator eit( d->kProcessList.end() );
|
||||
while ( it != eit ) {
|
||||
K3Process *prc = *it;
|
||||
K3Process * prc = *it;
|
||||
if ( prc->runs && waitpid( prc->pid_, &status, WNOHANG ) > 0 ) {
|
||||
prc->processHasExited( status );
|
||||
// the callback can nuke the whole process list and even 'this'
|
||||
if (!instance())
|
||||
if (!instance()) {
|
||||
return;
|
||||
}
|
||||
goto again;
|
||||
}
|
||||
++it;
|
||||
@@ -274,8 +278,9 @@ again:
|
||||
if ( waitpid( *uit, 0, WNOHANG ) > 0 ) {
|
||||
uit = d->unixProcessList.erase( uit );
|
||||
deref(); // counterpart to addProcess, can invalidate 'this'
|
||||
} else
|
||||
} else {
|
||||
++uit;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,9 +289,9 @@ bool K3ProcessController::waitForProcessExit( int timeout )
|
||||
#ifdef Q_OS_UNIX
|
||||
for (;;) {
|
||||
struct timeval tv, *tvp;
|
||||
if (timeout < 0)
|
||||
if (timeout < 0) {
|
||||
tvp = 0;
|
||||
else {
|
||||
} else {
|
||||
tv.tv_sec = timeout;
|
||||
tv.tv_usec = 0;
|
||||
tvp = &tv;
|
||||
@@ -298,8 +303,9 @@ bool K3ProcessController::waitForProcessExit( int timeout )
|
||||
|
||||
switch ( select( d->fd[0]+1, &fds, 0, 0, tvp ) ) {
|
||||
case -1:
|
||||
if ( errno == EINTR )
|
||||
if ( errno == EINTR ) {
|
||||
continue;
|
||||
}
|
||||
// fall through; should never happen
|
||||
case 0:
|
||||
return false;
|
||||
@@ -314,12 +320,12 @@ bool K3ProcessController::waitForProcessExit( int timeout )
|
||||
#endif
|
||||
}
|
||||
|
||||
void K3ProcessController::addKProcess( K3Process* p )
|
||||
void K3ProcessController::addKProcess( K3Process * p )
|
||||
{
|
||||
d->kProcessList.append( p );
|
||||
}
|
||||
|
||||
void K3ProcessController::removeKProcess( K3Process* p )
|
||||
void K3ProcessController::removeKProcess( K3Process * p )
|
||||
{
|
||||
d->kProcessList.removeAll( p );
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user