--- src/corelib/io/orig.qprocess_unix.cpp	2014-04-10 20:37:11.000000000 +0200
+++ src/corelib/io/qprocess_unix.cpp	2014-12-11 17:03:26.000000000 +0100
@@ -1296,17 +1296,18 @@
     processManager()->remove(q);
 }
 
+//https://codereview.qt-project.org/#/c/61294/
 bool QProcessPrivate::waitForDeadChild()
 {
     Q_Q(QProcess);
 
     // read a byte from the death pipe
     char c;
-    qt_safe_read(deathPipe[0], &c, 1);
+    qint64 readcount = qt_safe_read(deathPipe[0], &c, 1);
 
     // check if our process is dead
     int exitStatus;
-    if (qt_safe_waitpid(pid_t(pid), &exitStatus, WNOHANG) > 0) {
+    if (qt_safe_waitpid(pid_t(pid), &exitStatus, readcount > 0 ? WNOHANG : 0) > 0) {
         processManager()->remove(q);
         crashed = !WIFEXITED(exitStatus);
         exitCode = WEXITSTATUS(exitStatus);
