/** \returns true in the child glxtest process, false in the parent process */ bool fire_glxtest_process() { int pfd[2]; if (pipe(pfd) == -1) { perror("pipe"); return false; } pid_t pid = fork(); if (pid < 0) { perror("fork"); close(pfd[0]); close(pfd[1]); return false; } if (pid == 0) { close(pfd[0]); write_end_of_the_pipe = pfd[1]; glxtest(); close(pfd[1]); return true; } close(pfd[1]); mozilla::widget::glxtest_pipe = pfd[0]; mozilla::widget::glxtest_pid = pid; return false; }
/** \returns true in the child glxtest process, false in the parent process */ bool fire_glxtest_process() { int pfd[2]; if (pipe(pfd) == -1) { perror("pipe"); return false; } pid_t pid = fork(); if (pid < 0) { perror("fork"); close(pfd[0]); close(pfd[1]); return false; } // The child exits early to avoid running the full shutdown sequence and avoid conflicting with threads // we have already spawned (like the profiler). if (pid == 0) { close(pfd[0]); write_end_of_the_pipe = pfd[1]; glxtest(); close(pfd[1]); _exit(0); } close(pfd[1]); mozilla::widget::glxtest_pipe = pfd[0]; mozilla::widget::glxtest_pid = pid; return false; }