mirror of
https://github.com/openssl/openssl.git
synced 2025-01-18 13:44:20 +08:00
apps/speed.c: Wait for generated children
In multi-mode, speed fork()s off several children but does not wait for them. On Linux, this leads to wrong accounting information of getrusage used by tools to extract running time and page faults. Wait for every children and check the return code and termination signal. Signed-off-by: Juergen Christ <jchrist@linux.ibm.com> Reviewed-by: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/19093)
This commit is contained in:
parent
d9aca2dd9b
commit
56233ba857
16
apps/speed.c
16
apps/speed.c
@ -67,6 +67,7 @@
|
||||
# define HAVE_FORK 0
|
||||
# else
|
||||
# define HAVE_FORK 1
|
||||
# include <sys/wait.h>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
@ -3432,6 +3433,7 @@ static int do_multi(int multi, int size_num)
|
||||
int n;
|
||||
int fd[2];
|
||||
int *fds;
|
||||
int status;
|
||||
static char sep[] = ":";
|
||||
|
||||
fds = app_malloc(sizeof(*fds) * multi, "fd buffer for do_multi");
|
||||
@ -3581,6 +3583,20 @@ static int do_multi(int multi, int size_num)
|
||||
fclose(f);
|
||||
}
|
||||
OPENSSL_free(fds);
|
||||
for (n = 0; n < multi; ++n) {
|
||||
while (wait(&status) == -1)
|
||||
if (errno != EINTR) {
|
||||
BIO_printf(bio_err, "Waitng for child failed with 0x%x\n",
|
||||
errno);
|
||||
return 1;
|
||||
}
|
||||
if (WIFEXITED(status) && WEXITSTATUS(status)) {
|
||||
BIO_printf(bio_err, "Child exited with %d\n", WEXITSTATUS(status));
|
||||
} else if (WIFSIGNALED(status)) {
|
||||
BIO_printf(bio_err, "Child terminated by signal %d\n",
|
||||
WTERMSIG(status));
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user