unix,benchmark: use fd instead of FILE* after fork

The FILE* object is not guaranteed to be in the same state after
a fork. Instead store the file descriptor instead and use that in
the child process.

PR-URL: https://github.com/libuv/libuv/pull/1369
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Santiago Gimeno <santiago.gimeno@gmail.com>
This commit is contained in:
John Barboza 2017-05-31 06:08:44 -04:00 committed by Santiago Gimeno
parent 404ee42706
commit d4f3a42ec7
No known key found for this signature in database
GPG Key ID: F28C3C8DA33C03BE

View File

@ -61,12 +61,14 @@ int platform_init(int argc, char **argv) {
/* Make sure that all stdio output of the processes is buffered up. */
int process_start(char* name, char* part, process_info_t* p, int is_helper) {
FILE* stdout_file;
int stdout_fd;
const char* arg;
char* args[16];
int n;
pid_t pid;
stdout_file = tmpfile();
stdout_fd = fileno(stdout_file);
if (!stdout_file) {
perror("tmpfile");
return -1;
@ -103,8 +105,8 @@ int process_start(char* name, char* part, process_info_t* p, int is_helper) {
args[n++] = part;
args[n++] = NULL;
dup2(fileno(stdout_file), STDOUT_FILENO);
dup2(fileno(stdout_file), STDERR_FILENO);
dup2(stdout_fd, STDOUT_FILENO);
dup2(stdout_fd, STDERR_FILENO);
execvp(args[0], args);
perror("execvp()");
_exit(127);