summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/libs/installer/adminauthorization_x11.cpp20
1 files changed, 10 insertions, 10 deletions
diff --git a/src/libs/installer/adminauthorization_x11.cpp b/src/libs/installer/adminauthorization_x11.cpp
index f451f344e..f3372ddd2 100644
--- a/src/libs/installer/adminauthorization_x11.cpp
+++ b/src/libs/installer/adminauthorization_x11.cpp
@@ -162,10 +162,17 @@ bool AdminAuthorization::execute(QWidget *parent, const QString &program, const
int errBytes = 0;
char buf[1024];
char errBuf[1024];
+ int status;
+ bool statusValid = false;
while (bytes >= 0) {
- int state;
- if (::waitpid(child, &state, WNOHANG) == -1)
+ const pid_t waitResult = ::waitpid(child, &status, WNOHANG);
+ if (waitResult == -1) {
+ break;
+ }
+ if (waitResult == child) {
+ statusValid = true;
break;
+ }
bytes = ::read(masterFD, buf, 1023);
if (bytes == -1 && errno == EAGAIN)
bytes = 0;
@@ -203,15 +210,8 @@ bool AdminAuthorization::execute(QWidget *parent, const QString &program, const
return false;
}
- int status;
- child = ::wait(&status);
- const int exited = WIFEXITED(status);
- const int exitStatus = WEXITSTATUS(status);
::close(pipedData[1]);
- if (exited)
- return exitStatus == 0;
-
- return false;
+ return statusValid && WIFEXITED(status) && WEXITSTATUS(status) == 0;
}
// child process