Diffstat (limited to 'core/launcher/qprocess_unix.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/launcher/qprocess_unix.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/core/launcher/qprocess_unix.cpp b/core/launcher/qprocess_unix.cpp index 97c0460..3125bcc 100644 --- a/core/launcher/qprocess_unix.cpp +++ b/core/launcher/qprocess_unix.cpp | |||
@@ -292,49 +292,53 @@ void QProcessManager::remove( QProc *p ) | |||
292 | odebug << "QProcessManager: remove process (procList.count(): " << procList->count() << ")" << oendl; | 292 | odebug << "QProcessManager: remove process (procList.count(): " << procList->count() << ")" << oendl; |
293 | #endif | 293 | #endif |
294 | cleanup(); | 294 | cleanup(); |
295 | } | 295 | } |
296 | 296 | ||
297 | void QProcessManager::cleanup() | 297 | void QProcessManager::cleanup() |
298 | { | 298 | { |
299 | if ( procList->count() == 0 ) { | 299 | if ( procList->count() == 0 ) { |
300 | QTimer::singleShot( 0, this, SLOT(removeMe()) ); | 300 | QTimer::singleShot( 0, this, SLOT(removeMe()) ); |
301 | } | 301 | } |
302 | } | 302 | } |
303 | 303 | ||
304 | void QProcessManager::removeMe() | 304 | void QProcessManager::removeMe() |
305 | { | 305 | { |
306 | if ( procList->count() == 0 ) { | 306 | if ( procList->count() == 0 ) { |
307 | qprocess_cleanup_procmanager.remove( &QProcessPrivate::procManager ); | 307 | qprocess_cleanup_procmanager.remove( &QProcessPrivate::procManager ); |
308 | QProcessPrivate::procManager = 0; | 308 | QProcessPrivate::procManager = 0; |
309 | delete this; | 309 | delete this; |
310 | } | 310 | } |
311 | } | 311 | } |
312 | 312 | ||
313 | void QProcessManager::sigchldHnd( int fd ) | 313 | void QProcessManager::sigchldHnd( int fd ) |
314 | { | 314 | { |
315 | char tmp; | 315 | char tmp; |
316 | ::read( fd, &tmp, sizeof(tmp) ); | 316 | if (::read( fd, &tmp, sizeof(tmp) ) < 0) |
317 | #if defined(QT_QPROCESS_DEBUG) | ||
318 | odebug << "QProcessManager::sigchldHnd() failed dummy read of file descriptor" << oendl; | ||
319 | #endif | ||
320 | ; | ||
317 | #if defined(QT_QPROCESS_DEBUG) | 321 | #if defined(QT_QPROCESS_DEBUG) |
318 | odebug << "QProcessManager::sigchldHnd()" << oendl; | 322 | odebug << "QProcessManager::sigchldHnd()" << oendl; |
319 | #endif | 323 | #endif |
320 | QProc *proc; | 324 | QProc *proc; |
321 | QProcess *process; | 325 | QProcess *process; |
322 | bool removeProc; | 326 | bool removeProc; |
323 | proc = procList->first(); | 327 | proc = procList->first(); |
324 | while ( proc != 0 ) { | 328 | while ( proc != 0 ) { |
325 | removeProc = FALSE; | 329 | removeProc = FALSE; |
326 | process = proc->process; | 330 | process = proc->process; |
327 | QProcess *process_exit_notify=0; | 331 | QProcess *process_exit_notify=0; |
328 | if ( process != 0 ) { | 332 | if ( process != 0 ) { |
329 | if ( !process->isRunning() ) { | 333 | if ( !process->isRunning() ) { |
330 | #if defined(QT_QPROCESS_DEBUG) | 334 | #if defined(QT_QPROCESS_DEBUG) |
331 | odebug << "QProcessManager::sigchldHnd() (PID: " << proc->pid << "): process exited (QProcess available)" << oendl; | 335 | odebug << "QProcessManager::sigchldHnd() (PID: " << proc->pid << "): process exited (QProcess available)" << oendl; |
332 | #endif | 336 | #endif |
333 | // read pending data | 337 | // read pending data |
334 | int nbytes = 0; | 338 | int nbytes = 0; |
335 | if ( ::ioctl(proc->socketStdout, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) { | 339 | if ( ::ioctl(proc->socketStdout, FIONREAD, (char*)&nbytes)==0 && nbytes>0 ) { |
336 | #if defined(QT_QPROCESS_DEBUG) | 340 | #if defined(QT_QPROCESS_DEBUG) |
337 | odebug << "QProcessManager::sigchldHnd() (PID: " << proc->pid << "): reading " << nbytes << " bytes of pending data on stdout" << oendl; | 341 | odebug << "QProcessManager::sigchldHnd() (PID: " << proc->pid << "): reading " << nbytes << " bytes of pending data on stdout" << oendl; |
338 | #endif | 342 | #endif |
339 | process->socketRead( proc->socketStdout ); | 343 | process->socketRead( proc->socketStdout ); |
340 | } | 344 | } |